有人拿了一个版本(我不知道)的 Moodle,在一个目录中应用了许多更改,然后发布了它(tree here)。
我如何确定最有可能编辑原始项目的哪个提交以形成此树?
这将允许我使用此补丁在适当的提交中形成一个分支。它肯定来自 1.8或 1.9分支,可能来自发布标签,但特定提交之间的差异对我帮助不大。
事后更新: knittl's answer让我尽可能接近。我首先将我的补丁存储库添加为远程“外部”(没有共同的提交,没关系),然后使用几个格式选项在循环中进行比较。第一个使用了--shortstat
格式:
for REV in $(git rev-list v1.9.0^..v1.9.5); do
git diff --shortstat "$REV" f7f7ad53c8839b8ea4e7 -- mod/assignment >> ~/rdiffs.txt;
echo "$REV" >> ~/rdiffs.txt;
done;
第二个只是在没有上下文的情况下计算统一差异中的行更改:
for REV in $(git rev-list v1.9.0^..v1.9.5); do
git diff -U0 "$REV" f7f7ad53c8839b8ea4e7 -- mod/assignment | wc -l >> ~/rdiffs2.txt;
echo "$REV" >> ~/rdiffs2.txt;
done;
有成千上万的提交需要挖掘,但是 this one似乎是最接近的匹配。
最佳答案
您可以编写一个脚本,将给定的树与您存储库中的修订范围进行比较。
假设我们首先将更改后的树(没有历史记录)获取到我们自己的存储库中:
git remote add foreign git://…
git fetch foreign
然后我们输出我们想要匹配的每个修订版本的 diffstat(简写形式):
for REV in $(git rev-list 1.8^..1.9); do
git diff --shortstat foreign/master $REV;
done
寻找更改量最少的提交(或使用某种排序机制)
关于Git:如何找到与目录最匹配的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6388283/