Jak lepiej kontrolować wersje dokumentów w plikach Excel i plikach schematów SQL

99

Jestem odpowiedzialny za kilka plików Excela i plików schematów SQL. Jak lepiej kontrolować wersję dokumentów w tych plikach?

Muszę znać zmodyfikowaną część (inną część) w tych plikach i zachować wszystkie wersje w celach informacyjnych. Obecnie dodaję znacznik czasu do nazwy pliku, ale okazało się, że jest to nieefektywne.

Czy istnieje sposób lub dobra praktyka na lepszą kontrolę wersji dokumentów?

Nawiasem mówiąc, redaktorzy wysyłają mi pliki pocztą elektroniczną.

Marcus Thornton
źródło
5
Mogę przekonwertować te pliki Excela na pliki CSV, a następnie śledzić je za pomocą git, aby móc użyć diff, aby zobaczyć modyfikację. Czy jest jakaś inna dobra praktyka?
Marcus Thornton
Zobacz inne odpowiedzi, które moim zdaniem są lepsze niż ta, którą zaakceptowałeś.
nealmcb

Odpowiedzi:

45

Ponieważ oznaczyłeś swoje pytanie tagiem Zakładam, że pytasz o użycie w tym celu Gita.

Cóż, zrzuty SQL to zwykłe pliki tekstowe, więc śledzenie ich za pomocą Gita ma sens. Po prostu utwórz repozytorium i przechowuj je w nim. Kiedy otrzymasz nową wersję pliku, po prostu nadpisz go i zatwierdź, a Git wykona wszystko za Ciebie, a Ty będziesz mógł zobaczyć daty modyfikacji, pobrać określone wersje tego pliku i porównać różne wersje.

To samo dotyczy sytuacji, .xlsxgdy je zdekompresujesz. .xlsxpliki są spakowanymi katalogami plików XML (zobacz Jak poprawnie złożyć poprawny plik xlsx z jego wewnętrznych podkomponentów? ). Git będzie traktował je jako pliki binarne, chyba że zostaną zdekompresowane. Możliwe jest rozpakowanie .xlsxi śledzenie zmian w poszczególnych plikach XML w archiwum.

Możesz to również zrobić z .xlsplikami, ale problem polega na tym, że .xlsformat jest binarny, więc nie możesz uzyskać z niego znaczących różnic. Ale nadal będziesz mógł zobaczyć historię modyfikacji i sprawdzić konkretne wersje.

kirelagin
źródło
4
Tak, wiem dupku. Myślę, że git jest dobry podczas śledzenia schematów SQL. Jeśli chodzi o pliki Excela (.xlsx i .xls), ponieważ są to pliki binarne, śledzenie ich za pomocą git nie może pokazać mi, co zostało zmodyfikowane z ludzkiego punktu widzenia. To jest właśnie to, co mylę.
Marcus Thornton
2
@MarcusThornton .xlsxto XML, więc powinno działać dobrze. Ogólnie rzecz biorąc, nie ma możliwości łatwego porównania dwóch .xlsplików. Prawdopodobnie mógłbyś dodać hak przed zatwierdzeniem, który umieści .csvobok niego i będziesz w stanie je odróżnić.
kirelagin
86

Odpowiedź, którą tutaj napisałem , można zastosować w tym przypadku. Narzędzie o nazwie xls2txt może zapewnić czytelne dla człowieka dane wyjściowe z plików .xls. Krótko mówiąc, powinieneś umieścić to w swoim pliku .gitattributes:

*.xls diff=xls

A w .git / config:

[diff "xls"]
    binary = true
    textconv = /path/to/xls2txt

Oczywiście, jestem pewien, że można znaleźć podobne narzędzia również do innych typów plików, co git diffjest bardzo przydatnym narzędziem do dokumentów biurowych. Oto, co mam obecnie w moim globalnym .gitconfig:

[diff "xls"]
    binary = true
    textconv = /usr/bin/py_xls2txt
[diff "pdf"]
    binary = true
    textconv = /usr/bin/pdf2txt
[diff "doc"]
    binary = true
    textconv = /usr/bin/catdoc
[diff "docx"]
    binary = true
    textconv = /usr/bin/docx2txt

Książka Pro Git zawiera dobry rozdział na ten temat: 8.2 Dostosowywanie Git - Atrybuty Git

1615903
źródło
2
to nie działa dla mnie na windows7. Pobrałem wersję catdoc dla systemu Windows stąd: blog.brush.co.nz/2009/09/catdoc-windows, a następnie edytuj gitconfig i atrybuty zgodnie z powyższym opisem. ale nadal otrzymuję: diff --git a / src / Reports / src / main / etc / templates / nbcu.xls b / src / Reports / src / main / etc / templates / nbcu.xls index 2476319..1daec86 100644 Binary pliki a / src /.../ test.xls i b / src /.../ test.xls różnią się wersją GIT: 1.7.6.msysgit.1
katrin
Czy nadal przechowuje dokument jako plik doc czy jako plik tekstowy? Jeśli jest to plik tekstowy, jak odzyskać dokument?
CMCDragonkai
@CMCDragonkai Nie ma to wpływu na sposób przechowywania pliku, wpływa tylko na wyjście polecenia diff.
1615903
1
Więc nadal przechowuje cały plik, a nie różnice?
CMCDragonkai
3
Odp .: xls2txt: bardzo niechętnie instaluję narzędzie o zamkniętym kodzie źródłowym z polskiej strony internetowej. To może być to samo? github.com/hroptatyr/xls2txt No README chociaż ...
jcollum
22

Od kilku dni zmagam się z tym problemem i napisałem małe narzędzie .NET do wyodrębniania i normalizowania plików Excela w taki sposób, że są one znacznie łatwiejsze do przechowywania w kontroli źródła. Tutaj opublikowałem plik wykonywalny:

https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe

.. a źródło tutaj:

https://bitbucket.org/htilabs/ooxmlunpack

Jeśli jest jakieś zainteresowanie, z przyjemnością uczynię to bardziej konfigurowalnym, ale w tej chwili powinieneś umieścić plik wykonywalny w folderze (np. W katalogu głównym repozytorium źródłowego), a kiedy go uruchomisz, będzie:

  • Przeskanuj folder i jego podfoldery w poszukiwaniu plików .xlsx i .xlsm
  • Zrób kopię pliku jako * .orig.
  • Rozpakuj każdy plik i ponownie spakuj go bez kompresji.
  • Wydrukuj wszystkie pliki w archiwum, które są poprawnym XML.
  • Usuń plik calcchain.xml z archiwum (ponieważ bardzo się zmienia i nie wpływa na zawartość pliku).
  • Umieszczaj w linii wszelkie niesformatowane wartości tekstowe (w przeciwnym razie są one przechowywane w tabeli przeglądowej, co powoduje duże zmiany w wewnętrznym pliku XML, jeśli nawet jedna komórka zostanie zmodyfikowana).
  • Usuń wartości z komórek zawierających formuły (ponieważ można je obliczyć po następnym otwarciu arkusza).
  • Utwórz podfolder * .extracted, zawierający wyodrębnioną zawartość archiwum zip.

Oczywiście nie wszystkie te rzeczy są konieczne, ale efektem końcowym jest plik arkusza kalkulacyjnego, który nadal będzie otwierany w programie Excel, ale który jest znacznie bardziej podatny na różnicowanie i kompresję przyrostową. Przechowywanie również wyodrębnionych plików sprawia, że ​​w historii wersji znacznie bardziej oczywiste jest, jakie zmiany zostały zastosowane w każdej wersji.

Jeśli jest jakiś apetyt, cieszę się, że mogę uczynić narzędzie bardziej konfigurowalnym, ponieważ myślę, że nie każdy będzie chciał wyodrębnić zawartość lub być może wartości usunięte z komórek formuł, ale obie te opcje są dla mnie bardzo przydatne w tej chwili.

W testach arkusz kalkulacyjny o wielkości 2 MB `` rozpakowuje się '' do 21 MB, ale potem byłem w stanie zapisać pięć wersji z małymi zmianami między nimi, w pliku danych Mercurial o wielkości 1,9 MB i wizualizować różnice między wersjami skutecznie przy użyciu Beyond Compare w tryb tekstowy.

NB: chociaż używam Mercurial, przeczytałem to pytanie podczas badania mojego rozwiązania i nie ma nic specyficznego dla Mercurial w tym rozwiązaniu, powinno działać dobrze dla Git lub innego VCS.

Jon G
źródło
Właściwie nie próbowałem, ale zakładam, że tak - jeśli spróbujesz, byłoby wspaniale wiedzieć
Jon G
@JonG Nie mogę zmusić go do pracy z LibreOffice, aw repozytorium bitbucket nie ma karty Problemy. Chciałbym wnieść swój wkład, gdybyśmy mogli rozwiązać problem!
Christian Droulers,
Cześć @ christian-droulers, włączyłem problem w repozytorium, możesz tam coś dodać!
Jon G
@JonG Wygląda to świetnie, posiadanie możliwej do porównania historii wersji może być naprawdę przydatne w wielu scenariuszach związanych z dokumentami! Ale dlaczego ważne jest, aby plik otwierał się w programie Excel? Nie możesz po prostu użyć pliku .orig? Czy myślisz, że normalizacje mogą być konfigurowalne / dynamiczne, aby kod mógł być również używany dla docx / pptx?
Jørgen Tvedt
10

Tante polecił bardzo proste podejście do zarządzania formatami plików opartymi na ZIP w Git :

Otwórz plik ~ / .gitconfig (utwórz, jeśli jeszcze nie istnieje) i dodaj następującą sekcję:

[diff "zip"]
textconv = unzip -c -a
Roberto Cabellon
źródło
3
następnie Peng Xu rozszerzył rozwiązanie, pozwalając na wersjonowanie plików opartych na zip za pomocą filtra, oprócz przeglądania tylko zmian różnic: tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
Roberto Cabellon
4

Użyj rozszerzenia otwartego dokumentu .fods. Jest to zwykły, nieskompresowany format znaczników XML, który można otwierać zarówno w programie Excel, jak i LibreOffice, a różnice będą dobrze wyglądać.

thouliha
źródło
2

Stworzyliśmy rozszerzenie wiersza poleceń Git o otwartym kodzie źródłowym dla skoroszytów programu Excel: https://www.xltrail.com/git-xltrail .

Krótko mówiąc, główną funkcją jest to, że git diffdziała on na dowolnych formatach plików skoroszytów, dzięki czemu pokazuje różnice w zawartości VBA skoroszytu (w pewnym momencie wykonamy to również dla zawartości arkuszy).

To wciąż wczesne dni, ale może to pomóc.

Bjoern Stiel
źródło
a ponad dwa lata później nadal obsługuje tylko VBA, podczas gdy wiele innych rozwiązań obsługuje cały arkusz kalkulacyjny. Tak naprawdę nie przejmowałem się zawartością VBA w arkuszu kalkulacyjnym od ponad dziesięciu lat (a właściwie, aktywnie starałem się unikać ...).
Auspex
1

Jak wspomniano w komentarzu innej odpowiedzi, pliki .xlsx to po prostu XML.

Aby dostać się do katalogu XML (który jest git-able), musisz "rozpakować" plik .xlsx do katalogu. Szybkim sposobem na zobaczenie tego w systemie Windows jest zmiana nazwy pliku <nazwa pliku> .xlsx na <nazwa pliku> .zip, a zobaczysz zawartość wewnętrzną. Przechowałbym to razem z plikiem binarnym, aby przy kasie nie trzeba było wykonywać innych czynności, aby otworzyć dokument w programie Excel.

g19fanatic
źródło
1
Przynajmniej narzędzie zip, którego używam (7-zip), umożliwia otwieranie / rozpakowywanie wszystkich plików - nie musisz zmieniać ich nazw.
Onur
1

To narzędzie Excel działa bardzo dobrze dla mnie:

Kontrola wersji dla programu Excel

Jest to dość proste narzędzie do wersjonowania skoroszytów i makr VBA. Po zatwierdzeniu wersji jest ona zapisywana w repozytorium Git na komputerze. Nigdy nie próbowałem tego ponownie. Pliki schematów SQL, ale jestem pewien, że jest na to sposób.

eriklind
źródło
To jedyne narzędzie, które znalazłem, które działa z modułami osadzonymi w plikach .xlsm. Jedyną alternatywą, jaką znam, jest uruchomienie makra w celu wyeksportowania każdego modułu do własnego pliku, zatwierdzenie ich, a następnie uruchomienie makra, aby zaimportować je ponownie po ściągnięciu i scaleniu. xltrailjest dużo łatwiejsze niż to.
Michael Hoffmann
0

Moje podejście do plików Excela jest podobne do Jona, ale zamiast pracować z surowymi danymi tekstowymi Excela, eksportuję do bardziej przyjaznych formatów.

Oto narzędzie, którego używam: https://github.com/stenci/ExcelToGit/tree/master

Wystarczy pobrać plik .xlsm (kliknij łącze Wyświetl Raw na tej stronie ). Nie zapomnij sprawdzić ustawienia programu Excel zgodnie z opisem w pliku Readme. Możesz także dodać kod, aby wyeksportować dane SQL do plików tekstowych.

Skoroszyt jest zarówno konwerterem z binarnego Excela do plików tekstowych, jak i programem uruchamiającym narzędzia Windows Git i może być używany także z projektami nie związanymi z Excelem.

Moja wersja robocza jest skonfigurowana z dziesiątkami skoroszytów programu Excel. Używam tego pliku również do otwierania Git-gui dla projektów innych niż Excel, po prostu ręcznie dodając folder git.

stenci
źródło