Untuk membuat file biner berbeda di git, saya berasumsi saya harus menyiapkan difftool.
Apa yang bekerja dengan difftools? Bagaimana Anda memasukkan parameter?
Untuk membuat file biner berbeda di git, saya berasumsi saya harus menyiapkan difftool.
Apa yang bekerja dengan difftools? Bagaimana Anda memasukkan parameter?
Jawaban:
Anda dapat mengatur textconv
opsi konfigurasi untuk tipe file. Lihat "Melakukan perbedaan teks dari file biner" di gitattributes (5) . Apa yang harus Anda gunakan tergantung pada jenis file.
Contoh 1 :
Katakanlah Anda ingin membedakan konten file zip. Dalam hal ini Anda harus meletakkan yang berikut dalam $ GIT_DIR / file config atau $ HOME / .gitconfig.
[diff "zip"]
textconv = unzip -v
Lain kali Anda meminta diff pada file zip dalam repo, itu akan memanggil unzip -v
versi dan diff teks yang dihasilkan.
Contoh 2 :
Untuk file pdf Anda dapat menggunakan mis pdfinfo
;
[diff "pdf"]
textconv = pdfinfo
Contoh 3 :
Jika tidak ada utilitas informasi spesifik untuk tipe file, Anda dapat menggunakan misalnya hexdump
(dilengkapi dengan FreeBSD dan OSX, juga tersedia di Linux):
[diff "bin"]
textconv = hexdump -v -C
Jawaban dari Roland Smith sangat membantu tetapi saat ini tidak lengkap (lihat komentar) - ada dua bagian untuk ini.
Anda dapat mendefinisikan perintah diff baru di .git/config
file repositori atau ~/.gitconfig
file global pribadi Anda , misalnya perintah hex diff menggunakan hexdump
:
[diff "hex"]
textconv = hexdump -v -C
binary = true
Selanjutnya, Anda perlu menggunakan file repositori .gitattributes
untuk memberi tahu git file mana yang harus digunakan dengan perintah diff khusus ini:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
Seperti halnya .gitignore
file, .gitattributes
file tersebut harus diperiksa ke dalam repositori Anda.
Dalam kasus saya, saya memiliki beberapa ekstensi file yang berbeda yang ingin saya perlakukan sebagai biner (mis. Hindari konversi akhir baris jika menggunakan git pada Windows), dan lihat juga perbedaannya melalui hexdump
:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
Lihat juga https://github.com/resin-io/etcher/pull/1367 untuk contoh lain mendefinisikan perintah hexdump diff untuk digunakan dengan file gambar.
.gitattributes
global juga (untuk mengikuti [diff]
entri di global Anda .gitconfig
). Jika Anda membuat .gitattributes
lokal ke repo, maka pengguna harus mengubah .gitconfig
pengaturan repo lokalnya karena alasan keamanan mereka tidak akan didorong ke remote. Bagaimanapun, setiap pengguna harus memperbarui file / konfigurasi lokal mereka untuk mengaktifkan perilaku ini. Di .gitconfig
bawah [core]
tambahkan attributesfile = c:/users/<username>/.gitattributes
atau di mana pun Anda ingin menyimpannya jika Anda membuatnya global (perhatikan forwardslashes, bahkan di windows).
Di atas adalah cara komprehensif untuk melakukannya .. namun, jika Anda hanya perlu melakukannya untuk beberapa file, metode berikut adalah apa yang saya gunakan:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Di sini saya menggunakan vimdiff
tetapi Anda dapat menggunakan alat lain. Di atas dapat juga digabungkan menjadi skrip kecil jika Anda perlu melakukan ini berulang-ulang.