git, svn, mercurial

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
Git:
Am facut git clone la ceva de pe github. Mi-am salvat propriile modificari intr-un branch nou, local. Master-ul de pe github are acum update-uri. Cum fac sa incorporez update-urile alea in branch-ul meu?

Multumesc.
 

jarod

Super Moderator
Sugar daddy
Joined
Nov 27, 2003
Messages
1,604
Cred că tre să faci un git pull pentru a aduce master-ul la zi și apoi git merge ca să merge-uiești branch-ul tău în master (și să speri că nu apar conflicte :smile:).
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
OK, am facut pull deja. Dar nu prea vreau sa amestec branch-ul meu cu master-ul. Ma uitam la git rebase. Nu-i mai bun asta?

In orice caz, am conflicte. Imi spune care-s fisierele, dar nu stiu cum ar trebui sa analizez diferentele. E vorba de un fisier changelog pe care eu nu-mi amintesc sa-l fi modificat.
Am incercat git diff <fisier> dar nu m-am lamurit. Nu scrie care varianta este cea locala si care-i cea din master, presupunand ca git diff dupa un rebase neterminat chiar asta arata, nu total alteceva.
 

jarod

Super Moderator
Sugar daddy
Joined
Nov 27, 2003
Messages
1,604
Nu prea am folosit git, dar din cum înțeleg io că funcționează, un workflow comun ar fi ceva de genul: faci clone la repo, faci checkout într-un branch local, faci modificările în branch-ul tău local, iar când ai terminat faci merge înapoi în master-ul tău local. Apoi, dacă vrei poți să faci push înapoi către sursă.

Dacă în timp ce tu faci modificări în branch-ul tău, master-ul remote se schimbă, cred că e recomandat să îți sincronizezi master-ul local cu cel remote (via pull sau fetch?) înainte să faci merge.

Poate ar trebui să explici mai clar ce vrei să obții exact.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
Vreau sa am modificarile mele aplicate constant peste ultima versiune de pe github.
 

miahi

Wizzard
Sugar daddy
Joined
Aug 1, 2004
Messages
8,405
Faci rebase, dar nu înseamnă că n-o să ai probleme (conflicte). Dar dacă ai conflicte cu fișiere pe care tu zici că nu le-ai modificat, vezi istoricul tău vs istoricul lor. Poate ai bușit setări de autocrlf și ai modificat toate fișierele.

Ia un tool vizual, că e mai simplu de văzut ce-i acolo decât cu linia de comandă - vezi tree-ul vizual, vezi tot logul, vezi ce fișiere ai modificat etc.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
Am facut un rebase. Doua fisiere modificate. Am facut checkout la fisierele din master, apoi git add la cele doua si git rebase --continue. Apoi m-am pierdut. Imi zice ca sunt cu 4 commit-uri inaintea master-ului !?

Care tool vizual e ala? (PS: am un gentoo *foarte* personalizat)
 

Styr

Follower of the old ways
Sugar daddy
Joined
Oct 14, 2003
Messages
1,581
'git log' ar trebui să te lămurească mai bine decât noi care îs alea 4 commits.
 

Thor

Membru Junior
Sugar daddy
Joined
Dec 6, 2004
Messages
2,037
Încearcă `gitk` sau `tig` pentru tool-uri cu interfaţă (grafică sau TUI).
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
Fac un rebase. Branch-ul origin/master peste branch-ul meu local marius95.
Am conflicte. Unul dintre ele este un fisier modificat in marius95 de nenumarate ori, acum modificat si in master. Cand fac rebase se opreste la primul commit din marius95, adica ceva f. f. vechi. Banuiesc ca vrea sa aplice toate modificarile din marius95 secvential. Dar sunt o gramada!
Cum fac sa nu trec prin toate commit-urile pe fisierul respectiv?
 

miahi

Wizzard
Sugar daddy
Joined
Aug 1, 2004
Messages
8,405
Vezi squash, care îți lipește toate modificările într-una singură (preferabil într-un alt branch).
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
Am decoperit ca merge si git rebase --skip acolo unde pot sari peste intreg commit-ul.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
Se dau doua surse pe github, A = original si B = derivata din A, precum si clona mea locala (C) derivata din B.
A s-a actualizat de mai multe ori. B nu; posibil sa fie abandonat.
Vreau sa actualizez C cu ultimele modicari din A. Cum fac asta usor?
Sau cum fac sa renunt de tot la B si sa "leg" C direct de A, pastrand ultimele modificari din B.
 

miahi

Wizzard
Sugar daddy
Joined
Aug 1, 2004
Messages
8,405
Schimbi remote-ul la A și pull; preferabil faci un branch separat pentru starea ta curentă și rebase pe master după ce ai făcut pull.
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
S-a blocat calculatorul in timpul unui build. Dupa reset am gasit numeroase erori pe hard. Le-a auto-corectat. Am verificat git-ul cu git fsck si totul e in regula, dar cum verific fisierele "checked out"? De fapt, cel mai mult mi-ar place sa fac un checkout care sa-mi suprascrie fisierele deja existente, dar sa nu stearga fisierele noi care nu-s in git.
Deci cum fac?
 

miahi

Wizzard
Sugar daddy
Joined
Aug 1, 2004
Messages
8,405
Păi dacă git se prinde că-s modificate ar trebui să fie în git status
Dacă nu crezi că s-a prins, și vrei să te asiguri:

git add . (aici ar trebui să-ți pui fișierele tale)
git stash
git reset --hard
git stash apply

Filozofia git e să-ți faci un branch în care să îți ții (în git) "fișierele noi care nu-s în git" :smile:
 

Marius '95

Membru Senior
Sugar daddy
Joined
Nov 13, 2005
Messages
5,020
Eh... filozofia e una, practica e alta. Am .config-ul de la build salvat, dar mai sunt si alte fisiere si nu le stiu pe toate.
Momentan dau un "make dirclean" si un "make" sa vad ce iese.

Alta idee: daca mut fisierele in alt director (fara .git), dau "git reset --hard" si apoi mut inapoi fisierele vechi fara sa le suprascriu pe cele nou scoase din git?
 

miahi

Wizzard
Sugar daddy
Joined
Aug 1, 2004
Messages
8,405
Eh, atunci practica e simplă: dă-le naibii de fișiere, oricum nu erau importante, le scrii iar. Presupun că nici git remote nu ai, pentru că git e doar o complicație pentru că e folosit de alții.

Da, se poate și asta cu mutatul fisierelor.
 
Top Bottom