2017-11-13 11 views
0

私はオープンソースのリポジトリで、gitリポジトリと他の種類のVCSを組み合わせてコピーしたようです。レポでのコミットの莫大な量がゼロのファイルとそれらのほとんどが変更、ありますファイルが変更されていないすべてのgitコミットを一覧表示します

Almost 40 thousand commits

Most of them have changed zero files

は何どのファイルが変更されていないと、すべてのコミットをリストアップするための最良の方法、回数になりますそれらを削除し、ローカルのgitリポジトリから削除する可能性がありますか?

編集:私は、具体的Remove empty commits in git

+1

おそらくHTTPS:/ /stackoverflow.com/a/28313729/3124288あなたが探しているのは何ですか? – JKillian

+0

素晴らしいですが、これは容器を剪定するのに最適です。 –

+0

@Whymarhここには小さな違いがあると思います。私は答えを見てみると、filter-branchのような破壊的なコマンドを使用する前に問題の程度を見ることに特に関心がありました。 –

答えて

0

に参照されるようにfilter-branchような時間がかかり、破壊的なコマンドを実行する前に、問題の程度を評価する方法を探していますので、それは私がグーグルに欠けていたキーワードが判明「空」だった(など「なしファイルの変更をコミットを削除」を探していた)

一覧は変化(コミット)がないことをコミット:

git rev-list HEAD | while read commitHash; do 
    if [ $(git diff-tree --name-status --no-commit-id $commitHash | wc -l) -eq 0 ]; then 
     echo $commitHash 
    fi; 
done 
0123を

git rev-list HEAD | while read commitHash; do 
    git diff-tree --name-status $commitHash 
done 

カウントコミット

git rev-list HEAD | while read commitHash; do 
    if [ $(git diff-tree --name-status --no-commit-id $commitHash | wc -l) -eq 0 ]; then 
     echo '1' 
    fi; 
done | wc -l 

カウント非空

をコミット:

リストの変更、および変更されたファイル(空のコミットを)持っていることをコミット特に--commit-filter

git filter-branch --tag-name-filter cat --commit-filter 'git_commit_non_empty_tree "[email protected]"' -- --all 

ドキュメントfilter-branchに、::10

そして最後に、@JKillianさんの提案どおり、git filter-branchを使用してレポからのすべての空のコミットを削除

https://git-scm.com/docs/git-filter-branch#git-filter-branch---commit-filterltcommandgt

関連する問題