6

hg graftあるブランチから別のブランチにチェンジセットをコピーするために使用したいと思います。

ただし、チェンジセットで変更されたファイルはhg rename、ソースブランチで(移植するチェンジセットの前に)名前が変更されています。

私が試してみると、次のようになります。

scanning for duplicate grafts
grafting revision 3
  searching for copies back to rev 2
  unmatched files in local:
   f1.txt
resolving manifests
 overwrite: False, partial: False
 ancestor: c06936303423, local: cfeaa3003c57+, remote: e3f2a201d1e2
remote changed f1a.txt which local deleted
use (c)hanged version or leave (d)eleted? c

(c)も(d)も正しい選択肢ではないようです。

ファイルf1a.txtは、ソースブランチのf1.txtから名前が変更されました。f1a.txtは、ターゲットブランチにも存在しませんでした。

これは可能ですか?

4

3 に答える 3

6

これは素晴らしい質問です。不可能のようです。私はあなたのシナリオを再生し、移植リベースも試みました-同じ効果で。

これが機能しない基本的な理由は、グラフトが1つのリビジョンの変更のみを明示的に選択するためです。つまり、過去の変更(ファイルの名前変更を含む)は明示的に考慮されません(更新:バグまたは機能の欠落の可能性もあります。@を参照してください)。ソウルマンの答え)。

あなたは求めていませんでしたが、これが回避策です..

  1. 移植するチェンジセットのパッチを入手します。

    $ hg export --git -r <rev-to-graft> > my.patch
    
  2. このパッチでは、に置き換えf1a.txtf1.txt、次のようにします。

    ...
    diff --git a/f1.txt b/f1.txt
    --- a/f1.txt
    +++ b/f1.txt
    @@ -1,1 +1,1 @@
    ...
    

    Sedはここであなたの友達です:sed -i my.patch -e "s,\([ab]\)/f1a\.txt,\1/f1.txt,g"

  3. 編集したパッチをターゲットリビジョンにインポートします。

    $ hg up <target-rev>
    $ hg import my.patch
    
于 2012-10-08T18:47:21.543 に答える
4

これは単にバグであり、修正されることを願っています。チケットがあります:ファイルが祖先リビジョンで移動された場合、グラフトは失敗します

于 2014-02-26T13:04:27.677 に答える
1

名前の変更は、削除+追加+古いファイルの履歴を新しいファイルの履歴として扱うように指示するメモです。移植を行う場合(つまり、マージではなくリレーションを作成せずに同じ変更を複製することによって新しい変更セットを作成する場合)、変更セットの変更を何らかの方法で組み込む必要があります。この場合、「追加」操作のみを移植するか、ファイルを追加しない(削除したままにする)ことを決定できます。申し訳ありませんが、この場合、他のブランチにそのファイルがない場合は意味がないため、名前の変更を移植することは基本的に不可能です。

申し訳ありませんが、あなたの状況を正しく理解できなかった場合は、例を挙げてください。(ダミーリポジトリを設定するコマンドはほとんどありません。これにより、ケースが再現されます)。

于 2012-10-08T18:02:33.137 に答える