如何在不使用git的情况下查看git对象和索引

Cor*_*oyd 16 git macos terminal version-control

使用OS X终端,

如何以纯文本格式查看这些文件的内容?

小智 14

alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'"

deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum
4b3083256dedabd68e839d7717aa785424119990  -
Run Code Online (Sandbox Code Playgroud)


Jak*_*ski 10

如果你想在使用git的情况下查看git对象(提交和/或blob,即文件内容)的纯文本形式,那就不容易了,特别是如果打包存储库.你不能在你的主目录(或MacOS X上的等价物)本地安装git吗?

松散对象的格式,存储为.git/objects/扇出目录中的文件,例如.git/objects/02/43019ddb4d94114e5a8580eec01baeea195133(扇出目录和文件名形式为对象的SHA-1标识符),在"Pro Git"一书的第9.2章"Git对象"中有描述.(可免费在线获取)和第7章"Git存储对象"的"Git社区书".

格式,其中对象的集合被存储在单个文件中.git/objects/pack/,例如.git/objects/pack/pack-1db7aa96d95149a4dd341490a3594181a24415ee.pack,描述在文档/技术/包-format.txt和在第7.5章"的打包文件" "GIT中社区书"(和在提到章9.4" Packfiles" of"Pro Git")


如果要查找最新提交,请先查看.git/HEAD文件以查找当前分支.它将包含以下内容:

ref: refs/heads/master
Run Code Online (Sandbox Code Playgroud)

(如果它包含SHA-1,则可以将其作为上次提交的id,并跳过一步).然后检查例如.git/refs/heads/master找到分支指向的位置.它将包含提交的SHA-1,例如:

dbc1b1f71052c084a84b5c395e1cb4b5ae526fcb
Run Code Online (Sandbox Code Playgroud)

最后(最近)的提交可能是松散的格式; 在这个例子中,它将在.git/objects/db/c1b1f71052c084a84b5c395e1cb4b5ae526fcb文件中.


小智 9

在Git用户手册中查看"对象存储格式".

它是使用zlib的原始压缩数据.可以使用zpipe'zlib1g-dev'包.编译例子gcc -o zpipe zpipe.c -lz.它不是标准.gz或其他东西.

./zpipe -d < .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133
Run Code Online (Sandbox Code Playgroud)

打印blob的内容(标题+数据)

如果要检查SHA-1,则必须将未压缩的blob放在文件(myblob)中并执行

sha1sum myblob
Run Code Online (Sandbox Code Playgroud)


Ale*_*own 8

我将以不同的方式解释你的问题.如果你想了解对象文件是什么,你可以使用git直接查看它们,而无需导航历史日志或使用git checkout,diff等.例如:

对于文件 .git/objects/04/a42e9a7282340ef0256eaa6d59254227b8b141

运行命令

git show 04a42e
Run Code Online (Sandbox Code Playgroud)

其中结合了04/04/和剩余数量的前四个字符a42e.

> git show 04a42e
commit 04f7db976fa54c72fcc6350dd7d0aa06cb249df6
Author: Alex Brown <alex@XXXX.XXX>
Date:   Fri Jan 8 11:02:21 2010 +0000
a text file

diff --git a/1.txt b/1.txt
new file mode 100644
index 0000000..04a42e9
--- /dev/null
+++ b/1.txt
@@ -0,0 +1,3 @@
+Woo
+# boo
+# choo
Run Code Online (Sandbox Code Playgroud)

这个是提交,其他对象可能是文件blob,树等.