2

コーダーによるバイナリ ファイルのアナーキーな追加に直面し、問題のあるファイルを削除するだけでなく、ツリー内の履歴も削除して git リポジトリをスリム化する方法。

bfgを使用してみましたが、ミラー化されたベア リポジトリで動作するため、ワークフロー全体を取得するのが難しく、Web 上のさまざまな場所から回答を収集する必要がありました。

4

1 に答える 1

1

最終的にうまくいったのは、ミラーリングされたベアリポジトリと通常のリポジトリの間を行き来することです。長いように見えるかもしれませんが、大きな担当者から小さな担当者まで、すべてのステップが含まれており、実際には高速です (1,000 分のジョブ)。

最初に、すべての混乱を伴う最後のバージョンのローカル ミラー リポジトリを取得します (インターネット経由で時間がかかる場合があります。これは、潜在的に多くの時間がかかる可能性がある唯一のステップです)。

git clone --mirror http://myservice.org/myrepo

次に、バックアップ目的で結果をコピーします (冗談ではありません。最後に使用します)。

cp -r myrepo.git myrepo.git.bak

次に、クリーンアップできるように、ベア バージョンから通常のバージョンを作成します。

mkdir myrepo.small 
cd myrepo.small 
mkdir .git
cd .git
cp -r ../../myrepo.git/* .
cd ..
git config --local --bool core.bare false

そして、マスター ブランチでクリーンアップを行うと仮定します。

git checkout master

クリーンアップするには、次の方法で大きなレパートリーを見つけます。

du -sh *

そして、それらを削除します (バージョン管理されないようにしたい場合でも、後で元に戻します):

git rm bigThings

一部のファイルのみを保持し、それらを git 履歴から削除する場合は、使用できますgit rm --cached bigFileが、すべてを削除し、履歴をクリーンアップしてから元に戻す方が簡単であることがわかりました。

必要に応じて、少なくともクリーンアップが完了したら、次のようにします。

git commit -m "big clean up"

結果をミラー化されたリポジトリにプッシュすることもできますが、新しいリポジトリを (リポジトリの親フォルダーから) 作成する方が簡単であることがわかりました。

rm -rf myrepo.git
git clone --mirror myrepo.small 

最後に bfg をダウンロードし(Java がインストールされている必要があります)、ミラー化されたクローンで実行します。5M を超えるすべての履歴を削除したかったのですが、ダウンロードしたバージョンの bfg が にあった~/Downloads/bfg-1.12.5.jarので、以下を使用しました。

java -jar ~/Downloads/bfg-1.12.5.jar --strip-blobs-bigger-than 5M myrepo.git

クリーンアップを確認します(前後のサイズを確認して):

cd myrepo.small.git
du -sh 
git reflog expire --expire=now --all && git gc --prune=now --aggressive
du -sh 

軽く感じるはずです。この時点で私は見つけました:

git push ../myrepo

動作しないので、クリーンなミラーから再度作成しました:

rm -rf myrepo.small
mkdir myrepo 
cd myrepo 
mkdir .git
cd .git
cp -r ../../myrepo.small.git/* .
cd ..
git config --local --bool core.bare false
git checkout master

実際には、(bitbucket で) レポを削除し、空で再作成する方が簡単であることがわかりました。すべてが正しく設定されたら、.git/config と git push に適切な中央リポジトリを設定します

トラブルメーカーのアイテムをフォルダーに戻すために、最初にバックアップした通常のバージョンのリポジトリーでユニゾンを使用しました。

最初に通常バージョンのバックアップを作成します

mkdir myrepo.bak 
cd myrepo.bak 
mkdir .git
cd .git
cp ../../myrepo.git/* .
git config --local --bool core.bare false
git checkout master
cd ..

次に、2 つでユニゾンを実行します。

unison myrepo myrepo.bak

そして、私が必要としていたものを元に戻しました。すべての寄稿者に送信するために、filesenderまたはその他の USB スティックの代わりにその zipを送信すると、再び起動して実行されます。

于 2015-10-07T12:58:54.087 に答える