414

私は自分の GitHub アカウントでリポジトリに取り組んでいましたが、これは私が遭遇した問題です。

  • いくつかの npm パッケージがインストールされたフォルダーを含む Node.js プロジェクト
  • パッケージはnode_modulesフォルダにありました
  • そのフォルダーを git リポジトリに追加し、コードを github にプッシュしました (その時点では npm の部分については考えていませんでした)。
  • そのフォルダーをコードの一部にする必要がないことに気付きました
  • そのフォルダを削除し、プッシュしました

その場合、git リポジトリの合計サイズは約6MBで、実際のコード (そのフォルダーを除くすべて) は約300 KBにすぎませんでした。

最終的に私が探しているのは、そのパッケージ フォルダーの詳細を git の履歴から削除する方法です。そのため、誰かがそれを複製した場合、実際のファイルのみが取得される 6 MB 相当の履歴をダウンロードする必要はありません。最後のコミットの時点で 300KB になります。

これに対する可能な解決策を探し、これらの2つの方法を試しました

Gist は、スクリプトを実行した後、そのフォルダーが削除されたことを示し、その後、50 の異なるコミットが変更されたことを示していました。しかし、そのコードをプッシュすることはできませんでした。私がそれをプッシュしようとしたとき、それは言っBranch up to dateたが、50のコミットがgit status. 他の 2 つの方法も役に立ちませんでした。

そのフォルダーの履歴が削除されたことが示されましたが、ローカルホストでそのレポのサイズを確認したところ、まだ約6MBでした。(フォルダーも削除しrefs/originalましたが、リポジトリのサイズの変化は見られませんでした)。

私が明確にしたいのは、コミット履歴(私が起こったと思う唯一のことです)だけでなく、ロールバックしたいと仮定してgitが保持しているファイルも削除する方法があるかどうかです。

これに対する解決策が提示され、私のローカルホストに適用されますが、その GitHub リポジトリに再現することはできません。そのリポジトリを複製し、最初のコミットにロールバックしてトリックを実行し、それをプッシュすることは可能ですか (または、それは git がそれらすべてのコミットの履歴がまだ残っていますか? - aka. 6MB)。

ここでの私の最終目標は、基本的に git からフォルダーの内容を削除する最善の方法を見つけて、ユーザーが 6MB 相当のものをダウンロードする必要がなく、モジュール フォルダーに触れたことのない他のコミットを保持できるようにすることです (これは非常に重要です)。それらのほとんどすべて) git の歴史の中で。

これどうやってするの?

4

9 に答える 9

56

上記の一般的な回答に加えて、 Windowsシステムに関するいくつかのメモを追加したいと思います。コマンド

git filter-branch --tree-filter 'rm -rf node_modules' --prune-empty HEAD
  • 修正なしで完璧に動作します!したがって、の代わりに、またはその他のものを使用しないでくださいRemove-Itemdelrm -rf

  • ファイルまたはディレクトリへのパスを指定する必要がある場合は、次のようにスラッシュを使用します./path/to/node_modules

于 2015-11-03T06:57:13.650 に答える
8

それらをテストした後、コメントにコマンドを追加するだけで(コピー&ペーストソリューション用)、完全なコピー&ペーストレシピ:

git filter-branch --tree-filter 'rm -rf node_modules' --prune-empty HEAD
echo node_modules/ >> .gitignore
git add .gitignore
git commit -m 'Removing node_modules from git history'
git gc
git push origin master --force

この後、.gitignore から「node_modules/」行を削除できます。

于 2015-01-22T18:12:34.480 に答える
0

コピペ用(ここから):

git filter-repo --invert-paths --path PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"
git push origin --force --all
于 2021-09-02T20:50:32.067 に答える