回答:
あなたが何を望んでいるかはわかりません。まず第一に、もちろん、ディレクトリをコミット/プッシュするたびに、追加のコミットをそれぞれ格納する必要があるため、ディレクトリは少し大きくなります。
ただし、おそらくgit gc
「不要なファイルをクリーンアップしてローカルリポジトリを最適化する」(マニュアルページ)が望ましいでしょう。
おそらく関連する別のコマンドはgit clean
、追跡されていないファイルをツリーから削除することです(マニュアルページ)。
WARNING
@Kalleで上に書いたように、コマンドが削除されますEVERY >人跡未踏<ファイルとディレクトリのを YOUR GIT ROOT、WITHIN、ないだけ「.gitignoreにリストされたファイル」。にリストされているかどうかに関係なく、Gitによって追跡されていないものは.gitignore
すべて消去されます。git clean -dfX
(のケースに注意X
)は、に適用可能なルールがあるアイテムのみを削除します.gitignore
。この警告に注意してください:の 代わりにインタラクティブモードで実行することなく、または少なくとも最初にドライランを実行してから、次に。を使用して実行しgit clean
ないでください。-i
-f
-n
-f
実行:
git remote prune origin
ですでに削除されorigin
ているが、でローカルに使用可能な古い追跡ブランチをすべて削除しremotes/origin
ます。
git gc --auto
「Gの arbageのCの ollection」 -ハウスキーピング・タスク(圧縮リビジョン除去するが緩ん/アクセスできないオブジェクト)を実行します。--auto
フラグは、最初にすべての作業が必要かどうかを判断し、ない場合は何もせずに終了します。
あなたのGitのレポが得る一つのシナリオ真剣それぞれに大きなコミットはあなたが定期的に発生するというバイナリファイルをコミットしているものです。それらのストレージは、テキストファイルほど効率的ではありません。
もう1つは、複数のサブリポジトリ(サブモジュールとして管理)ではなく、1つのリポジトリ(gitの制限)内に膨大な数のファイルがある場合です。
git spaceに関するこの記事で、AlBlueは次のように述べています。
Git(およびHg、およびその他のDVCS)は、(大規模な)バイナリがチェックインされてから削除されるという問題に悩まされていることに注意してください。 。
gitリポジトリに大きなバイナリが保存されている場合は、次のことを検討してください。
git filter-branch
(警告:あなたはすでにあなたのレポをプッシュしている場合、これは悪い歴史を、書き換えし、他はそれから引っ張ってきた場合)私は「で説明したようにGit(数とサイズ)内のファイルの制限は何ですか?」、(この答えの後5年間、2015)、より最近のGitのLFSのGitHubからは、それらを格納することで、これらの大きなファイルを(管理する方法である外 Gitリポジトリ)。
はいはい、git gc
当然、解決策です、
そしてローカル-ローカルリポジトリを削除して再度複製することができます、
その巨大なgitと外部が処理するのを待つ秒数は、数分に渡って収集され、数時間の非効率的な時間が費やされます。
ファイルの最新バージョンのみを含め、新しい(完全に、ブランチだけでなく)リポジトリを最初から作成します。当然、すべての履歴が失われます。
しかし、コードの世界では感傷的になる時間ではないので、5年間のコード全体をコミットまたは差分ごとにドラッグしても意味がありません。懐かしくなれば、古いgitと外部をどこかに保存できます:]
しかし、ある時点であなたは本当にそれに沿って動く必要があります:]
あなたのチームはあなたに感謝します!
このコマンドを実行すると非常に危険ですが、すべてのgitリカバリ/バックアップファイルを消去してリポジトリを縮小します。
git reflog expire --expire=now --all && git gc --prune=now --aggressive
gitが不良コマンドからリポジトリを復元するために使用するすべてのファイルが消去されます。たとえば、を実行した場合git reset --hard
、通常は失われたファイルを復元できます。しかしgit reset --hard
、git reflog expire...
コマンドの前に行うと、すべてが失われます。さて、あなたの唯一の望みは、ファイルシステムを分析するツールを使用して、上書きされていない場合は、消去されたファイルを回復することです。
git clean -d -f -i
それを行うための最良の方法です。
これは、より制御された方法でクリーニングするのに役立ちます。
-i
インタラクティブの略です。
git clean
は、ディレクトリをクリーンアップするほどリポジトリをクリーンアップするためではないことを指摘しておきたいと思います。盲目的にコピー/貼り付けを行うユーザーには注意してください。これにより、ローカルで実際に必要になる可能性のある追跡されていないファイル/ディレクトリが削除されます。
それが縮小するかどうかはわかりませんが、を実行した後git clean
、私も頻繁に縮小し、git repack -ad
パックファイルの数を減らします。
git gc
プロセスの一部であるため、個別に実行する必要はありません