2016-12-22 114 views
2

通過使用導入工具,我結束了一些沒有作者的git提交。例如,這裏是一個git日誌輸出,顯示無責任的提交和正常提交找到沒有作者的git提交

commit 40c2638378b33ac98a8d9570552ecd01e38174be 
Merge: c2c068f 8f0c30c 

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

commit c2c068f30652fd3e63b55c509ae50828c98daa22 
Author: Debian Multimedia Maintainers <[email protected]> 
Date: Mon Jan 11 18:12:19 2016 +0000 

    ffmpeg_2.9 


    Gbp-Pq: Name ffmpeg_2.9.patch 

github不會接受這些提交。所以我需要修復它們,做到這一點我需要找到它們。

我如何找到這樣的提交,以便我可以修復它們?

回答

1

嗯,我發現了一個soloution,但它有點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 
+1

你可以用'git rev-list'做同樣的事情,它只打印提交ID。但是,由於存儲庫是由導出/導入工具創建的,因此使用更正的工具重新導出它可能會更簡單,或者通過'git-fast-import'運行它,並通過一些可以糾正這些問題的方法來運行它。 – torek

2

您可以利用--pretty格式逐行輸出完整提交。

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

然後從輸出可以檢查哪些提交有相應的空作者(即第二列)。

+0

這會吐出所有的承諾沒有author:git的日誌 - pretty =「%aN END-AUTHOR%H」| grep'^ END-AUTHOR' –