der*_*men 3 sha1 github git-diff duplicates
我有一个github repo似乎有重复的提交.每个提交都具有相同的消息字符串和相同的日期/作者,但具有不同的SHA-1哈希值.例如,在我的日志中,我发现了以下四重奏:
'commit 55e55517bf32b7ba7382b97f41a1514af8a5f5dc',
'Author: dermen <dermen@stanford.edu>',
'Date: Tue Feb 19 20:03:35 2013 -0800',
'finished with the cromermann edition',
'commit 814fb08e0d42588a500947cba42a980ac24c01b8',
'Author: dermen <dermen@stanford.edu>',
'Date: Tue Feb 19 20:03:35 2013 -0800',
'finished with the cromermann edition',
'commit a5f581f513d12e95627669f61cfe27064ffe8319',
'Author: dermen <dermen@stanford.edu>',
'Date: Tue Feb 19 20:03:35 2013 -0800',
'finished with the cromermann edition',
'commit a264614b674e1ad2c4c8cc953cb27cf77c0d2615',
'Author: dermen <dermen@stanford.edu>',
'Date: Tue Feb 19 20:03:35 2013 -0800',
'finished with the cromermann edition',
Run Code Online (Sandbox Code Playgroud)
除了SHA-1哈希之外,一切都是相同的.当我跑的例子
git diff 55e55517bf32b7ba7382b97f41a1514af8a5f5dc 814fb08e0d42588a500947cba42a980ac24c01b8
Run Code Online (Sandbox Code Playgroud)
我得到零输出 - 这并不意味着提交是相同的.如果这是真的,那么为什么他们会有单独的SHA-1哈希值?也许我误解了,但是SHA-1哈希不应该直接代表文件中的内容吗?因此,如果提交相同,那么它们应该具有相同的哈希值.
在任何情况下,我想知道尝试过滤这些明显的重复是否明智/不明智...任何提示/重定向将不胜感激.
从以下信息生成git commit sha
由于shas不同,这是因为这些信息中的至少一个不同.
为了更好地理解每个提交的数据是什么(以及它们如何彼此不同),您可以运行以下命令来获取每个提交的原始输出
$ git show --format=raw <commit_sha>
Run Code Online (Sandbox Code Playgroud)
基于libgit2项目的随机提交
$ git show --format=raw eb58e2d
commit eb58e2d0be4e07c2ef873a5f0562eaa90826c2de
tree 41959050b1e3adb428e140102a0c321949be516b
parent 3b5001b4c911db9c47d62399c1adc03bd8a3ca72
parent 3e9e6cdaff8acb11399736abbf793bf2d000d037
author Vicent Marti <tanoku@gmail.com> 1371063948 +0200
committer Vicent Marti <tanoku@gmail.com> 1371063948 +0200
Merge remote-tracking branch 'arrbee/minor-paranoia' into development
diff --cc src/refdb.c
index 359842e,4271b58..6da409a
--- a/src/refdb.c
+++ b/src/refdb.c
@@@ -86,9 -86,10 +86,10 @@@ int git_refdb_compress(git_refdb *db
return 0;
}
-static void refdb_free(git_refdb *db)
+void git_refdb__free(git_refdb *db)
{
refdb_free_backend(db);
+ git__memset(db, 0, sizeof(*db));
git__free(db);
}
Run Code Online (Sandbox Code Playgroud)
我得到零输出 - 这不意味着提交是相同的
这意味着提交所指向的内容是相同的.但元数据肯定会有所不同.
也许我误解了,但是SHA-1哈希不应该直接代表文件中的内容吗?
在Git中,SHA-1哈希用于表示git对象:blob(即文件),树(即blob和子树列表)和提交.您可以在章节找到更多有关此Git对象- 9.2 Git的内幕的的临Git的书.
例如,在我的日志中,我发现了以下四重奏
例如,修改/ rebase/fixup提交内容时可能会发生这种情况.在这些情况下,只有提交日期会发生变化.
无论如何,我想知道尝试过滤这些明显的重复是否明智/不明智
您不必自己清理.这些对象存储在Git对象数据库中.Git实现了一个垃圾收集机制,可以定期自动从中删除孤立的对象(有关详细信息,请参阅git-gc文档).
| 归档时间: |
|
| 查看次数: |
2171 次 |
| 最近记录: |