git, svn, mercurial

Neo

The Good Doctor
Sugar daddy
Joined
Oct 16, 2005
Messages
10,769
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.
 

Thor

Membru Junior
Joined
Dec 6, 2004
Messages
2,119
Use the force (`--force`).

Tu ai actualizat commit-urile, în branch-ul tău și trebuie să reactualizezi ceea ce ai împins în repo.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,279
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?
 

LNT

Meşter Strică-Tot
Sugar daddy
Joined
Mar 31, 2007
Messages
3,345
Pai...il stergi si il adaugi din nou.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,279
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.
 

Thor

Membru Junior
Joined
Dec 6, 2004
Messages
2,119
Faci backup fișierului modificat, faci unstage, apoi `git rm`...
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,279
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?
 

miahi

Wizzard
Sugar daddy
Joined
Aug 1, 2004
Messages
8,611
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.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,279
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?
 

AdrianB1

Membru Senior
Sugar daddy
Joined
Aug 3, 2004
Messages
8,221
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.
 

Neo

The Good Doctor
Sugar daddy
Joined
Oct 16, 2005
Messages
10,769
(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).
 

AdrianB1

Membru Senior
Sugar daddy
Joined
Aug 3, 2004
Messages
8,221
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.
 

miahi

Wizzard
Sugar daddy
Joined
Aug 1, 2004
Messages
8,611
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.
 

AdrianB1

Membru Senior
Sugar daddy
Joined
Aug 3, 2004
Messages
8,221
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.
 
Top Bottom