2013-03-14 22 views
5

も参照してくださいthis questionを参照してください。Mercurial repoからlargefilesを削除する方法

私がやっていることを知らずに、largefiles拡張を有効にし、ファイルをコミットしてキルンにプッシュしました。今私は自分のやり方の誤りを知っています。私はこの変化を永久に取り戻す必要があります。

私は、被験者のSOからの指針に従った。ローカルで大きなファイルを削除できますが、これはキルンのリモートリポジトリには影響しません。私はKilnサーバー上のKilnRepositoriesでrepoを開こうとしましたが、largefilesフォルダー(必要なファイルから 'largefiles'を削除するだけでなく)をヌックにしていましたが、数回押すと、フォルダーと必要な行が戻ってきました。

これを永続化する方法はありますか? (読み取り専用の設定はどちらも機能しません)。

答えて

10

注:これは少なくともTortoiseHg 2.4(Mercurial 2.2.1) - > 2.7.1(Mercurial 2.5.2)に該当します。私は将来のバージョンや古いバージョンについては話しません。

利用可能なさまざまな拡張機能を調べた後、ファイルがlargefiles拡張子を使ってコミットされると、リポジトリ 'back'を変換することは一般的に不可能であると私は結論づけました。

最初に、レポジスで大きなファイルを再生しない理由の2つの理由:onetwo

ファイルが大容量ファイルとしてコミットされたら、ファイルを削除するには、 '.hglf'パスへのすべての参照をリポジトリから削除する必要があります。 A backoutはコミットの内容が '.hglf'フォルダを含むファイルのパスを参照するため、十分ではありません。水銀がこれを見ると、 'largefiles'を/hg/requiresファイルに書き戻し、もう一度大きなファイルをロックします。同様に、hgは忘れて削除します。

オプション1:レポが孤立している場合(ローカルとリモートのすべての場所でエンドツーエンドの制御があり、他の誰もこのレポから分岐していない場合)は、 mq拡張子とstripチェンジセット。あなたが間違いを犯した場合、これはおそらく実行可能なオプションです。

オプション2:案件番号phase(または大量のコミットを強制的に元に戻すことができる)に違反チェンジセット(ラージファイルコミット)が存在する場合、hqを使用してコミットをmqおよびunapply the changesetにインポートすることができますqpop。これは、抽出されたチェンジセットからフォワード履歴を保持するため、ストリッピングよりも優れています。現実には、これはしばしば可能ではありません。あなたが既にマージを実行し、公的段階の支店からプッシュ/プルされている可能性が高いからです。しかし、すぐに捕まえれば、mqはレポを回収する方法を提供することができます。

オプション3:問題のチェンジセットが唯一の場所(元のコミット)で参照され、誰もチェンジセットをバックアウト/削除/忘れていない(複数の参照を作成している)人がいない場合、 hg rebaseを使用して、犯行後の最初の子チェンジセットを犯行の親チェンジセットと折り畳む。そうすることで、攻撃的なチェンジセットは新しいヘッドになり、その後、mqストリップで取り除くことができます。これは、mqへのインポートが失敗した場合に有効です。

オプション4:transplantまたはgraftを使用して、違反していないすべての変更セットをパッチとしてエクスポートします(正しい順序でエクスポートするように注意してください)。その後hgを最初のsaneに更新します違反の前にチェンジセットを作成し、すべてのフォワードチェンジセットのレポを取り除き、エクスポートされたパッチを順番に再適用します。

オプション5(最終的に何をしたか) clone_to_keep、clone_to_destroyという2つのコピーを持つように、repoをローカルでクローンします。 clone_to_keepでは、攻撃の前に最初の正常なチェンジセットに更新します。 Mqはすべてのフォワードチェンジセットを削除します。複数のヘッドが残っている場合は、元に戻します。 clone_to_destroyで、ヒントを更新します。 Windowsエクスプローラで、/ clone_to_keepフォルダに.hgと.hglfフォルダを除いて/clone_to_destroyのすべてをコピーします。 Tortoiseの内部では、clone_to_keepのすべての変更を単一のチェンジセットとしてコミットします。 clone_to_destroyの1つのリモートインスタンスを、歴史的な目的のために読み取り専用状態に保ち、他のオブジェクトをすべて破棄します。

オプション6:核オプション。他のすべてが失敗し、レポを外部システム(バグトラッキング、CIなど)との統合に気にしない場合は、前述のSO postに従い、hg convert拡張子を使用できます。これにより、感染したレポの新しいコピーが作成され、問題のチェンジセットへのすべての参照が削除されます。ただし、レポ全体で各チェンジセットを繰り返し、新しいチェンジセットとして新しいリポジトリにコミットすることでそうすることができます。これにより、既存のブランチリポジトリと互換性のないレポが作成されます。チェンジセットIDのどれも整列しません。分岐リポジトリがない場合を除き、このオプションはおそらく動作しません。

いずれの場合でも、修正を行い、別個のリポジトリインスタンスごとに手動で再適用する必要があります(repoフォルダをコピーし、任意の方法で複製してください)。

最終的に、largefilesを有効にすることは非常に高価な間違いです。修正するには時間がかかり、最終的には破壊的です。私は大ファイルがあなたのreposにそれを作ることを許可することをこれまで許可していません。

+0

参照http://stackoverflow.com/a/14453480/492 –

関連する問題