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ć textconv
opcję 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 -v
on 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/config
pliku repozytorium lub osobistym ~/.gitconfig
pliku globalnym , na przykład polecenie hex diff, używając hexdump
:
[diff "hex"]
textconv = hexdump -v -C
binary = true
Następnie musisz użyć .gitattributes
pliku 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 .gitignore
pliku, .gitattributes
plik 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.
.gitattributes
globalnie (aby uzupełnić [diff]
wpisy w swoim globalnym .gitconfig
). Jeśli .gitattributes
utworzysz plik lokalny dla repozytorium, użytkownik będzie musiał zmodyfikować .gitconfig
ustawienia 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 .gitconfig
pod[core]
dodatku attributesfile = c:/users/<username>/.gitattributes
lub 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.