Aby różnicować pliki binarne w git, zakładam, że muszę skonfigurować difftool.
Jakie dyftoole działają? Jak umieszczasz parametry?
Aby różnicować pliki binarne w git, zakładam, że muszę skonfigurować difftool.
Jakie dyftoole działają? Jak umieszczasz parametry?
Odpowiedzi:
Możesz ustawić textconvopcję konfiguracji dla typu pliku. Zobacz „Wykonywanie różnic tekstowych plików binarnych” w gitattributes (5) . To, czego powinieneś użyć, zależy od rodzaju pliku.
Przykład 1 :
Powiedz, że chcesz różnicować zawartość plików zip. W takim przypadku należy umieścić następujące elementy w pliku $ GIT_DIR / config lub $ HOME / .gitconfig.
[diff "zip"]
textconv = unzip -v
Następnym razem, gdy poprosisz o plik różnic w pliku zip w repozytorium, wywoła unzip -von obie wersje i różnicuje wynikowy tekst.
Przykład 2 :
W przypadku plików PDF można użyć np pdfinfo;
[diff "pdf"]
textconv = pdfinfo
Przykład 3 :
Jeśli nie ma określonego narzędzia informacyjnego dla typu pliku, możesz np. Użyć hexdump(dostarczany z FreeBSD i OSX, dostępny również w systemie Linux):
[diff "bin"]
textconv = hexdump -v -C
Odpowiedź Rolanda Smitha była pomocna, ale obecnie jest niekompletna (patrz komentarze) - są na to dwie części.
Możesz zdefiniować nowe polecenia diff w .git/configpliku repozytorium lub osobistym ~/.gitconfigpliku globalnym , na przykład polecenie hex diff, używając hexdump:
[diff "hex"]
textconv = hexdump -v -C
binary = true
Następnie musisz użyć .gitattributespliku repozytorium, aby powiedzieć git, które pliki powinny zostać użyte w tym specjalnym poleceniu diff:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
Podobnie jak w przypadku .gitignorepliku, .gitattributesplik powinien być sprawdzany w swoim repozytorium.
W moim przypadku mam kilka różnych rozszerzeń plików, które chcę traktować jako pliki binarne (np. Unikaj konwersji kończących linię, jeśli używasz git w systemie Windows), a także widzę różnice poprzez hexdump:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
Zobacz także https://github.com/resin-io/etcher/pull/1367, gdzie znajduje się inny przykład definiujący polecenie difdump diff do użytku z plikami obrazów.
.gitattributesglobalnie (aby uzupełnić [diff]wpisy w swoim globalnym .gitconfig). Jeśli .gitattributesutworzysz plik lokalny dla repozytorium, użytkownik będzie musiał zmodyfikować .gitconfigustawienia lokalnego repozytorium, ponieważ ze względów bezpieczeństwa nie zostaną one przekazane do pilota. Tak czy inaczej, każdy użytkownik musi jakoś zaktualizować swoje lokalne pliki / konfigurację, aby włączyć to zachowanie. W .gitconfigpod[core] dodatku attributesfile = c:/users/<username>/.gitattributeslub gdziekolwiek chcesz zapisać go, jeśli sprawiają, że globalny (zwróć uwagę na forwardslashes, nawet w oknach).
Powyższe są wszechstronnymi sposobami, aby to zrobić .. jeśli jednak musisz to zrobić tylko dla kilku plików, używam następującej metody:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Tutaj używam vimdiff ale możesz użyć dowolnego innego narzędzia. Powyższe można również połączyć w mały skrypt, jeśli musisz to robić w kółko.