10

誰かがこれを行うためのより効率的でインテリジェントな方法を持っているかどうか疑問に思っていました. ループ構成では、各コミットを読み取ることによって、削除されたすべてのファイルをすべてのコミットから消去する必要があります。多くのコミットがあると、これには長い時間がかかります。

git log --pretty=format: --name-status | grep -i ^D | cut -f2- | sort -u | xargs -I {} git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch {}' HEAD
4

4 に答える 4

5

これにより、各ファイルが 1 つずつ削除されるようです。複数のファイルが削除される可能性があることを
考慮してください。git rm

そのため、最適化の 1 つは、そのリストを作成してフィルター ブランチを 1 回呼び出すことです。
そのアプローチの一例は、「失敗せずに不要なファイルを削除する適切な方法git filter-branchgit rm」で見ることができます。

于 2012-12-19T07:04:41.713 に答える
2

同じ答えを探している可能性のある他の人のために、他のスレッドにリンクされている提案で上記の元のコマンドを変更し、私にとってはうまくいくと思われるこのコマンドを作成しました。

git filter-branch --prune-empty --index-filter 'git log --pretty=format: --name-status | grep -i ^D | cut -f2- | sort -u | xargs git rm --cached --ignore-unmatch DoesNotExistInMyProject'
于 2018-07-12T07:58:55.380 に答える