Synchronizace GIT repozitářů

neron

Synchronizace GIT repozitářů
« kdy: 08. 12. 2011, 15:29:39 »
Zdravím, snažím se proniknout do tajů Gitu a narazil jsem na 2 věci, se kterými bych potřeboval poradit.
1) Karel si vytvoří repozitář přes git init, Pepa také, oba začnou pracovat na nějakém projektu. Po čase budou chtít svoji práci spojit, jak to udělají? Může si třeba Karel přidat přes git remote Pepovo repozitář, udělat merge jeho práce se svoji a pak vše comitnout i Pepovi do jeho repozitáře?

2) Teď pokud si oba udělají svůj repozitář přes git clone, tj. oba zkopírují nějaký centrální repozitář, mají nějak možnost si vyměňovat svoje úpravy bez pomoci toho cetrálního repozitáře?

Resp, jsem asi obecně nepochopil, jaká by měla být struktura těch repozitářů a jaký režim práce, pokud je tým lidí, z nichž část pracuje jinde a nemá možnost pravidelně se synchronizovat s centrálním repozitářem.


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Synchronizace GIT repozitářů
« Odpověď #1 kdy: 08. 12. 2011, 16:09:19 »
U toho git init nevím.

U toho git clone to vím jistě - ano.

Karel si vytovíř klon z centrálního:
repo@karel.cz/ git clone ssh://repo@centralni.cz/projekt

Pepa taktéž
repo@pepa.cz/ git clone ssh://repo@centralni.cz/projekt

Karel updatuje z centrálního
repo@karel.cz/ git pull ssh://repo@centralni.cz/projekt

Karel updatuje z pepovo,
repo@karel.cz/ git pull ssh://repo@pepa.cz/projekt

a pak mu posílá své změny
repo@karel.cz/ git push ssh://repo@pepa.cz/projekt

Pepa aktualizuje karlovo změny
repo@pepa.cz/ git pull ssh://repo@karel.cz/projekt

Pak mu posílá své změny
repo@pepa.cz/ git push ssh://repo@karel.cz/projekt

V praxi se pravděpodobně ustanoví nějaké zvyklosti. Například, že se nebudou změny tlačit, ale že si je každej stáhne od kolegů. Nebo, že vytvoří nějaký centrální repozitář, kam se budou aktualizovat, a následně zase z něj stahovat.

Rozdíl oproti svn je v tom, že ten centrální repozitář je centrální jen na dohodě. Pokud máte tým tří lidí, tak můžete fungovat tak, že si před prací každej stáhne změny od všech tří. Ale v případě, kdy máte tým třiceti lidí, to budete dělat asi přes nějakého prostředníka. Třeba tak, že každých deset lidí bude mět svého seniora, a senioři to budou schvalovat a pak posílat mezi ostatními seniory... Třeba.

U svn jsi měl právě jen jeden model.

Inkvizitor

Re:Synchronizace GIT repozitářů
« Odpověď #2 kdy: 08. 12. 2011, 16:28:25 »
Důrazně nedoporučuji, aby přenos commitů probíhal obousměrně a aby si ho mohli dělat oba vývojáři navzájem. V dnešní době nevidím moc důvod nemít centrální repozitář přístupný online, nicméně je možné si mailem přenášet patche (git format-patch + git am). V případě vysoké frekvence přibývání patchů to je ovšem dost nepraktické.

neron

Re:Synchronizace GIT repozitářů
« Odpověď #3 kdy: 08. 12. 2011, 19:22:48 »
Diky za obe odpovedi. Ja chapu ze uplne nejjednodussi je mit 1 centralni repozitar, ale prave potrebuju vyresit situaci kdy neni, resp. je, ale cast tymu k nemu nebude mit online pristup, pouze treba 1x tydne. A otazka je, jak behem toho tydne muzou bez nej pracovat a vymenovat si svoje comity.

ovrscout

Re:Synchronizace GIT repozitářů
« Odpověď #4 kdy: 09. 12. 2011, 08:33:51 »
Pro normální fungování výměny dat mezi repozitáři (fetch/push/merge/rebase) je třeba aby mněli stejný "strom", tj aby začínaly stejným prvním commitem čili jednou git init a pak další dělat pomocí clone. Clonovat můžete od kohokoliv a ne nutne jen od toho prvniho repozitare.Stejne tak vymenovat commity muzete s kym je vam libo, at uz primo(fetch/push) nebo jako patche prez mail či jako git bundle.

Další pravidla(nebo spíše ujednání) budou záležet na tom jak budete mít projekt rozdělen na větve a zda/jak budete větve slučovat nebo udržovat pomocí rebase. Dva vývojáři si snadno fetchnou mezi sebou, ale pro více již bude třeba určit alespoň jak často(a kdo) se bude dělat něco jako oficialni release kde se stahnou vsechny stabilni veci od vsech a po kontrole se tento vysledek zase zpatky vsem posle(resp si ho fetchnou) aby se pak po delsi době nezjistilo že je to obtížné/nemožné. I když to pak začíná vypadat jako centralni repozitar, ale nevylučuje to možnost vyměňovat si věci mezi ostatnímy repozitáři přímo.

Nadruhou stranu si dokážu představit situace kdy toto vhodné nebude a pak bych zvážil radu Inkvizitora. Opravdu zaleží na stylu prace s repozitari(větve/slučování/rebase) a počtu repozitářů/prográmatorů.
Pro inspiraci se můžete kouknout na dokument http://www.root.cz/knihy/pro-git/  v kapitole 5 jsou nějaké obecné postupy spolupráce repozitářů popsány.