log -k を使用すると、2 つの変更セットが表示されますが、--follow または -f を追加すると、そのうちの 1 つが失われます。なぜでしょうか?
( --follow は、返されたセット、つまり、名前が現在の名前に変更される前に選択されたファイルを変更したものにのみ変更セットを追加できると考えていました。)
log -k を使用すると、2 つの変更セットが表示されますが、--follow または -f を追加すると、そのうちの 1 つが失われます。なぜでしょうか?
( --follow は、返されたセット、つまり、名前が現在の名前に変更される前に選択されたファイルを変更したものにのみ変更セットを追加できると考えていました。)
この-f
オプションは、開始リビジョンの祖先/子孫を通じてのみ履歴をたどります。
私の推測では、-k
(キーワード検索) はレポ内の 2 つのブランチから結果を返しています。したがって、-f
/ を追加--follow
することで、開始リビジョンに直接関連するチェンジセットに結果を制限することになります。
ここに戻ってきたのは、 --follow が保持するものとドロップするものを (ほとんど) 取得したからです。エドワードは基本的には正しかったのですが、彼の答えをテストした後、「リビジョンを開始する」という意味を誤解していたので混乱しました。私が期待したものに適合します。
シンプルなブランチを持つリポジトリは次のとおりです。
% hg glog --template {rev}
@ 2
|
| o 1
|/
o 0
% hg glog --template {rev} -r '0+1+2'
@ 2
|
| o 1
|/
o 0
% hg glog --template {rev} -r '1+2+0'
@ 2
|
| o 1
|/
o 0
を使用した次の例は、--follow
関連する「開始リビジョン」が--follow
仕様の最初のものであり (リポジトリで最も古いものなどではない)、その後の順序でさえ重要であることを示しています。
共有先祖から始めると、すべてが含まれます。
% hg glog --template {rev} -r '0+1+2' --follow
@ 2
|
| o 1
|/
o 0
そうしないと、結果は後の順序に依存することになります。グラフ全体をトラバースできるように見えますが、一方向のみです (先祖または子孫への移動ですが、同じ呼び出しで両方への移動はできません)。
% hg glog --template {rev} -r '1+2+0' --follow
o 1
|
% hg glog --template {rev} -r '1+0+2' --follow
o 1
|
o 0
また、手動で注文する場合は問題ではありません。基本的なプリミティブを使用すると、さまざまな順序でリビジョンが作成され、動作が混乱する可能性があります。
% hg log --template {rev} -r 'all()'
012
% hg log --template {rev} -r 'all()' --follow
012
% hg log --template {rev} -r 'reverse(all())'
210
% hg log --template {rev} -r 'reverse(all())' --follow
20
私はまだそれが何をするかについて明確で簡潔な仕様を念頭に置いていません.フォローするのに「安全な」revsetを生成するのは難しいと思います. (この理由で変更セットが結果から削除された場合、hg は警告メッセージを表示できますか?) したがって、--follow に依存するトリッキーな処理を行うときは、--follow も使用せずに実行し、そうでないことを確認するために比較します。何かを失う。