EN: Read in English
Dunia 10: Git Mendalam
Ref, fail HEAD dan reftable
Anda akan belajar: apa sebenarnya branch di dalam .git, dan di mana Git 3.0 akan simpannya.
Teks BM belum disemak oleh penutur asli.
Masalahnya
Anda buat branch (cabang) dalam projek yang sangat besar. Ia muncul serta-merta. Tiada salinan, tiada tunggu. Jadi, apa sebenarnya branch di dalam .git?
Pilih satu jawapan.
Tengok
ref: Nama yang tunjuk ke satu commit, contohnya branch atau tag. ialah nama untuk satu commit. Branch main ialah fail kecil dalam .git/refs/heads. Di dalamnya ada satu id commit.
Cuba
.git/HEAD beritahu di mana anda berada. Baca fail itu. Kemudian detach HEAD, dan baca sekali lagi.
Petunjuk
cat .git/HEAD, kemudian git switch --detach HEAD~1, kemudian cat .git/HEAD lagi.Teka
Anda buat commit baru di main. Apa yang berubah dalam .git/refs/heads/main?
Pilih satu jawapan.
Cuba
Beribu fail ref kecil jadi lambat. git pack-refs --all masukkan semuanya dalam satu fail: packed-refs: Satu fail dalam .git yang simpan banyak ref sekali gus, bukan satu fail kecil setiap satu.. Padatkan, kemudian baca fail itu.
Petunjuk
Taipgit pack-refs --all, kemudian cat .git/packed-refs.Semak
reftable: Cara baru dan lebih laju untuk simpan ref dalam beberapa jadual padat. Git 3.0 merancang guna untuk repo baru. ialah cara yang lebih baru. Ref disimpan dalam beberapa jadual padat. Format mana sesuai dengan setiap fakta?
Seret kad ke dalam kotak. Atau ketik kad, kemudian ketik kotak.
Semak
Repo anda guna reftable. Arahan mana yang masih tunjuk id commit main?
Pilih satu jawapan.
Anda berjaya!
Kini anda boleh baca ref dan fail HEAD, dan anda kenal reftable.
Nak tahu lebih (pilihan)
git show-ref senaraikan setiap ref dengan idnya. Mahu cuba reftable sekarang? git init --ref-format=reftable buat repo baru dengannya. Tetapan init.defaultRefFormat buat begitu untuk setiap repo baru. Dalam skrip, tanya Git (rev-parse, show-ref). Jangan baca fail .git.
English
You make a branch in a huge project. It appears at once. No copying, no waiting. So what is a branch, inside .git?
A ref is a name for a commit. Branch main is a tiny file in .git/refs/heads. Inside is one commit id.
.git/HEAD says where you are. Read it. Then detach HEAD, and read it again.
cat .git/HEAD, then git switch --detach HEAD~1, then cat .git/HEAD again.You make a new commit on main. What changes in .git/refs/heads/main?
Thousands of tiny ref files get slow. git pack-refs --all puts them in one file: packed-refs. Pack them, then read it.
git pack-refs --all, then cat .git/packed-refs.reftable is a newer way. Refs live in a few compact tables. Which format fits each fact?
Your repo uses reftable. Which command still shows the commit id of main?
You can now read refs and the HEAD file, and know reftable.
Anda dah siapkan ini. Latihan lagi pun bagus!
Dokumentasi rasmi: gitglossary (ref) · git pack-refs · git show-ref · Git 3.0 breaking changes
Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?