寻找git提交一些代码

我有一些原始的Linux内核修改版本的开源代码。 理想情况下,我会有一个补丁,以便我可以将它应用于新版本的内核,但是我只是拥有源代码,所以我正在尝试自己创建该补丁。

我发现当我创建一个补丁并将其应用到较新的内核时,我最终恢复了很多变化。 git中有一个功能可以告诉本地更改是否恢复以前的提交? 还是有一些其他工具可以用最少的变化找到提交(即使它很费时间并且必须在我自己的机器上运行)?

我一直在手动缩小提交源的分支,但这非常耗时。 我发现了一个相当紧密匹配的分支,现在我正试图弄清楚在对它进行更改之前最新的提交是什么。

我将检查一个提交A,复制已更改的文件,记录任何有很多内容的文件,以确定是否从提交B添加了确切的更改,然后在提交B之前签出提交,等等等等......

编辑:由于这一切都与开放源代码有关,我看不到任何理由,为什么我不能在这里分享链接。

LGE发布的源代码可以在这里找到。 在Mobile下搜索LS970。

MSM内核的不同分支可以在这里找到。 到目前为止, ics_strawberry头似乎是最接近的。 这是少数几个有chromeos文件夹的之一,这似乎是一个奇怪的事情,专门添加一个不会运行Chrome操作系统的手机。


不幸的是,你不能在这里使用git bisect ,因为你不能在任何提交中告诉它是坏的还是好的。

您的目标是找到最符合您的目标来源的提交。 我认为什么是“匹配最佳”的最佳指标是统一差异/补丁的大小(以行为单位)。

考虑到这一点,您可以根据以下伪代码编写脚本(对不起,shell,Perl和C的奇怪组合):

min_diff_size = 10000000000
best_commit = none
git branch tmp original_branch  # branch to scan
git checkout tmp
for (;;) {
    diff_size = `diff -burN -x.git my_git_subtree my_src_subtree | wc -l`;
    if (diff_size < min_diff_size) {
         min_diff_size = diff_size;
         best_commit = `git log --oneline -1`;
    }
    git reset --hard HEAD~; # rewind back by 1 commit
    if (git reset did not work) break;
}
git checkout original_branch
git branch -d tmp

print "best commit $best_commit, diff size $min_diff_size"

您也可能想要循环访问内核分支以查找最匹配的分支。

这可能会运行缓慢并花费很多时间(可能是几个小时),但它会找到最匹配的提交。


你可以用git blame来找出每行代码被引入哪个提交。例如,

git blame main.c

查看你可以用来微调blame的输出和其他很酷的技巧的各种选项的手册页。

链接地址: http://www.djcxy.com/p/68737.html

上一篇: Finding what git commit some code spawned from

下一篇: net::ERR