基本的に、私が試したいのは、実験リポジトリのブランチからメインラインのクローンに hg リビジョンをプルすることです。しかし、サーバー側のメインライン リポジトリに直接プッシュできるように、ブランチ名を破棄したいと考えています。簡単な例を挙げるのがおそらく最善です:
hg init hg_mainline
pushd hg_mainline
touch foo
hg add foo
hg commit -m 'foo'
popd
hg clone hg_mainline hg_experimental
pushd hg_experimental
hg branch bar_branch
touch bar
hg add bar
hg commit -m 'bar'
popd
pushd hg_mainline
hg pull ../hg_experimental
hg log
ご覧のとおり、メインラインには「branch: bar_branch」を含むリビジョンが含まれています。このリビジョンにブランチを持たせたくありません (つまり、デフォルトにする必要があります)。
これがrebase、移植、または別のツールで履歴を書き換える必要がある場合は問題ありません。私はこれらの両方を試しましたが、うまくいきませんでした。最新のリビジョン ハッシュは、2 つのリポジトリ間で異なる場合があります。
したがって、hg_mainline の最上位リビジョンを次のようにしたいと考えています。
changeset: 1:xxxxxxxxxxxx
tag: tip
user: ...
date: ...
summary: ...
名前付きブランチなし。
繰り返しますが、ハッシュが hg_experimental から保存されていなくても問題ありません。
現在、Ubuntu PPA から hg 1.6.2+55-18e1e7520b67 を使用しています。
編集:
1.3.1も使用しました。両方で以下をテストしましたが、ここでの結果は同じです。
grep -v
移植で動作しましたが、クラッジでのみ動作しました。
hg transplant -s ../hg_experimental 1 --filter "grep -v '^branch:'"
と:
hg transplant -s ../hg_experimental 1
hg export は、適切な grep の有無にかかわらず機能しませんでした。
変更セットのパッチは次のようになります。
# HG changeset patch
# User Matthew Flaschen <EMAIL>
# Date 1282942390 14400
# Branch bar_branch
# Node ID b8e36efea72642f0a0194301489d5c48f619a921
# Parent 85d9b9773d4ec09676dfcc4af89c142c46279444
bar
私は実験からエクスポートしました:
hg export 1 -o '/tmp/%b_%H_%R'
そして、メインラインにインポートしようとしました:
hg import /tmp/hg_experimental_b8e36efea72642f0a0194301489d5c48f619a921_1
次のエラーで失敗します。
abort: no diffs found
編集2:
前述のように、エクスポート メソッドは、ファイルが空だったという理由だけで失敗しました。--git
空でないファイルでも正しく動作します。