Git fejtágítás

Fórumok

Git-el kapcsolatban szeretnék tanácsokat kérni.

Most ismerkedek vele és nagyon tetszik benne a gyorsaság, a rugalmasság, az elosztottság és a belőle adódó "inherens backup".
Ami nem tetszik, hogy egyelőre hülye vagyok hozzá, és nem sikerült még teljesen rájönnöm, hogy az eddig használt módszereimet hogyan tudnám átvinni Git alá.

Az első dolog ami feltűnt, az, hogy az egész erősen épít a különböző branchek használatára (ha jól értem). Pedig ez az, amire elvileg kevésbé lenne szükségem. Eddig szerver-kliens alapú verziókezelőkkel volt csak dolgom, ahol főleg olyan projektekkel kellet foglalkozni, amikben kevés a branch, a fejlesztés alapvetően lineáris. Ezzel szemben gyakran szükség volt olyasmire pl., hogy egy adott baselineból kiindulva egyes fájlok/könyvtárak korábbi/régebbi verzióival kellett dolgozni, pl.: valahogy így:

- Lemásolom X baseline-t, ami 'A' könyvtár 2-es, 'b'-fájl 4-es, 'c'-fájl 3-as verzióját tartalmazza.
- Ezután lehet, hogy valamelyik komponens régebbi vagy újabb verziójára van szükségem, ezért a munkakönyvtáramba behúzom pl. 'A' könyvtár 1-es verzióját a 2-es helyébe, 'b'-fájl 5-ös verzióját a 4-es helyébe, 'c'-t pedig változatlanul hagyom. Tehát, a különböző komponensek időben egymástól eltérő, de legalábbis nem egy baselinehoz tartozó változatát is szeretném együttesen használni.

Ez az a funkcionalitás, amire még nem jöttem rá, hogy Git-ben hogyan is működik pontosan, vagy, ha ilyen nincs, akkor mi az, amivel hasonló eredményt lehet elérni.

Ugyanis, azt látom, hogy, ha commitolok egy módosítást, akkor az egész branchet lépteti egyel, nem tudom, hogy hogyan tudom úgy beállítani a munkakönyvtáramat, hogy, ha pl. egy sok lépéssel korábbi commitból pl. az egyik módosítást ki szeretném hagyni.

Úgy sejtem, hogy itt más az elképzelés ilyen esetben, az ilyesminek talán valahogy egy külön branchet kell létrehozni, amiben valahogy össze lehet válogatni az éppen szükséges commitokat, de még nem jöttem rá, hogy ennek pontosan hogyan is kellene kinéznie ahhoz, hogy funkcionalitásban a lehető legközelebb essen a fentebb leírt példához.

Hozzászólások

Azt hiszem a rebase funkcióra lesz szükséged, annak olvass utána.

A branchekkel meg jobb ha megbarátkozol. Linusnak teljesen más elképzelései vannak a verziókövetésről, mint a világ többi 6999999999 emberének. :)

CVS-t használtam sokáig, meg néha melók miatt Sourcesafet (rohadjon meg a microsoft a gány szoftvereivel együtt), de mostanában már Gittet. A Git jó, és jót tesz a bőrnek, mindenkinek ajánlott.

Ilyen későn nem teljesen értem, hogy mit szeretnél, de ha csak annyit, hogy egyetlen file térjen vissza egy korábbi verzióra, akkor ennyivel meg tudod csinálni:

git checkout commit-hash filenév

a commit-hash értelemszerűen az a commit/branch/tag, amire vissza akarsz térni. Vagy ha az utolsó még nem commitolt módosításra akarsz visszatérni, akkor:

git revert filenév

--
http://sandor.czettner.hu

Köszönöm, azthiszem ezt kerestem. Nem tudtam, hogy a checkout fájlokra is működik, azt hittem, hogy csak branchekre (alapból a git-gui-val próbálkoztam és abban nem találtam ilyet).

Viszont a revert nem működik, talán azért, mert most éppen nincs nem commitolt módosítás (úgy még nem prbáltam). De a git checkout HEAD-al visszatért az utolsó commitoltra,nekem most az is jó.

"git checkout"-tal kicheckoutolod a file kivant verziojat, es igy lehet regebbi verziod abban a konyvtarban

pl.:

git checkout HEAD^ Makefile

ez az 1-gyel regebbi Makefile-t "hozza letre", a HEAD^ helyett lehet sha_id is

___
info

Köszönöm, ez lesz az.

Esetleg tudsz valami jó gui-t, amin ezt meg lehet csinálni, és szépen fájlszinten is ki tudja rajzolni valahogy, hogy merre hány méter?

A másik dolog pedig, hogy, ha pl. ilyesmit csinálok, és a változtatásokat egy külön branchben akarom vezetni, ami csak egy (vagy néhány) fájlban tér el a pl. master branch HEAD-jétől, akkor az így keletkezett branch az honnan fog kiindulni? A master headtől, az adott fájl(ok) régebbi commitjaitól, vagy valahogy mindkét helyről?

szerk.:

kipróbáltam, és a gitk úgy mutatja, hogy a master headtől. Pedig én azt vártam volna, hogy az is látszik, hogy a régebbi változatú fájl honnan jön. Vagy ez az információ amúgy megvan, csak a gui nem rajzolja ki?

szerk2.:

van még valami amit nem értek: ha egy fájlból párhuzamosan több változatot akarok, de értelemszerűen egyszerre csak egy van a master branchben, akkor a többi hol van? Az triviális(nak tűnik), hogy egy másik branchben. De akkor ez azt is jelenti, hogy a legkisebb párhuzamosan vitt dolog is egy-egy külön branchben megy? Vagyis, nem az összes, mert egy branchbe több módosítás is kerülhet, de akkor azoknak a fájloknak legalább külön branchbe kell kerülniük, amik egymással tetszőleges kombinációt alkothatnak? Mert ez szerintem előbb-utóbb átláthatatlanná fogja tenni a brancheket.
Nincs valami hierarchia? Kicsit nehezen tudok elszakadni az eddigi verziókezelős tapasztalataimtól, olyasmire gondolok, hogy pl. felső (konfiguráció) szintű brancheknél nem látszik és/vagy irreleváns, hogy az egyes fájlok benne hogyan branchelődnek.