2012-07-12 70 views
2

我知道git会跟踪内容并在内容上部分生成一个sha。但是,沙也是基于父提交。 当我重新分支分支时,因为我的提交现在有不同的祖先,所有提交都有不同的shas。有没有办法检查两个不同的git提交内容是否相等?

但我在想什么,有没有办法比较两个提交(或提交范围),看看是否内容明智,他们是一样的? 这也应该能够判断一个二进制变化是否相同。

我在想如果有一些方法可以获得内容的sha,而不需要将祖先信息合并起来,那么可以这样做。

感谢任何和所有的帮助,

+1

http://stackoverflow.com/questions/1191282/git-diff-commits-difference – 2012-07-12 19:19:55

回答

1

提交标头包含用于树对象,它是文件系统的内容(内容+结构)的SHA。编写脚本来比较这些脚本不会太难。

Blob也有ID,所以如果您只是查看一个或两个文件,您可以比较这些ID。

+0

不幸的是,我不知道这是非常正确的(至少在树上)。基本上,当我查看提交树树时,即使该分支只是重新分区(文件没有任何更改),它也会更改。 – 2012-07-13 20:59:55

+0

树ID可以通过目录中的某些其他blob更改以某种方式更改。如果你所要做的只是比较两个斑点之间的差异,那么你必须编写某种类型的代码来解压缩斑点,去掉头部,然后散列剩下的部分,以便进行所需的比较。当然,你可以做'git log A..B - path'并且省去麻烦。 – 2012-07-14 03:54:20

5

您希望--cherry-mark选项能够在其补丁内容相同时,对哪些标记提交等号并进行git记录。

git log --decorate --graph --oneline --cherry-mark --boundary A...B 

是重订基期支路B与原分公司答:我用这个来检查,我提交使用Git TFS仍然正常,一旦TFS已经在他们提出比较的好方法。

+0

嗯...这一个似乎是最有前途的,除了一些我无法弄清楚的事情。第一个是,你如何拥有一个重新设计的分支B和一个原始分支A?你正在创建一个备份分支还是产生一个新分支?在我的情况下,我只是重新绑定了master上的现有分支。第二个是在我的二进制文件中,即使它们的校验和完全相同,它将提交标记为不等价。有没有我失踪的一块? – 2012-07-12 22:13:47

+0

哪个版本的git与--cherry-mark一起使用?我没有找到我安装的东西。 – 2012-08-23 13:38:37

+0

该选项在2011年3月9日提交adbbb31版本中添加到revision.c中,并且存在于git 1.7.5及更高版本中。 (我用git gui blame和git描述了来找到这个)。 – patthoyts 2012-08-23 13:49:00

相关问题