web-dev-qa-db-ja.com

git-lfsによって追跡されたファイルを削除し、ストレージクォータを解放する方法は?

使用しないファイルを削除し、ストレージをgithub lfsクォータに戻す方法は?

この状況では、git historyでファイルの参照ポイントを削除できますか?

25
lucemia

現時点では、git-lfs。 GitHubの現在の提案は、 The BFG というツールを使用して、レポジトリからファイルのすべての存在を完全に削除することです。

おそらくGithubが次にgitのガベージコレクションを実行するときに、lfsストレージから削除されるでしょう。

詳細については、 https://help.github.com/articles/working-with-large-files/ を参照してください

12
Wader

Waderの回答は質問とは関係ありません。

Github記事へのリンクは、gitリポジトリに直接チェックインされる大きなファイルに関するものであり、git-lfsとは異なります!

質問に関しては、この状況がどのように処理されるかは、基盤となるストレージサーバーに依存します。 git-lfsサポートは、さまざまなサービスによって提供できます。 GitHubまたはGitLab。

GitLabは、リポジトリごとではなくgit-lfsファイルを保存します。それらは、SHA-256ハッシュ値によって保存されます。同じファイルが複数のリポジトリ(クローンなど)で使用されている場合、一度だけ保存されます。参照ファイルの処理方法はGitLabのみに依存するため、マニュアルで調べる必要があります。

GitHubsのドキュメント( https://help.github.com/articles/removing-files-from-git-large-file-storage/ )によると、リポジトリを削除して再作成することをお勧めします。 「Git LFSオブジェクトをリポジトリから削除するには、リポジトリを削除して再作成します。リポジトリを削除すると、関連する問題、スター、フォークも削除されます。」

9
Chris

クリスからの答えは正確ではありません。 0xcaffからのコメント( "がひどい解決策")と組み合わされると、不慣れなユーザー(または気が散る読者)を誤解させる可能性があります。

正しい答えは、ウェイダーとクリスの混合です。

リポジトリをミラーリングしたいというケースを解決しました(それをREPO-1ある時間に一度がLFSを使用したが、大きなファイルから履歴が消去されていない。

先月のある時点で、REPO-1 with git lfs uninstall。そして、それはその後のgit clones(i.e.、なしgit-lfsもう。しかし今日、以前にpullを試してみたときにPush --mirrorバージョンのREPO-1メッセージを受け取ったSmudge error: Error downloading <big-filename> ... Object does not exist on the server: [404] Object does not exist on the server

したがって、LFSと、かつて追跡されたファイルへの参照を削除するには、次の手順を実行する必要があります。

  1. リポジトリからLFSをアンインストールします。
  2. リポジトリの履歴を消去します。
  3. 古い(github)リポジトリを削除(または名前変更)し、新しいリポジトリを作成して、クリーンなリポジトリをそこにプッシュします。

1

uninstall にLFSは git lfs uninstall のような単純なコマンドで実行できます。

2

リポジトリの履歴をきれいにするのは少し怖いですが、git filter-branch、Githubドキュメントの項目3-- https://help.github.com/en/articles/removing-sensitive -data-from-a-repository -これで十分です:

$ git filter-branch --force --index-filter \
      "git rm --cached --ignore-unmatch FILENAME-1 FILENAME-2 FILENAME-3" \
      --Prune-empty --tag-name-filter cat -- --all

3

リポジトリの削除と再作成はそれほど破壊的ではありません。ローカルリポジトリは完全に独立しており、Githubにあるものの clone を自立していることに注意してください。ローカル(クリーン)バージョンを新しい空のリポジトリにプッシュすると、そのような(削除/作成)は発生しませんでした。

1
Brandt