Utas ini menyebutkan:
Jika Anda tidak ingat pohon kosong sha1, Anda selalu dapat memperolehnya dengan:
git hash-object -t tree /dev/null
Atau, seperti yang diusulkan Ciro Santilli di komentar :
printf '' | git hash-object --stdin -t tree
Atau, seperti yang terlihat di sini , dari Colin Schimmelfing :
git hash-object -t tree --stdin < /dev/null
Jadi saya kira lebih aman untuk mendefinisikan variabel dengan hasil perintah itu sebagai pohon sha1 kosong Anda (daripada mengandalkan "nilai terkenal").
Catatan: Git 2.25.1 (Feb. 2020) mengusulkan dalam commit 9c8a294 :
empty_tree=$(git mktree </dev/null)
# Windows:
git mktree <NUL
Dan menambahkan:
Sebagai catatan sejarah, fungsi yang sekarang dikenal sebagai repo_read_object_file()
yang diajarkan pohon kosong di 346245a1bb ("kode-keras objek pohon kosong", 2008-02-13, Git v1.5.5-rc0 - merge ), dan fungsi yang sekarang dikenal seperti oid_object_info()
yang diajarkan pohon kosong di c4d9986f5f (" sha1_object_info
: memeriksa cached_object
penyimpanan juga", 2011-02-07, Git v1.7.4.1).
Perhatikan, Anda akan melihat bahwa SHA1 muncul di beberapa repo GitHub saat penulis ingin komit pertamanya dikosongkan (lihat entri blog " Bagaimana saya menginisialisasi repositori Git saya "):
$ GIT_AUTHOR_DATE="Thu, 01 Jan 1970 00:00:00 +0000" GIT_COMMITTER_DATE="Thu, 01 Jan 1970 00:00:00 +0000" git commit --allow-empty -m 'Initial commit'
Akan memberimu:
![Pohon kosong SHA1](https://i.stack.imgur.com/nk8fB.png)
(Lihat pohon SHA1?)
Anda bahkan dapat mendasarkan kembali riwayat yang ada di atas komit kosong itu (lihat " git: bagaimana cara memasukkan komit sebagai yang pertama, menggeser semua yang lain? ")
Dalam kedua kasus tersebut, Anda tidak bergantung pada nilai SHA1 yang tepat dari pohon kosong tersebut.
Anda cukup mengikuti praktik terbaik, menginisialisasi repo Anda dengan komit kosong pertama .
Untuk melakukannya:
git init my_new_repo
cd my_new_repo
git config user.name username
git config user.email email@com
git commit --allow-empty -m "initial empty commit"
Itu akan menghasilkan komit dengan SHA1 khusus untuk repo Anda, nama pengguna, email, tanggal pembuatan (artinya SHA1 dari komit itu sendiri akan berbeda setiap saat).
Tapi pohon yang direferensikan oleh komit itu adalah 4b825dc642cb6eb9a060e54bf8d69288fbee4904
, pohon kosong SHA1.
git log --pretty=raw
commit 9ed4ff9ac204f20f826ddacc3f85ef7186d6cc14
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 <====
author VonC <vonc@laposte.net> 1381232247 +0200
committer VonC <vonc@laposte.net> 1381232247 +0200
initial empty commit
Untuk memperlihatkan hanya pohon komit (tampilkan pohon komit SHA1):
git show --pretty=format:%T 9ed4ff9ac204f20f826ddacc3f85ef7186d6cc14
4b825dc642cb6eb9a060e54bf8d69288fbee4904
Jika komit itu, merujuk pada pohon kosong, memang merupakan komit pertama Anda, Anda dapat menunjukkan SHA1 pohon kosong itu dengan:
git log --pretty=format:%h --reverse | head -1 | xargs git show --pretty=format:%T
4b825dc642cb6eb9a060e54bf8d69288fbee4904
(dan itu bahkan berfungsi di Windows, dengan perintah Gnu On Windows )
Seperti yang dikomentari di bawah ini , menggunakan git diff <commit> HEAD
, ini akan menampilkan semua file Anda di cabang HEAD saat ini:
git diff --name-only 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD
Catatan: nilai pohon kosong secara resmi didefinisikan di cache.h
.
#define EMPTY_TREE_SHA1_HEX \
"4b825dc642cb6eb9a060e54bf8d69288fbee4904"
Sejak Git 2.16 (Q1 2018), ini digunakan dalam struktur yang tidak lagi terikat dengan (hanya) SHA1, seperti yang terlihat di commit eb0ccfd :
Ganti pencarian pohon dan blob kosong untuk menggunakan abstraksi hash
Ganti penggunaan empty_tree_oid
dan empty_blob_oid
untuk menggunakan current_hash
abstraksi yang mewakili algoritme hash saat ini yang digunakan.
Lihat selengkapnya di " Mengapa Git tidak menggunakan SHA yang lebih modern? ": Ini adalah SHA-2 , sejak Git 2.19 (Q3 2018)
Dengan Git 2.25 (Q1 2020), pengujian sedang mempersiapkan transisi SHA-2 , dan melibatkan pohon kosong.
Lihat komit fa26d5e , komit cf02be8 , komit 38ee26b , komit 37ab8eb , komit 0370b35 , komit 0253e12 , komit 45e2ef2 , komit 79b0edc , komit 840624f , komit 32a6707 , komit 440bf91 , komit 0b408ca , komit 2eabd38 (28 Oktober 2019), dan komit 1bcef51 , komit ecde49b (05 Okt 2019) oleh brian m. carlson ( bk2204
) .
(Digabung oleh Junio C Hamano - gitster
- di commit 28014c1, 10 Nov 2019)
t/oid-info
: tambahkan pohon kosong dan nilai blob kosong
Ditandatangani oleh: brian m. carlson
Testsuite pada akhirnya akan mempelajari cara menjalankan menggunakan algoritme selain SHA-1. Dalam persiapan untuk ini, ajarkan test_oid
keluarga fungsi cara mencari gumpalan kosong dan nilai pohon kosong agar dapat digunakan.
Jadi t/oid-info/hash-info
sekarang termasuk:
rawsz sha1:20
rawsz sha256:32
hexsz sha1:40
hexsz sha256:64
zero sha1:0000000000000000000000000000000000000000
zero sha256:0000000000000000000000000000000000000000000000000000000000000000
algo sha1:sha1
algo sha256:sha256
empty_blob sha1:e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
empty_blob sha256:473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813
empty_tree sha1:4b825dc642cb6eb9a060e54bf8d69288fbee4904
empty_tree sha256:6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321
SHA2 " 6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321
" adalah 4b825dc642cb6eb9a060e54bf8d69288fbee4904
pohon kosong SHA1 " " baru.