2

質問

ファイルの2行目が同時にa.txt変更されたためtrunk、ファイルでマージの競合が発生することが予想されました。branch/featurex

  1. マージの競合ではなく、ツリーの競合が発生するのはなぜですか?
  2. 競合を表示するにはどうすればよいですか? svn diff?
  3. この競合を解決するにはどうすればよいですか?

状況を再現する例

ツリーの競合を再現するには、 と を変更しtrunkbranches/featurexにマージtrunkしてみてくださいbranches/featurex

ブランチを作成します。

PS C:\> mkdir demo
PS C:\> cd demo
PS C:\demo> svnadmin create svnrepo
PS C:\demo> cd workspace
PS C:\demo\workspace> mkdir trunk
PS C:\demo\workspace> mkdir branches
PS C:\demo\workspace> mkdir tags
PS C:\demo\workspace> svn add trunk
PS C:\demo\workspace> svn add branches
PS C:\demo\workspace> svn add tags
PS C:\demo\workspace> svn ci -m "Create SVN default folders"
PS C:\demo\workspace> cd trunk
PS C:\demo\workspace\trunk> echo "trunk: line1" > a.txt
PS C:\demo\workspace\trunk> svn add .\a.txt
PS C:\demo\workspace\trunk> svn ci -m "1st commit on trunk"
PS C:\demo\workspace\trunk> svn copy . ..\branches\featurex
PS C:\demo\workspace\trunk> cd ..
PS C:\demo\workspace> cd .\branches
PS C:\demo\workspace\branches> svn ci -m "Create branch for feature x"
Adding         featurex
Adding  (bin)  featurex\a.txt

トランクで変更をコミットします。

PS C:\demo\workspace\trunk> echo "trunk: line2" >> .\a.txt
PS C:\demo\workspace\trunk> svn ci -m "2nd commit on trunk"

ブランチで変更をコミットします (マージの競合を作成するために同じ行で):

PS C:\demo\workspace\branches\featurex> svn up
PS C:\demo\workspace\branches\featurex> echo "branch: line2" >> .\a.txt
PS C:\demo\workspace\branches\featurex> svn ci -m "1st commit on branch"

トランクをブランチにマージします。

PS C:\demo\workspace\branches\featurex> svn up
PS C:\demo\workspace\branches\featurex> svn merge file:///c:/demo/svnrepo/trunk
--- Merging r2 through r5 into '.':
   C a.txt
--- Recording mergeinfo for merge of r2 through r5 into '.':
 U   .
Summary of conflicts:
  Tree conflicts: 1
PS C:\demo\workspace\branches\featurex>

予想外のツリー競合です。

のコンテンツにa.txtは、マージの競合があるマージは表示されません。次のコンテンツを含む「ブランチ バージョン」が表示されるだけです。

trunk: line1
branch: line2

バージョン

2012 年 12 月 12 日 21:11:09 にコンパイルされた Subversion バージョン 1.7.8 (r1419691)

4

1 に答える 1

0
PS C:\demo\workspace\trunk> svn copy . ..\branches\featurex
PS C:\demo\workspace\trunk> cd ..
PS C:\demo\workspace> cd .\branches
PS C:\demo\workspace\branches> svn ci -m "Create branch for feature x"

という事実によって証明されるように、ブランチを作成する正しい方法ではありません

Adding         featurex
Adding  (bin)  featurex\a.txt

それらがコピーであることは言及していません。コピーを作成するには、ソースがリポジトリ URL である必要があります (ターゲットも同様である必要があります)。以下を使用してブランチを作成してみてください。

PS C:\demo\workspace\trunk> svn copy -m "Create branch for feature x" "^/trunk" "^/branches/featurex"

(^作業コピー内にいる場合、 はリポジトリ ルートのエイリアスです) の後にsvn update. むしろsvn switch、3 つではなく 1 つのコミットで初期構造を作成する場合を除いて、複数のブランチをチェックアウトすることは想定されていません!

于 2014-11-26T11:10:50.263 に答える