Przepływ pracy: Używanie formatów dokumentów binarnych w Git bez blokad (przejście z subversion)

16

Jesteśmy doradcą w zakresie oprogramowania z wieloma projektami dla różnych klientów. Tradycyjnie używamy Subversion, ale obecnie rozważamy przejście na Git.

Znaczna część tworzonych przez nas dokumentów jest udostępniana naszym klientom (wymagania, projekty globalne, specyfikacje testów itp.), A do ich tworzenia używamy MS Office. W Subversion możemy użyć jego funkcji „Blokuj”, aby upewnić się, że nikt nie edytuje tego samego dokumentu w tym samym czasie. W Git nie możesz tego zrobić, ponieważ ze względu na swoją rozproszoną naturę git nie ma blokad.

Zamki to tak naprawdę niewiele więcej niż mechanizm komunikacji, ale są bardzo skuteczne.

Obecnie nasz kod i dokumenty skierowane do klientów zazwyczaj znajdują się w różnych podfolderach innego repozytorium svn. Co robisz, gdy przechodzimy do git? Widzę zestaw opcji:

  1. Przenosimy repozytoria svn do git 1 na 1. Zamiast używać blokad na plikach Office, robimy to, co sugerują git ludzie i próbujemy w jakiś sposób zmienić nasz przepływ pracy, aby to naprawić. Może to działać w gałęzi przy dowolnej edycji dokumentu i scalać ją w trakcie przeglądu. To podejście rozbija np. Arkusze Excela, które zawierają informacje o zarządzaniu projektem; są łatwo edytowane przez członków zespołu (i zachęcamy do tego), ale nie podlegają formalnej procedurze weryfikacji

  2. Używamy git dla kodu i svn dla dokumentów i zarządzania projektami. Ma to tę wadę, że niektóre inne dokumenty projektowe nie będą „w pobliżu” określonego przez nie kodu, co zwiększa szansę, że ludzie zapomną je zaktualizować. Ponadto każdy musi korzystać i rozumieć dwa zestawy narzędzi. To powiedziawszy, być może jest to świetna okazja, aby przejść do tekstowych narzędzi dokumentacyjnych (lateks, markdown, HTML itp.) Dla dokumentów projektowych, które nie są skierowane do klientów.

  3. Np. 1, ale hakujemy git lockpolecenie, które robi dla nas to, co robi dla nas svn lock (odpowiednio przełączamy flagę „tylko do odczytu” i synchronizujemy z serwerem za pomocą niektórych środków).

Nie kupuję argumentu, że blokady nie działają w DVCS, ponieważ system powinien nawet działać, gdy jesteś całkowicie offline. Blokady Svn również mogą zostać zastąpione; są mechanizmem komunikacji . Bez pewnego połączenia sieciowego komputer nie będzie się dużo komunikował.

Nie możemy być jedynym sklepem, który jest bardzo zadowolony z tego, jak svn lockpasuje do naszego przepływu pracy, prawda?

Wszelkie pomysły lub wskazówki?

Znalazłem /programming/119444/locking-binary-files-using-git-version-control-system, ale dyskusja jest raczej techniczna; Szukam sposobów rozwiązania lub uniknięcia praktycznego problemu dwóch członków zespołu edytujących ten sam plik binarny w tym samym czasie.

skrebbel
źródło
Czy możesz wyjaśnić, w jaki sposób „udostępniasz” swoje dokumenty klientom? Mam nadzieję, że mają dostęp tylko do odczytu, a zespół zarządza zmianami w wyniku żądań zmian od nich. Czy to jest poprawne?
vaughandroid
2
Do obsługi dokumentów binarnych możesz użyć narzędzia do zarządzania zasobami (z funkcją blokowania) zamiast VCS. Pracowałem w miejscu, w którym sprawdzono 2 GB och obrazów w SVN, co sprawiło, że wszystko inne było super wolne. Po przeniesieniu tego wszystkiego do folderu z kopiami zapasowymi rzeczy stały się szybkie i łatwiejsze w obsłudze.
Spoike
1
@Baqueta E-mailem lub na papierze. Chodzi o to, że „Używaj tylko tekstu do dokumentów!” nie jest tutaj rozsądnym podejściem, ponieważ wysiłek włożony w stworzenie przyzwoitego wyglądu jest znacznie większy niż w narzędziach takich jak MS Word.
skrebbel
@Spoike, brzmi dla mnie jak ważna odpowiedź :-) W każdym razie jakieś zalecenia?
skrebbel
@skrebbel Jedno słowo, LaTeX.
Kyrias

Odpowiedzi:

5

Radzę pozostać przy SVN dla dokumentów MS Office z dwóch powodów:

  1. Jest już dostępny i jest (moim zdaniem) lepszy do przechowywania dokumentów Office (patrz tutaj ). Ma do tego znacznie więcej narzędzi innych firm.
  2. Blokada, choć można ją uzyskać w Git, nie jest „sposobem Gita na robienie rzeczy”. Jeśli potrzebujesz tych funkcji, trzymaj się narzędzia, które daje najlepsze rozwiązanie.

Jest takie powiedzenie, które mi się podoba, mówi coś takiego: „Gdy trzymasz młot, wszystko wygląda jak gwóźdź”. To, że przechodzisz do Git, aby przechowywać kod, nie oznacza, że ​​powinieneś go używać do przechowywania dokumentów.

Yoel Gluschnaider
źródło
Co jeśli kod i dokumenty znajdują się w tym samym repozytorium SVN?
Jimmy T.
2

Kontrola wersji kodu nie jest najlepszym narzędziem do pracy na plikach Office, ponieważ są one binarne, a narzędzia te działają na poziomie modyfikacji plików.

Użyj narzędzia do współpracy, takiego jak MediaWiki (bezpłatny) lub Atlassian Confluence (płatny), z którego możesz łatwo wyodrębnić dokument Word. Lub użyj LaTex do wygenerowania plików Office.

Pozwól mi rozwinąć ...

Jeśli musisz współpracować, musisz przyjąć model, który wyróżnia modyfikacje (np. Zmienił słowo, przeformułował lub po prostu zmienił czcionkę) na jednostkę, np. Plik.

SVN i Git, nawet jeśli myślą o kodzie, są narzędziami niskiego poziomu, które porównują swoje pliki według zawartości tekstowej. Problem polega jednak na tym, że mogą pracować tylko na plikach tekstowych, ponieważ nie dbają o naturę / zawartość pliku, aby wyodrębnić model modyfikacji wysokiego poziomu.

Jasnym przykładem jest plik obrazu . Chociaż TortoiseMerge jest narzędziem, które pomaga użytkownikom SVN poprzez porównywanie obrazów z ich rzeczywistymi modyfikacjami, normalne VCSes uruchamiane przez łatki zawartości nad plikami. Pozwól mi wyjaśnić. Narzędzie takie jak TortoiseMerge może powiedzieć, że nowa wersja pliku obrazu jest zmieniana tylko o kilka pikseli lub luminancji, jeśli implementuje bardziej złożoną analizę HSV dwóch plików. Możesz dodać znak wodny lub zmienić poziomy kolorów, narzędzie, które porównuje pliki obrazów , podkreśli różnice, jeśli zastosuje dobry algorytm porównywania. Ale aby sprawdzić nowy plik w kliencie musiprodukować deltę. Delta to zestaw linii, które są usuwane i linii, które są dodawane do pliku. Pliki binarne nie ma podziałów wierszy, jeśli nie zdarzy się mieć \r\n, lub podobny, ich ładowności, a także w przypadku zmiany delta pojedynczy znak wymieniasz całą linię.

Oto problem. Pliki binarne nie nadają się do kontroli wersji, ponieważ możesz prawie zastąpić cały plik dla każdej wersji. Zastanów się, kiedy piszesz pliki Office za pomocą MS Office, a Twój współpracownik edytuje za pomocą OpenOffice. Jeśli implementują nawet nieco inną wersję algorytmu kompresji plików OpenXML, skończysz na zupełnie innych plikach, nawet jeśli zmienisz pojedynczy przecinek w dokumencie.

Oprogramowanie do współpracy renderuje dokumenty wewnętrznie w formacie tekstowym, ponieważ tekst jest naprawdę istotny dla Twojej firmy i może obliczać różnice lub radzić sobie z konfliktami. LaTex lub Markdown, jeśli chcesz, to sposób na przechowywanie dokumentu jako pliku tekstowego z zaawansowanym znacznikiem, więc nie tak jak klasyczny plik TXT, który nie ma kontroli nad czcionkami / formatowaniem.

Ale oczywiście Twoi klienci nie lubią otwierać plików Markdown, prawda? Ok, możesz po prostu, i naprawdę mam na myśli, po prostu użyć dowolnego oprogramowania, którego obecnie jestem zbyt leniwy, aby google, aby przekonwertować dokument źródłowy na PDF, Word lub cokolwiek innego.

Zreasumowanie

Jeśli zaczniesz sprawdzać pliki tekstowe pod kontrolą źródła, masz większą kontrolę nad historią plików i możesz łatwo zarządzać konfliktami, szczególnie bez użycia blokad VCS.

Przed oficjalnym udostępnieniem dokumentu potrzebujesz procedury eksportowania źródłowego dokumentu tekstowego do pliku pakietu Office

Rozdzielenie dwóch kroków sprawia, że ​​ludzie są szczęśliwi kosztem krzywej uczenia się.

usr-local-ΕΨΗΕΛΩΝ
źródło
Pliki tekstowe Linuksa i Maca również nie mają linii zgodnie z twoją definicją :-) równie łatwo można tworzyć delty dla plików binarnych. Ty decydujesz o innym algorytmie. Na przykład SVN tworzy ładne, małe delty w porządku dla plików binarnych (przynajmniej z dużymi plikami .dll, z którymi mam najwięcej doświadczenia)
gbjbaanb
Tak, oczywiście, że inne niż Windows mają różne terminatory linii. W każdym razie, nawet jeśli uda ci się stworzyć mniejszą deltę (muszę przeformułować trochę odpowiedzi), czy czyni to różnice czytelnymi dla człowieka? Oczywiście nie. Nie powiesz, które klasy zostały zmodyfikowane między bibliotekami DLL. I znowu problem polega na tym, że dwa kompilatory mogą (powiedziałem, że mogą ) tworzyć zupełnie inne pliki, zmieniając kolejność klas tak, jak im się podoba. To był punkt odpowiedzi
usr-local-ΕΨΗΕΛΩΝ
-1

Możesz użyć git do tych dokumentów bez dodawania blokady. Wybierz przepływ pracy git, który blokuje wypychanie do gałęzi master, jeśli nie jest to master. (Istnieje kilka przepływów pracy do wyboru.) Zapobiegnie to wzajemnemu nadpisywaniu przez siebie modyfikacji plików dokumentów binarnych. Załóżmy, że dwie osoby modyfikują ten sam dokument binarny. Pierwszy, który wypycha go do master, wprowadza zmiany. Drugi zostanie zablokowany, ponieważ ich kopia znajduje się za gałęzią master. Najpierw muszą się zsynchronizować. Druga osoba synchronizuje się. Pokaże konflikt scalania dokumentu binarnego. Ta osoba gdzieś zapisuje swoją wersję i rozwiązuje konflikt, pobierając wersję z mastera (która została wypchnięta przez pierwszą osobę). W tym momencie pliki drugiej osoby są aktualne w oddziale głównym. Łączą zmiany w najnowszym dokumencie binarnym (ręcznie), który następnie będzie zawierał zarówno zmiany pierwszej osoby, jak i drugiej osoby. Następnie nowa wersja jest przekazywana do master i staje się nową gałęzią master. Łączenie się jest bólem, ale dzieje się to tylko w przypadku konfliktu. Ponadto zmiany nie gubią się ani nie są nadpisywane. Konflikty są wykrywane, a użytkownicy mogą je rozwiązać w czysty sposób.

Nani Tatiana Isobel
źródło
4
Właśnie temu łączącemu się bólowi zapobiegają zamki.
oefe
Istnieją narzędzia do scalania, które mogą łączyć dokumenty Word. Nie mam jednak z nimi żadnego doświadczenia, więc jak dobrze są, nie mam pojęcia?
Pete,
Dziękuję za odpowiedź. Widzę, że jest to sposób działania Gita. @Pete, sam program Word może zrobić całkiem niezłą różnicę, nie będąc pewnym połączenia. Ale wciąż jest to ból, którego łatwiej uniknąć dzięki zamkom. Rzadko edytujemy dokumenty pakietu Office jednocześnie; większość naszej pracy (w tym szczegółowe dokumenty) znajduje się w kodzie. To pytanie jest o 2% przypadków, w których 2 osoby zrobienia edytować ten sam dokument w tym samym czasie. Biorąc pod uwagę, że jest to 2%, a nie 30%, rozwiązanie scalające wydaje się nieoptymalne.
skrebbel
-2

Połącz pierwsze 2 rozwiązania, a nie potrzebujesz trzeciego.

Jeśli zapiszesz arkusze kalkulacyjne na dysku jako pliki CSV, program Excel nadal je edytuje, a następnie git z przyjemnością je scali.

Podobnie możesz otwierać, edytować i zapisywać pliki w programie Word, jeśli są one w formacie HTML lub (niech Bóg nam pomoże) RTF. Słowo oczywiście doda więcej wzdęć niż przydatnego tekstu, ale nadal jest to tylko tekst, który git chętnie się z tobą połączy.

To prawda, że ​​te rozwiązania zakładają, że nie korzystasz lub możesz odejść od funkcji specyficznych dla MS, co jest naprawdę tylko problemem po stronie Excela.

O ile oczywiście nie musisz instalować programu Word w systemie, aby móc czytać dokumentację, co samo w sobie jest przerażającą perspektywą ...

Steven
źródło
1
Naprawdę? Czy sugerujesz powrót do epoki kamienia, aby uniknąć konfliktów scalania?
Petter Nordlander
Nie jestem pewien, czy rozumiem, co dokładnie czujesz w epoce kamienia łupanego w przechowywaniu w formacie tekstowym w porównaniu z formatem binarnym ...
Steven