我在哪里可以找到特定 Git 提交的快照?
Where can I find snapshot for a specific Git commit?
我了解到:
- Git 为每次提交保留快照
- 快照本质上是
copies
个 changed
个文件和一些 references
到 unchanged
个文件
- 所有 Git 相关数据都存储在存储库目录中的
.git
目录下。
duong2179-mbpro:.git duong2179$ ls -l
total 480
-rw-r--r-- 1 duong2179 admin 742 Oct 2 13:03 COMMIT_EDITMSG
-rw-r--r-- 1 duong2179 admin 15646 Oct 2 13:28 FETCH_HEAD
-rw-r--r-- 1 duong2179 admin 33 Oct 2 13:28 HEAD
-rw-r--r-- 1 duong2179 admin 41 Oct 2 13:28 ORIG_HEAD
-rw-r--r-- 1 duong2179 admin 849 Oct 2 13:07 config
-rw-r--r-- 1 duong2179 admin 73 Apr 24 16:18 description
drwxr-xr-x 17 duong2179 admin 578 Apr 24 16:19 hooks
-rw-r--r-- 1 duong2179 admin 185528 Oct 2 13:29 index
drwxr-xr-x 3 duong2179 admin 102 Apr 24 16:18 info
drwxr-xr-x 4 duong2179 admin 136 Apr 24 16:19 lfs
drwxr-xr-x 4 duong2179 admin 136 Apr 24 16:19 logs
drwxr-xr-x 260 duong2179 admin 8840 Aug 19 15:50 objects
-rw-r--r-- 1 duong2179 admin 19239 Apr 24 16:19 packed-refs
drwxr-xr-x 5 duong2179 admin 170 Sep 25 16:05 refs
drwxr-xr-x 3 duong2179 admin 102 Aug 5 15:03 subtree-cache
给定一个 Git 提交哈希,我在哪里可以找到 .git
子目录中的关联快照?
如果该提交已打包,您将无法直接找到它 (delta compressed): see "Git Internals - Packfiles"
您需要验证每个包并查看您的提交 SHA1 是否存在:
$ git verify-pack -v .git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.idx
2431da676938450a4d72e260db3bf7b0f587bbc1 commit 223 155 12
69bcdaff5328278ab1c0812ce0e07fa7d26a96d7 commit 214 152 167
然后您需要 unpack that pack file。
如未打包,见“Git Internals - Git Objects”
$ find .git/objects -type f
.git/objects/01/55eb4229851634a0f03eb265b69f5a2d56f341 # tree 2
.git/objects/1a/410efbd13591db07496601ebc7a059dd55cfe9 # commit 3
例如,提交 3 的 SHA1 为 1a410efbd13591db07496601ebc7a059dd55cfe9
,其数据位于:
1a/410efbd13591db07496601ebc7a059dd55cfe9
然后您可以读取该提交元数据的内容:
# Windows:
perl -MCompress::Zlib -e "undef $/; print uncompress(<>)" < 410efbd13591db07496601ebc7a059dd55cfe9
# Linux
perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)' < 410efbd13591db07496601ebc7a059dd55cfe9
您将获得:
commit 349 tree 410efbd13591db07496601ebc7a059dd55cfe9
parent 53316403bc0e36f650796d0afdc0687c52357694
author VonC <VonC@email.com> 1569944592 +0200
committer VonC <VonC@email.com> 1569944592 +0200
This is a commit comment message
我了解到:
- Git 为每次提交保留快照
- 快照本质上是
copies
个changed
个文件和一些references
到unchanged
个文件 - 所有 Git 相关数据都存储在存储库目录中的
.git
目录下。
duong2179-mbpro:.git duong2179$ ls -l
total 480
-rw-r--r-- 1 duong2179 admin 742 Oct 2 13:03 COMMIT_EDITMSG
-rw-r--r-- 1 duong2179 admin 15646 Oct 2 13:28 FETCH_HEAD
-rw-r--r-- 1 duong2179 admin 33 Oct 2 13:28 HEAD
-rw-r--r-- 1 duong2179 admin 41 Oct 2 13:28 ORIG_HEAD
-rw-r--r-- 1 duong2179 admin 849 Oct 2 13:07 config
-rw-r--r-- 1 duong2179 admin 73 Apr 24 16:18 description
drwxr-xr-x 17 duong2179 admin 578 Apr 24 16:19 hooks
-rw-r--r-- 1 duong2179 admin 185528 Oct 2 13:29 index
drwxr-xr-x 3 duong2179 admin 102 Apr 24 16:18 info
drwxr-xr-x 4 duong2179 admin 136 Apr 24 16:19 lfs
drwxr-xr-x 4 duong2179 admin 136 Apr 24 16:19 logs
drwxr-xr-x 260 duong2179 admin 8840 Aug 19 15:50 objects
-rw-r--r-- 1 duong2179 admin 19239 Apr 24 16:19 packed-refs
drwxr-xr-x 5 duong2179 admin 170 Sep 25 16:05 refs
drwxr-xr-x 3 duong2179 admin 102 Aug 5 15:03 subtree-cache
给定一个 Git 提交哈希,我在哪里可以找到 .git
子目录中的关联快照?
如果该提交已打包,您将无法直接找到它 (delta compressed): see "Git Internals - Packfiles"
您需要验证每个包并查看您的提交 SHA1 是否存在:
$ git verify-pack -v .git/objects/pack/pack-978e03944f5c581011e6998cd0e9e30000905586.idx
2431da676938450a4d72e260db3bf7b0f587bbc1 commit 223 155 12
69bcdaff5328278ab1c0812ce0e07fa7d26a96d7 commit 214 152 167
然后您需要 unpack that pack file。
如未打包,见“Git Internals - Git Objects”
$ find .git/objects -type f
.git/objects/01/55eb4229851634a0f03eb265b69f5a2d56f341 # tree 2
.git/objects/1a/410efbd13591db07496601ebc7a059dd55cfe9 # commit 3
例如,提交 3 的 SHA1 为 1a410efbd13591db07496601ebc7a059dd55cfe9
,其数据位于:
1a/410efbd13591db07496601ebc7a059dd55cfe9
然后您可以读取该提交元数据的内容:
# Windows:
perl -MCompress::Zlib -e "undef $/; print uncompress(<>)" < 410efbd13591db07496601ebc7a059dd55cfe9
# Linux
perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)' < 410efbd13591db07496601ebc7a059dd55cfe9
您将获得:
commit 349 tree 410efbd13591db07496601ebc7a059dd55cfe9
parent 53316403bc0e36f650796d0afdc0687c52357694
author VonC <VonC@email.com> 1569944592 +0200
committer VonC <VonC@email.com> 1569944592 +0200
This is a commit comment message