it-swarm-eu.dev

Zamykání binárních souborů pomocí systému git version control

Po dobu jednoho a půl roku jsem se díval na komunitu git v naději, že se přechod od SVN dostane pryč. Jeden konkrétní problém, který mě drží zpět, je neschopnost uzamknout binární soubory. V uplynulém roce jsem ještě neviděl vývoj v této oblasti. Chápu, že zamykání souborů je v rozporu se základními principy řízení distribuovaného zdroje, ale nevidím, jak může společnost vyvíjející web využít výhod systému git ke sledování zdrojových kódů a změn obrazových souborů, pokud existuje potenciál pro konflikty binárních souborů.

Aby se dosáhlo účinků uzamčení, musí být identifikováno „centrální“ úložiště. Bez ohledu na distribuovaný charakter git, většina společností bude mít "centrální" úložiště pro softwarový projekt. Měli bychom být schopni označit soubor jako vyžadující uzamčení z řídícího úložiště git na zadané adrese. Možná je to obtížné, protože git sleduje obsah souboru ne soubory?

Má někdo z vás zkušenosti s řešením souborů git a binárních souborů, které by měly být před úpravou uzamčeny?

POZNÁMKA: Vypadá to, že Source Gear je nový open source distribuovaný projekt řízení verzí, Veracity, který má uzamčení jako jeden ze svých cílů.

72
Mario

Git LFS 2.0 přidal podporu pro zamykání souborů.

S Git LFS 2.0.0 můžete nyní uzamknout soubory, na kterých aktivně pracujete, a zabránit ostatním v tom, aby se přesunuli na server GIT LFS, dokud soubory znovu neodemknete.

Zabráníte tak konfliktům sloučení a ztrátě práce na neslučitelných souborech na úrovni souborového systému. I když se může zdát, že je to v rozporu s distribuovanou a paralelní povahou Gitu, zamykání souborů je důležitou součástí mnoha pracovních postupů pro vývoj softwaru - zejména pro větší týmy pracující s binárními aktivy.

6
osowskit

Subversion má zámky a nejsou jen poradci. Mohou být vynuceny pomocí atributu svn:needs-lock (ale mohou být také záměrně zlomeny v případě potřeby). Je to správné řešení pro správu neslučitelných souborů. Společnost pracuji pro obchody téměř vše v Subversion a používá svn:needs-lock pro všechny neslučitelné soubory.

Nesouhlasím s "zámky jsou jen komunikační metoda". Jedná se o mnohem účinnější metodu než Push-notifikace, jako je telefon nebo e-mail. Subversion zámky jsou samo-dokumentující (kdo má zámek). Na druhé straně, pokud musíte komunikovat s jinými tradičními kanály Push-oznámení, jako je e-mail, komu posíláte oznámení? Nevíte předem, kdo by mohl chtít soubor upravit, zejména na open-source projektech, pokud nemáte kompletní seznam celého vývojového týmu. Takže tyto tradiční komunikační metody nejsou téměř tak účinné.

Centrální zamykací server, zatímco proti principům DVCS, je jedinou proveditelnou metodou pro neslučitelné soubory. Dokud DVCS nemá funkci centrálního zamykání, myslím si, že bude udržovat společnost, se kterou pracuji, pro používání Subversion.

Lepším řešením by bylo vytvořit nástroj pro sloučení všech formátů binárních souborů, což je však dlouhodobější cíl, který nebude nikdy "dokončen".

Zde je zajímavé čtení na toto téma.

74
Craig McQueen

Souhlasím s tím, že uzamčení binárních souborů je nezbytnou funkcí pro některá prostředí. Myslela jsem si, jak to provést:

  • Mají způsob, jak označit soubor jako "need-lock" (jako vlastnost "svn: needs-lock").
  • Při pokladně by git označil takový soubor pouze pro čtení.
  • Nový příkaz git-lock by kontaktoval centrální zamykací server, který je někde spuštěn, aby požádal o povolení k uzamčení.
  • Pokud server uzamčení udělí povolení, označte soubor read-write.
  • git-add by informoval server uzamčení obsahu hash uzamčeného souboru.
  • Zámkový server by sledoval, zda se tento obsah hash zobrazí v potvrzení v hlavním úložišti.
  • Když se objeví haš, uvolněte zámek.

To je velmi napůl upečený nápad a všude jsou potenciální díry. Také to jde proti duchu git, ale jistě může být užitečné v některých kontextech.

V rámci určité organizace by tento druh věcí mohl být vytvořen pomocí vhodné kombinace skriptů a háčků.

10
Greg Hewgill

V odezvě na Marioův další zájem se změnami děje na více místech na binárních souborech. Scénář je tedy Alice a Bob provádějí změny ve stejném binárním zdroji současně. Každý z nich má své vlastní místní repo, klonované z jednoho centrálního dálkového ovladače.

To je skutečně potenciální problém. Takže Alice skončí první a stiskne centrální alice/update větev. Normálně, když se to stane, Alice by oznámila, že by měla být přezkoumána. Bob to vidí a zkoumá. Může buď (1) začlenit tyto změny sám do své verze (větvení z alice/update a provedení změn) nebo (2) zveřejnit své vlastní změny bob/update. Opět vydá oznámení.

Teď, když Alice místo toho přejde na master, Bob má dilema, když táhne master a pokusí se sloučit do své místní pobočky. Jeho konflikty s Alice. Opět platí, že stejný postup může platit i na různých odvětvích. A i když Bob ignoruje všechna varování a spáchá Alici, je vždy možné vytáhnout Aliciin závazek opravit věci. To se stává jednoduše komunikačním problémem.

Protože (AFAIK) zámky Subversion jsou pouze informativní, e-mailová nebo rychlá zpráva by mohla sloužit stejnému účelu. Ale i když to neuděláte, Git vám to pomůže opravit.

Ne, neexistuje žádný blokovací mechanismus jako takový. Uzamykací mechanismus má však tendenci být jen náhradou za dobrou komunikaci. Věřím, že proto vývojáři společnosti Git nepřidali blokovací mechanismus.

10
Michael Johnson

Právě jsme začali používat Git (dříve Subversion) a našel jsem změnu pracovního postupu, která by mohla pomoci s vaším problémem, bez nutnosti zámků. Využívá výhod jak je git navržen a jak snadné jsou větve.

V podstatě se redukuje na posun na pobočku, která není master, provádí revizi této větve a pak se spojuje do hlavní větve (nebo podle toho, která cílová větev je).

Způsob, jakým je git "zamýšleno" používat, každý vývojář publikuje svůj vlastní veřejný repozitář, o který žádají ostatní, aby ho mohli vytáhnout. Zjistil jsem, že uživatelé Subversion mají s tím potíže. Namísto toho, Push to větev stromy v centrálním úložišti, s každým uživatelem, který má svůj vlastní větev stromu. Taková hierarchie může například fungovat:

users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey

Využijte své vlastní struktury. Poznámka: Zobrazuji také větve témat, další společný git idiom.

Poté v lokálním repo pro uživatele a:

feature1
feature2

A dostat se na centrální server (Origin):

git Push Origin feature1:users/a/feature1

(to lze pravděpodobně zjednodušit pomocí změn konfigurace)

Jakmile je funkce1 zkontrolována, kdo je zodpovědný (v našem případě je to vývojář této funkce, můžete mít za sloučení jednoho uživatele zodpovědného), provede následující:

git checkout master
git pull
git merge users/name/feature1
git Push

Tažení vyvolá načtení (táhne všechny nové hlavní změny a větev prvku) a aktualizace aktualizuje, co má centrální úložiště. Pokud uživatel provedl svou úlohu a sledoval master správně, neměly by existovat žádné problémy s sloučením.

To vše znamená, že i když uživatel nebo vzdálený tým provede změnu binárního zdroje, bude zkontrolován dříve, než bude začleněn do hlavní větve. A existuje jasné vymezení (založené na procesu), kdy se něco dostane do hlavní větve.

Můžete také programově vynucovat aspekty tohoto použití pomocí háčků git, ale opět jsem s nimi ještě nepracoval, takže o nich nemůžu mluvit.

8
Michael Johnson

Když jsem používal Subversion, nábožensky jsem nastavil vlastnost svn:needs-lock na všech binárních souborech a dokonce i na textových souborech, které je obtížné upravit. I nikdy ve skutečnosti jsem neměl žádné konflikty.

Teď v Gitu se o takové věci nestarám. Pamatujte: zámky v Subversion nejsou ve skutečnosti povinné zámky, jsou to pouze komunikační nástroje. A hádejte co: Nepotřebuju Subversion ke komunikaci, můžu spravovat v pohodě s e-mailem, telefonem a IM.

Další věc, kterou jsem udělal, je nahradit mnoho binárních formátů formáty prostého textu. Používám reStructuredText nebo LaΤΕΧ místo Wordu, CSV namísto Excelu, ASCII-Art místo Visio, YAML namísto databází, SVG namísto OO Draw, abc namísto MIDI a tak dále.

6
Jörg W Mittag

Stojí za to prozkoumat váš aktuální pracovní postup, abyste zjistili, zda je zamykání skutečně nutné. Je to poměrně neobvyklé, když dva lidé nezávisle upravují obraz a trochu komunikace může jít dlouhou cestu.

5
Khoth

O této otázce jsem hovořil v diskusních skupinách git a dospěl jsem k závěru, že v současné době existuje ne dohodnuto na metodě centralizovaného zamykání souborů pro git.

3
Mario

TortoiseGit podporuje plný pracovní postup git pro dokumenty sady Office, které delegují diff na samotný Office. Funguje také delegování na OpenOffice pro formáty OpenDocument.

2
Antonio Bardazzi

A co soubory cad? Pokud nejsou soubory uzamčeny, aby byly uchovávány pouze pro čtení, většina programů cad by je pouze otevřela s libovolnými bity, které by byly viditelné jako nový soubor v libovolném souboru vcs. Takže podle mého názoru je zamykání ideálním prostředkem pro komunikaci s vaším úmyslem změnit nějaký soubor particalur. Rovněž zabraňuje tomu, aby některý software získal přístup pro zápis na prvním místě. To umožňuje aktualizace lokálních souborů bez nutnosti zavřít software nebo alespoň všechny soubory úplně.

1
aproposd

Stačí umístit textový soubor do souboru cc se souborem, který chcete uzamknout, a pak ho zavěšení aktualizace odmítne.

1
Remote Shell

Může být pravda, že reorganizace projektu může pomoci vyhnout se zámkům, ale:

  • Týmy jsou také organizovány podle dalších priorit (umístění, zákazníci, ...)
  • Nástroje jsou také vybírány jinými cíli (kompatibilita, cena, snadnost použití většinou zaměstnanců)
  • Některým nástrojům (a tedy i binárním souborům) se nelze vyhnout, protože prostě neexistuje žádná náhrada, která by mohla vykonávat stejnou práci, která by odpovídala potřebám společnosti za stejnou cenu.

Chcete-li požádat, aby celá společnost reorganizovala svůj pracovní postup a nahradila všechny své nástroje, které produkují binární soubory, jen aby byla schopna pracovat s gitem, kvůli nedostatku zámků, to zní docela neefektivně.

Zámky nezapadají do filosofie git (která nebyla nikdy vytvořena pro binární soubory), ale existují nezanedbatelné situace, kdy zámky jsou nejúčinnějším způsobem, jak takový problém vyřešit.

1
Stefan

Nečekal bych, že by se soubor zamykal, aby to bylo v programu git. O jaký druh binárních souborů se primárně zajímáte? Zajímáte se o zamykání souborů, nebo jen o zabránění konfliktům způsobeným tím, že je nemůžete sloučit.

Zdá se, že si pamatuji někoho, kdo mluví (nebo dokonce implementuje) podporu pro slučování dokumentů OpenOffice v programu git.

1
JesperE

Toto není řešení, ale spíše komentář k tomu, proč jsou potřebné uzamykací mechanismy. Tam jsou některé nástroje používané v některých polích, které používají binární pouze formáty, které jsou vybaleny z mise kritické a "používat lepší/různé nástroje" je prostě není možnost. Neexistují žádné životaschopné alternativní nástroje. Ty, které znám, by skutečně nebyly kandidáty na sloučení, i když jste uložili stejné informace ve formátu ascii. Jedna námitka, kterou jsem slyšel, je, že chcete být schopni pracovat offline. Konkrétním nástrojem, na který myslím, opravdu nefunguje offline, protože potřebuje vytáhnout licence, takže pokud mám data na přenosném počítači, není to tak, jako bych mohl nástroj běžet ve vlaku stejně. Co říká, co git poskytuje, pokud mám pomalé připojení, mohu získat licence a také stáhnout změny, ale mít rychlou místní kopii pro prohlížení různých verzí. To je hezká věc, kterou vám DVCS nabízí iv tomto případě.

Jedním z pohledů je, že git prostě není nástrojem k použití, ale je to hezké pro všechny textové soubory, které jsou také spravovány s ním, a je nepříjemné potřebovat různé nástroje pro správu verzí pro různé soubory. 

Přístup typu poradit-uzamykat-přes-mail opravdu smrdí. Viděl jsem, že jsem byl unavený nekonečným proudem e-mailů z "Edituju to" "Já jsem udělal editaci" a viděl jsem změny, které jsem ztratil. Konkrétním případem, o kterém přemýšlím, byl případ, kdy by kolekce menších souborů ASCII byla mnohem hezčí, ale to je stranou.

1
Dan

Im nenavrhuji použít git v mé společnosti pro stejný problém. Používáme EA pro všechny naše návrhy a Microsoft Word pro dokumentaci, nevíme předem, kdo může konkrétní soubor upravovat, takže exkluzivní zamykání je naší jedinou možností.

0
Hernan Rajchert

git bude fungovat velmi dobře v non-týmovém prostředí, kde je každý vývojář výhradně zodpovědný za kus kódu nebo souboru, protože v tomto případě není potřeba komunikace o zámcích.

Pokud vaše organizace vyžaduje týmové prostředí (obvykle pro vývojáře od zabezpečení práce), pak použijte svn, git není pro vás. Svn poskytuje jak řízení zdroje, tak komunikaci mezi vývojáři o zámcích.

0
alpav

Git neposkytuje žádné příkazy pro zamykání souborů, ale financuji způsob, jak dosáhnout této funkce pomocí háčků git. K ukládání informací o zámku je zapotřebí pomocný server. Můžeme použít háček předběžného potvrzení, abychom zjistili, zda je některý ze spáchaných souborů uzamčen. A pokud někdo uzamkne soubor, program by měl sdělit pomocnému serveru informace o skříňce a uzamčeném souboru.

0
Cherler Ton