2009-12-08 13 views
6

大きなバイナリファイルがたくさんあるリポジトリが1つあります。コミットの最後のn個だけを保持するようにgitを設定することは可能でしょうか?私はこのリポジトリの履歴にファイルの最後の5つのコピーを保持したいだけですか?しかし、私は5つのコミットごとにこれを手動で実行したくないのですか?gitを使ってヒストリに特定のコミット数を維持する

+1

私はそれを疑うが、私はその考えが好きだ。 –

答えて

3

"git rebase --interactive"を使用してください。最初の5つのコミットを「選択」とし、残りを「スカッシュ」とマークします。

+0

他のreposから引き出されたときにも同期するでしょうか? –

+0

複製されたディレクトリは、履歴を変更するたびに完全な変更履歴を取得する必要があります。そのため、複製されたリポジトリからの 'git fetch'には時間がかかることがあります。 – Bombe

2

Kindasorta。 git clone --depth Nはリポジトリの「浅いクローン」を実行させます。しかし、これをプッシュ/クローン/フェッチすることはできませんので、開発者としてはあまり役に立ちません。

+0

私はそれについて知っていますが、私はまた、クローンだけでなくレポの5つ以上のコピーを保持したくありません。 –

+0

これは不可能です。@ダスティンが示唆しているように、リポジトリを書き直す必要があります。これらの巨大なファイルをどのように保存するか再評価することをお勧めします。たぶんGitは最善の解決策ではありません。 –

4

唯一の方法は、リポジトリを定期的に書き換えることです。

コミットには、コミットメタデータのハッシュ、コミット情報、コミットの親とコミットしているツリーが含まれています。現在に影響を与えることなく過去に何かを変更することはできません。

3

Dustinが述べたように、それを行う唯一の方法は、定期的にリポジトリを書き換えることです。 Gitは間違いなくこのための "組み込み"のサポートを持っていないし、すぐに(この機能を排除するもののようなものの基本的な設計)そのようなサポートを持つ可能性が高いです。つまり、それをやりたいのであれば、手動で行う必要があります。

this questionの回答は、git filter-branchを使用してこれを実行する方法の例を示しています。

関連する問題