【问题标题】:find git commits with no author查找没有作者的 git 提交
【发布时间】:2017-05-07 14:58:06
【问题描述】:

通过使用导入工具,我得到了一些没有作者的 git 提交。例如,这里是一个 git log 输出,显示了无作者提交和正常提交

commit 40c2638378b33ac98a8d9570552ecd01e38174be
Merge: c2c068f 8f0c30c

    Merge libde265 (1.0.2-2) import into refs/heads/workingbranch

commit c2c068f30652fd3e63b55c509ae50828c98daa22
Author: Debian Multimedia Maintainers <pkg-multimedia-maintainers@lists.alioth.debian.org>
Date:   Mon Jan 11 18:12:19 2016 +0000

     ffmpeg_2.9


     Gbp-Pq: Name ffmpeg_2.9.patch

github 不会接受这些提交。所以我需要修复它们,为此我需要找到它们。

如何找到此类提交以便修复它们?

【问题讨论】:

    标签: git github


    【解决方案1】:

    您可以使用--pretty 格式逐行输出完整的提交。

    git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
    

    然后从输出中可以检查哪些提交有对应的空作者(即第二列)。

    【讨论】:

    • 这将吐出所有没有作者的提交: git log --pretty="%aN END-AUTHOR %H" | grep '^ END-AUTHOR '
    【解决方案2】:

    好吧,我找到了一个解决方案,但它有点 hacky。

    git log > log1
    git log --author "" > log2
    diff -u log1 log2
    

    为了后代完整的查找和修复脚本(感谢https://stackoverflow.com/a/28845565/5083516 提供有关修复方面的一些提示)

     #!/bin/bash -ev
     rm -f loggood
     rm -f logall
     for TAG in $(git tag) ; do
         git log --pretty=format:"%H" --author="" $TAG >> loggood
         #git log doesn't seem to add a final newline, add one ourselves
         echo >> loggood
         git log --pretty=format:"%H" $TAG >> logall
         echo >> logall
     done
    
     LC_ALL=C cat loggood | sort | uniq | sponge loggood
     LC_ALL=C cat logall | sort | uniq | sponge logall
     LC_ALL=C comm -13 loggood logall > logbad
    
     for COMMIT in $(cat logbad) ; do
         git checkout $COMMIT
         git commit --amend --reset-author --no-edit
         git replace $COMMIT $(git log --pretty=format:"%H" -n 1)
     done
    
     git filter-branch -f -- --all
    
     for COMMIT in $(cat logbad) ; do
         git replace -d $COMMIT
     done
    

    【讨论】:

    • 你可以用git rev-list做同样的事情,它只打印提交ID。但是,鉴于存储库是由导出/导入工具创建的,使用更正的工具重新导出它可能会更简单,或者通过git-fast-import 运行它并使用更正这些的东西。
    猜你喜欢
    • 2013-07-25
    • 2011-02-13
    • 1970-01-01
    • 2018-12-26
    • 2018-06-24
    • 2015-03-08
    • 2011-10-09
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多