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

问题描述 投票:0回答:5

使用 OS X 终端,

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

git macos version-control terminal
5个回答
17
投票
alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'"

deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum
4b3083256dedabd68e839d7717aa785424119990  -

12
投票

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

对于文件

.git/objects/04/a42e9a7282340ef0256eaa6d59254227b8b141

运行命令

git show 04a42e

结合了

04
中的
/04/
和剩余数字
a42e
的前四个字符。

> git show 04a42e
commit 04f7db976fa54c72fcc6350dd7d0aa06cb249df6
Author: Alex Brown <[email protected]>
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

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


10
投票

查看Git 用户手册中的“对象存储格式”

它是使用 zlib 的原始压缩数据。可以使用“zlib1g-dev”包中的

zpipe
。使用 gcc -o zpipe zpipe.c -lz 编译
示例
。这不是标准
.gz
之类的。

./zpipe -d < .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133

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

如果你想检查 SHA-1,你必须将未压缩的 blob 放入文件中 (

myblob
) 并执行

sha1sum myblob

9
投票

如果您想在不使用 git 的情况下查看纯文本形式的 git 对象(提交和/或 blob,即文件内容),这并不容易,尤其是在存储库已打包的情况下。你不能在你的主目录(或 MacOS X 上的等效目录)中本地安装 git 吗?

loose

对象的格式,作为文件存储在.git/objects/扇出目录中,例如

.git/objects/02/43019ddb4d94114e5a8580eec01baeea195133
(扇出目录和文件名形成对象的 SHA-1 标识符),例如描述为参见“Pro Git”第二版书籍(免费在线提供)的
第 10.2 章“Git 对象”
和“Git 社区书籍”的第 7.1 章“Git 如何存储对象”。 pack

格式,其中一组对象存储在

.git/objects/pack/ 中的单个文件中,例如.git/objects/pack/pack-1db7aa96d95149a4dd341490a3594181a24415ee.pack

,在 
pack-format
 文档 (
git help pack-format) 和“Git Community Book”的第 7.5 章“Packfile”
 中进行了描述(并在“Pro Git”的
第 10.4 章“Packfiles” 中提到) ,第二版) 如果你想找到最新的提交,请先查看

.git/HEAD
文件以找到当前分支。它会包含如下内容:

ref: refs/heads/master

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

dbc1b1f71052c084a84b5c395e1cb4b5ae526fcb

最后(最近)提交可能采用松散格式;在此示例中,它将位于
.git/objects/db/c1b1f71052c084a84b5c395e1cb4b5ae526fcb
文件中。


索引存储在

0
投票
下。

它是指定的二进制未压缩格式:
https://github.com/git/git/blob/master/Documentation/technical/index-format.txt

,因此阅读它的唯一方法是使用类似的工具

hd

index

文件包含文件列表及其元数据,包括 inode、权限和修改时间。它还包含内容的 SHA-1,该内容存储为对象,这意味着当您执行

git add

 时,它可能会创建新对象。
我鼓励您创建一个简单的测试存储库,例如 
git init init && cd init && echo a > a && git add a

,然后

hd .git/index

 逐个字段验证格式。
下面的问题更关注索引:
git 索引到底包含什么?

© www.soinside.com 2019 - 2024. All rights reserved.