首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用git-filter-branch测试提交

如何使用git-filter-branch测试提交
EN

Stack Overflow用户
提问于 2015-10-01 06:42:49
回答 1查看 522关注 0票数 1

我怀疑我的存储库中最后150个提交中的一些已经损坏--也就是说,如果我签出这些提交中的一个,代码将无法编译。我想我可以使用git-filter-branch来测试它,但是我被参数弄糊涂了。我想出了这个:

git filter-branch -f --commit-filter 'git提交树"$@";cd ../..;make defconfig;make‘HEAD^..

但是我得到了下面的输出:

代码语言:javascript
复制
$ git filter-branch -f --commit-filter 'git commit-tree "$@"; cd ../..; make defconfig; make' HEAD^..
Rewrite 4c3b2950f53717ba22280a76c211c9eab3135348 (1/1)arch/arm64/kernel/setup.c: In function 'arm64_spcr_setup':
arch/arm64/kernel/setup.c:615:3: error: implicit declaration of function 'acpi_setup_spcr' [-Werror=implicit-function-declaration]
   acpi_setup_spcr();
   ^
cc1: some warnings being treated as errors
make[1]: *** [arch/arm64/kernel/setup.o] Error 1
make: *** [arch/arm64/kernel] Error 2
could not write rewritten commit

这对我来说毫无意义。编译错误与我的repo中的最后两个提交不匹配,“无法写入重写提交”是什么意思?我显然在做一些完全错误的事情,但我不知道是什么。

EN

回答 1

Stack Overflow用户

发布于 2015-10-01 07:04:16

此seems...dirty.

您所要做的就是一次一个地检查提交,编译它们,并针对它们运行测试,对吗?

相反,您可以检查这些提交,从1开始,直到您想要返回的次数,运行测试,并将测试结果报告到文件中。

这将帮助您入门

代码语言:javascript
复制
for i in $(seq 1 150);
do
    git checkout HEAD~$i;
    make defconfig && make;
    git checkout master;
done

可能有一种更优雅的方法来实现这一点,但原则如下:

  • 您正在执行每次提交,每次一个处于分离的头状态。
  • 您正在运行所需的任何步骤,以便在该时刻构建分支。
  • 您运行测试(并记录它们;这将作为练习留给读者)。
  • 您随后恢复分支的状态,以便它指向原始头。

一种稍微优雅一点的方法是,只在完成后才将分支移回:

代码语言:javascript
复制
COUNT=0
while [ $COUNT -lt 150 ];
do
    git checkout HEAD~1;
    make defconfig && make;
    let $COUNT=$COUNT + 1;
done
git checkout master;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32876726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档