111

重複の可能性:
Git のコミット履歴から巨大なファイルを削除するには?

私は愚かなことをした。100MB のファイルをコミットしたとします。次に、これを見てこのファイルを削除し、再度コミットします。これは、ファイルを削除する通常の手順です。

しかし、この大きなファイルが保存されているため、履歴が重いという副作用があります (これが重い理由だと思います)。私はローカル git のみを使用しているため、どのサーバーでも同期しません。

このファイルを完全に削除してディスク容量を節約するにはどうすればよいですか?

4

3 に答える 3

213

次のように gitfilter-branchコマンドを使用して実行できます。

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD

ここで詳細なドキュメントを見つけることができますhttp://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-a-git-repository

于 2011-11-10T17:00:44.587 に答える
27

探しているコマンドはfilter-branch. 登録からファイルを完全に削除できます。このブログには、問題のあるファイルをリポジトリから削除する方法に関する優れたチュートリアルがあります

于 2011-11-10T17:00:11.840 に答える
20

David Underhillによる次の素晴らしいスクリプトを使用して、git リポジトリからファイルを削除できます。

#!/bin/bash
set -o errexit

# Author: David Underhill
# Script to permanently delete files/folders from your git repository.  To use 
# it, cd to your repository's root and then run the script with a list of paths
# you want to delete, e.g., git-delete-history path1 path2

if [ $# -eq 0 ]; then
    exit 0
fi

# make sure we're at the root of git repo
if [ ! -d .git ]; then
    echo "Error: must run this script from the root of a git repository"
    exit 1
fi

# remove all paths passed as arguments from the history of the repo
files=$@
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD

# remove the temporary history git-filter-branch otherwise leaves behind for a long time
rm -rf .git/refs/original/ && git reflog expire --all &&  git gc --aggressive --prune
于 2011-11-10T16:58:41.897 に答える