0

2 つのブランチに 1 つのテキスト ファイルがあるとします。

//depot/work/branch1/file.txt
//depot/work/branch2/file.txt

ここには、両方のブランチが依存する中央ソース ファイルもあります。

//depot/work/ImportantFile.txt

ImportantFile.txt と branch1/file.txt に対してローカル編集を行いますが、それらの編集を branch2/file.txt にも複製したいと考えています。私の知る限り、選択肢は 2 つしかなく、どちらも理想的ではありません。

  1. 両方のファイルで同じ編集を手動で行い、両方の変更を 1 つの変更リストで送信します。これに関する問題は、これらのファイルがまだ 100% 統合されていることを P4 履歴に認識させたいのですが、履歴はそれらが個別に編集されたことを示すことです。
  2. branch1/file.txt のみを編集し、このファイルと ImportantFile.txt を 1 つのチェンジリストにサブミットしてから、すぐに branch2/file.txt への変更を 2 番目のチェンジリストに統合します。ここでの問題は、branch2/file.txt が必要な変更を取得するまで、ビルドを 1、2 分中断したことです。

ファイルを編集し、それらの編集を最初のファイルに送信する前に、それらの編集を別のファイルに直接統合するにはどうすればよいですか?

4

1 に答える 1

1

まず第一に、あなたはすでにこれを知っているかもしれません(そして、あなたにはどうしようもない理由でそれと和解しなければなりませんでした)しかし:

ImportantFile.txt は、分岐構造の外にあるべきではありません。 バージョン管理されたファイルがそれに依存している場合は、それ自体をバージョン管理する必要があります。つまり、ブランチはバージョン管理スキームの一部であるため、各ブランチに独立して存在する必要があります。あるいは、file.txt常にすべてのブランチで同一であることが必要な場合は、ブランチするべきではありません。分岐が許可されていないものをブランチするのはなぜですか? しかし、すべてを分岐するだけの方が良い解決策だと思います。

次に回避策です。(上記のように根本原因を修正できない場合は、おそらく将来この種のことがたくさんあります。)

p4 copy //depot/work/ImportantFile.txt //depot/work/NotABranch/ImportantFile.txt
p4 copy //depot/work/branch1/file.txt //depot/work/NotABranch/file.txt
p4 submit -d "Not a branch!  (wink)"

で編集し//depot/work/NotABranchて送信します。前述のように、これはブランチではないため、何も壊れていません。したがって、すべてのブランチをロックステップで移動させるポリシーから除外されます。これで、次のことができます。

p4 integ //depot/work/NotABranch/ImportantFile.txt //depot/work/ImportantFile.txt
p4 integ //depot/work/NotABranch/file.txt //depot/work/branch1/file.txt
p4 integ //depot/work/NotABranch/file.txt //depot/work/branch2/file.txt
p4 resolve
p4 submit

マージ履歴は、 の両方のブランチがfile.txt単一の共通ソースからの純粋なマージであることを示しているため、2 つの間の将来の統合では、それらを再マージする必要がないことを認識する必要があります。

于 2021-02-12T21:02:02.220 に答える