3

うっかり 5GB 前後のファイルを Mercurial にチェックインしてしまいました。リポジトリのクローン作成中にビルド サーバーが失敗し始めました。そのため、Remove コマンドを使用して、チェックインしたファイルを元に戻しました。しかし、.hg/store/data にはまだこれらのファイルが含まれています。そして、そのサイズは5GBを超えています。インターネットで検索したところ、次のようないくつかの方法が見つかりました: hg convert. しかし、hg convert は新しいレポを作成していますが、これは私たちの場合は望ましくありません。また、ビルド サーバーのタイムアウト期間を延長することはできません。

.hg/store/data に保存せずに、悪いチェックインを完全に削除するにはどうすればよいでしょうか? または、どうすれば .hg/store/data のサイズを縮小できますか?

4

2 に答える 2

2

必要なことは次のとおりです。これらの変更セットを削除する必要があります。

リポジトリは Bitbucket でホストされているため、ファイルに直接アクセスすることはできないため、Web サイトが提供するものを使用する必要があります。

リポジトリ プロジェクトの設定の下に、変更セットを削除するためのセクションがあります。

これにより、不正な変更セットの上にコミットされた変更セットも削除されることに注意してください。これに対処します。

私はこれを強調します:

  1. 作る
  2. もちろん
  3. 君は
  4. もつ
  5. バックアップ!

手順は次のとおりです

重要:チームの開発者がローカルで保留中の何かを持っている場合 (変更セットがまだ bitbucket にプッシュされていないなど)、彼らbitbucket から悪い変更セットを複製した場合、さらに移植を行う必要がありますこれを試みる前に行われます。

  1. 適切なバックアップリポジトリのローカル クローンがあることを確認してください。これは最優先事項です。このプロセスで保持したい変更セットが失われても、私 (またはスタック オーバーフロー) は責任を負いません。特に、他の開発者が持っている可能性のあるプッシュされていない変更セットに関する上記の警告に注意してください。
  2. ローカル クローンでは、最初に、不正な変更セットの上にコミットされたすべての変更セットを、その直前の変更セットに移植します。

    すなわち。履歴が次のようになっている場合:

    1---2---3---BAD---5---6---7
    

    後でこの履歴が得られるように、3 の上に 5-7 を移植します。

    1---2---3---BAD---5---6---7
             \
              +--5---6---7
    
  3. 次に、次のコマンドを使用して、不正な変更セット (およびそれに続くすべてのもの) を削除します。

    hg strip BAD
    
    `BAD` here is the number or hash of the bad changeset
    
  4. ローカルですべてが正常であることを確認してから、bitbucket.org に進みます。
  5. リポジトリを見つけて、[設定] に移動し、ストリップの変更セット セクションを見つけます。
  6. 不正な変更セットのハッシュを入力し、bitbucket に削除を依頼します
  7. その後、ローカル クローンからプッシュして、移植した変更セットを bitbucket に戻します。
  8. 重要: ここで、bitbucket から既にクローンを作成し、ローカル クローンを破棄して再クローンする必要がある悪い変更セットを取得したすべての人を取得する必要があります。これにより、不正な変更セットなしで、リポジトリの新しいコピーが作成されます。
于 2016-08-29T06:35:38.570 に答える
1

-rオプションをhg clone使用すると、特定のリビジョンの後にチェンジセットなしでリポジトリを作成できます。

したがって、次のことができます(LAST_GOOD_CHANGESET間違ったコミットの直前の変更セットであると仮定します):

hg clone -r LAST_GOOD_CHANGESET repo repo.1
mv repo repo.bak
mv repo.1 repo

ただし、これは間違ったコミットの後にすべてのコミットをドロップすることに注意してください。そのため、重要なものをリプレイする必要があります (つまり、間違いを修正するために行われたものを除外します)。

さらに、ブランチがある場合は、それらを-rへの追加の引数としてリストする必要がありますhg clone。そうしないと、クリーンアップされたリポジトリからも削除されます。

于 2016-08-29T05:49:13.610 に答える