LFSを使用しているbitbucketにリポジトリがあります。しばらく使用してから、リポジトリを自分の管理下のスペースに戻すことにしました。そもそもLFSを使用した唯一の理由は、リポジトリのサイズ制限を事実上2倍にすることでした(LFS内のファイルが別のバケットに移動するため)。
Git履歴全体をトロールし、git LFSが行う作業のすべてのトレースを削除する方法が必要です(したがって、すべてのファイルが「正常に」コミットされます)。これが完了したら、新しいリポジトリにプッシュを強制するつもりです。
私はかなりの検索を行っており、 推奨される解決策 に遭遇しましたが、それらは高レベルであるため、それらを実装/実行する方法がわかりません。
Git LFSに別れを告げるにはどうすればよいですか?
LFSから移動したいが、git履歴全体の修正についてそれほど心配していない場合は、以下を実行できます。
git lfs uninstall
touch **/*
git commit -a
これにより、LFSサポートがアンインストールされ、すべてのファイルに触れて(gitが変更を認識できるように)、すべてのファイルをコミットします。必要に応じて、より具体的にすることができます(つまり、**/*.png
例えば)。 **
には拡張globサポートを有効にする必要があります(shopt -s globstar
on bash)
これは私にとってはうまくいきましたが、多くのエラーがスローされ(I thinkファイルがLFSに追加されていないコミットごとにエラーが発生します)、時間がかかります(約2コミットごとに-3秒)。
git lfs uninstall
git filter-branch -f --Prune-empty --tree-filter '
git lfs checkout
git lfs ls-files | cut -d " " -f 3 | xargs touch
git rm -f .gitattributes
git lfs ls-files | cut -d " " -f 3 | git add
' --tag-name-filter cat -- --all
Git LFSサポートをアンインストールし(理論的にはLFSがインデックスに干渉しないようにします)、コミットごとにLFSファイルが適切にチェックアウトされていることを確認してから、すべてに触れ(gitが変更を認識している)、LFSの設定を削除します.gitattributes
これにより、クローン作成時にLFSを使用しようとしないで、実際のファイルをインデックスに追加します。
上記を実行した後、強制プッシュを実行する必要があります。当然、それはあなたのリポジトリで作業している他の人を切り離されたヘッド状態に投げます-コードフリーズ中にこれを行うのが賢明です。その後、全員に新しいクローンを作成させるのがおそらく最も簡単です。
git lfs migrate export
git lfs migrate help
から:
書き出す
exportモードは、Git履歴に存在するGit LFSポインターファイルをGit LFSから移行し、対応するオブジェクトファイルに変換します。
git lfs ls-files
のLFSファイルがあることを確認してください。filter=lfs
ファイルからすべての.gitattributes
行を削除します。 .gitattributes
はどこにでも存在する可能性があるため、それらをすべて見つけてください。そうしないと、後で移行の問題が発生する可能性があります。.gitattributes
に加えた変更をコミットします。git status
で変更がないことを確認してください。git lfs migrate export --everything --include .
git status
を実行して、変更がないことを確認します。 .gitattributes
をfilter=lfs
のままにした場合、変更が正しく行われない可能性があります。git lfs ls-files
で存在しないことを確認します。filter=lfs
からすべての.gitattributes
行を削除します。.git/hooks
ディレクトリに残っているLFSを削除することもできます:コミット前、コミット後、チェックアウト後、マージ後。$GIT_TRACE=1
では、...trace git-lfs: filepathfilter: accepting...
の兆候はないはずです