git, svn, mercurial

Păi depinde ce probleme au fost ridicate de colaboratorii proiectului, nu există magic bullet. Dacă sunt probleme cu codul, oamenii de obicei sugerează schimbări la care poți da tu commit direct. Din experiența personală, dacă vrei un pull request curat de obicei faci o listă cu schimbările, ștergi pull request și refaci tot după ce clonezi din nou și faci schimbările respective.

Rebase mi se pare can of worms până acum, este mai simplu să ștergi pull request și s-o iei de la capăt cumva.

Un link la pull request ar ajuta să fii ajutat.
 
Use the force (`--force`).

Tu ai actualizat commit-urile, în branch-ul tău și trebuie să reactualizezi ceea ce ai împins în repo.
 
git. Am facut ordine intr-un fisier. Linii mutate, spatii=>tab-uri, adaugat comentarii, etc. etc. Cand fac commit, diff-ul arata ca naiba. Nu se mai intelege absolut nimic din el.
Exista vreo posibilitate ca acel commit sa arate varianta veche a fisierului ca pe un fisier sters in intregime si varianta noua ca pe un fisier nou creat, in loc sa faca un diff?
 
Nope.
1) backup fisier
2) git rm
3) copiat la loc fisierul
4) git add
5) git commit
6) git rebase -i cu fixup
=> acelasi rezultat.
 
Vreau sa folosesc git pentru cateva fisiere din /etc, /sbin, /root, dar vreau ca directoarele si fisierele pe care le creaza git sa fie altundeva decat in root. Root trebuie sa ramana necontaminat.
Am citit despre --git-dir si --work-tree dar n-am inteles mare lucru.
Help?
 
Păi git-dir îi zice unde e directorul .git și work-tree îi zice unde sunt fișierele efectiv. Of course, ca să nu omori git-ul cu tot filesystem-ul probabil va trebui să faci un .gitignore mare (în root), pentru că va trebui să folosești --work-tree=/

Code:
miahi@MIAHI-P53 MINGW64 /e/tmp
$ mkdir test1

miahi@MIAHI-P53 MINGW64 /e/tmp
$ mkdir test2

miahi@MIAHI-P53 MINGW64 /e/tmp
$ git --git-dir=/e/tmp/test1/.git --work-tree=/e/tmp/test2 init
Initialized empty Git repository in E:/tmp/test1/.git/

miahi@MIAHI-P53 MINGW64 /e/tmp
$ touch test2/blabla.txt

miahi@MIAHI-P53 MINGW64 /e/tmp
$ git --git-dir=/e/tmp/test1/.git --work-tree=/e/tmp/test2 add .

miahi@MIAHI-P53 MINGW64 /e/tmp
$ git --git-dir=/e/tmp/test1/.git --work-tree=/e/tmp/test2 status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   blabla.txt

miahi@MIAHI-P53 MINGW64 /e/tmp
$ git --git-dir=/e/tmp/test1/.git --work-tree=/e/tmp/test2 commit -m "blabla"
[master (root-commit) 2f0af14] blabla
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 blabla.txt

miahi@MIAHI-P53 MINGW64 /e/tmp
$ git --git-dir=/e/tmp/test1/.git --work-tree=/e/tmp/test2 status
On branch master
nothing to commit, working tree clean

miahi@MIAHI-P53 MINGW64 /e/tmp
$ git --git-dir=/e/tmp/test1/.git --work-tree=/e/tmp/test2 log
commit 2f0af14f5fb036a16ca76211d7797993bb02fd9b (HEAD -> master)
Author: miahi <me@miahi.ro>
Date:   Tue Jun 21 11:55:55 2022 +0300

    blabla

Vezi și etckeeper.
 
Cam asta e partea care n-am inteles-o. git-dir zice doar despre .git, nu si celelalte fisiere ale git-ului. Cum fac sa nu am nici .gitignore, nici .gitattributes, nici nimic altceva git* in root?
 
Mi-a adus aminte Neo de o chestie: foloseste cineva git clone si stie sa sincronizeze automat commits in ambele repo? Am un Gitea local pe care il folosesc ca backup pentru momentele rare cand nu am acces la Gitlab-ul de la birou, dar imi e lene sa il sincronizez manual si nu am vazut vreo solutie automata, alta decat un script rulat periodic din Task Scheduler.
 
(irelevant) Eu folosesc Github Desktop ca ultimu' noob și îi dau pull origin înainte să știu că plec cu laptopul după mine unde n-am internet. La commits eu merg prin pull requests deci se mai uită și oameni competenți între când dau eu commit și când chestia e committed.

Manualul la git-clone, personal dau clickuri :biggrin: Din ce scrie acolo ar merge ce vrei tu, dar întâi dai clone la cel de la biro apoi dai commit local și clone spre cel de la birou (sau cel puțin așa îl citesc eu).
 
Se poate face asta, dar manual. Din cauza de lene, o fac rar. Computerul pe care lucrez de obicei e o masina virtuala, pe aia am tot, in Gitlab am tot, pe laptop nu am nimic. Cat de curand o intind in nord cu laptopul, de acolo am acces facil la Gitea, mai greu la masina virtuala si preferabil deloc la Gitlab, nu vreau sa apar online pe-acolo cand nu am chef sa fiu cautat. Intrucat vreau sa am vizibilitate la tot ce se intampla in Gitlab in vreo 3 repo, ar fi fost bine sa am o replicare automata in Gitea, dar pot sa traiesc si fara aia, fac repo-urile read-only pentru restul lumii si stiu sigur ca nu o sa existe modificari.
 
Fiind vorba de Gitlab, probabil poți configura webhooks ca trigger de sincronizare, dar nu știu Gitea ca să-ți zic în ce direcție s-o iei, dacă are ceva simplu pentru asta. Basically gitlab-ul ar face un callback pe un URL de-al tău la fiecare update, și de-acolo e treaba ta.
 
Serverele de Gitea si Gitlab nu se vad intre ele, doar masina pe care lucrez le vede pe ambele, Gitlab doar prin VPN. Altfel era destul de usor sa pun un job de sincronizare. VSCode nu are optiunea (nici prin Gitlens) de a face commit in 2 repo simultan, nu am idee cati oameni au nevoie de asa ceva, probabil nu prea multi.
 
As vrea sa fac un backup unui git f. f. mare, public, la care am adaugat niste branch-uri proprii. Este practic imposibil sa dispara git-ul public. Sigur nu am nevoie de backup la el.
Exista vreo metoda de a salva doar ce am adaugat, fara sa fac backup la tot? Ar fi f. preferabil sa se salveze cu tot cu branch, ca am un "trunchi" comun si 3 ramuri pentru 3 device-uri. As vrea sa le pastrez asa, inclusiv descrierile din commit-uri.
Multumesc.
 
Cred ca nu cred ca am inteles complet ce vrei, dar daca vrei 3 branches poti face fetch la cele 3 si le arhivezi undeva.
 
Back
Top