8

Mercurial では、リビジョン番号はローカル クローン固有のものであり、変更セット ID よりも使いやすい方法で特定の変更セットを指す機能として提供されます。

ただし、タイムライン グラフを表示する場合、TortoiseHG はリビジョン番号順に並べます。誰かがそれほど頻繁にコミットをプッシュしない場合、隣接するリビジョン番号で一度にすべてのコミットを取得し、グラフのポイント全体を台無しにします。

ここに画像の説明を入力

このグラフはより洞察に富んでいます: 開発には 2 つのラインがあり、2 人の作成者がいて、一方が他方の作業をマージしています。

ここに画像の説明を入力

したがって、リビジョン番号を手動で並べ替えることができます (変更セットのトポロジー順序が新しい番号と互換性がある限り?

ありがとう。

4

5 に答える 5

6

私は同様のユースケースを持っています:私は一度に異なるブランチからたくさんのチェンジセットをプッシュしましたが、それらは日付順にソートされていなかったので、この質問に来ました. 現在、実際にはそれほど年をとっていない少数の親とのマージがいくつかあります。それらを見るためにログを上下にスクロールするのは面倒です。@ Ry4an の回答で提案されているアプローチに従いました。必要な変更セットの順序を予測 (つまり、計算) できれば、非常に簡単です。

ワークフローがブランチ ヘッドのみをマージする場合は、リビジョン セットを日付で並べ替えることで目的のリビジョン順序を取得できます。これは、次のコマンドで実行できます。

hg log -r 'sort(0:tip, date)' --template '{rev}\n'

次に、リポジトリを複製し、お気に入りのスクリプト言語でループを使用して、リビジョンを時系列で 1 つずつ取得できます。リポジトリを最初から初期化するのではなく、最終的に次のようにしました。

hg clone -r 0 messy-repo sorted-repo
cd sorted-repo
for REV in `hg log -R ../messy-repo -r 'sort(1:tip, date)' --template '{rev}\n'`
do 
    hg pull ../messy-repo -r $REV
done

(他の誰かがそうする前に :-)) これにより、デルタの計算方法が原因で、リポジトリのストレージ サイズが増加することに注意してください。私は気にしない。

于 2013-04-15T10:11:28.663 に答える
4

他の人が言っているように、それは可能ですが、クローン (およびクローンのすべてのクローン) に対してローカルであるため、おそらく作業する価値はありません。最初にすべてを削除せずにリモートリポジトリにプッシュできるものではありません。たとえそうしても、そのリモートリポジトリからローカルにクローンを持っている人は、プルしたときに「変更なし」と表示されます。

とはいえ、試してみたい場合は、一連のhg pull -r REVコマンドを使用して新しいクローンを作成するだけです。このようなもの:

hg init my_reordered_clone
cd my_reordered_clone
hg pull -r d84b1 ../un_reordered_clone
hg pull -r 6d269 ../un_reordered_clone
hg pull -r bb9e4 ../un_reordered_clone

美的な目的でそれを行うには明らかに作業が多すぎますが、そこにある概念は、プルする-rと変更セットとそのすべての先祖が取得されるというものです。 、その開発ラインから追加のチェンジセットのみをプルします。

于 2012-09-17T13:06:17.840 に答える
1

リポジトリの順序を変更することができます (それが実行することですcontrib/shrink-revlog.py)。しかし、この場合、やり過ぎで複雑に思えます。

これは主に表示上の問題であるため、必要な並べ替えを実装するように THG に依頼する必要があります。確かに、上のグラフで何が混乱しているのかわかりません。

于 2012-09-17T10:07:54.120 に答える
0

@alexis と @Ry4an のおかげです

日付順に新しいクローンを作成するこの回避策は知っていますが、大規模なリポジトリの場合は遅くなる可能性があります。それはあなたが苦労する価値があると考えるかどうかにかかっています。

今日、私は Windows PC に引っ張っていましたが、これが気になったので、すぐに自動化したいと思いました。したがって、Windows コマンド プロンプトの書き直しは次のとおりです。

hg clone -r 0 messy-repo sorted-repo
cd sorted-repo
for /f "usebackq tokens=*" %r in (`hg log -R ../messy-repo -r "sort(1:tip, date)" --template "{rev}\n"`) do @echo %r && @hg pull ../messy-repo -r %r

注意: これがバッチ スクリプト ファイル内にある場合は、パーセント記号を 2 倍にする必要があります。それ以外の場合は、コマンド プロンプトで直接入力する場合は 1 パーセントです。

PD: また、Windows プロンプトのバッククォートについては Michael Burr の功績によるものです: Windows サブコマンドの評価

于 2016-06-09T19:39:59.050 に答える