我在使用Subversion时遇到以下问题:
我目前正在项目的主干上,并计划进行一些重构(包括重命名文件或将文件移动到其他目录)。
同时,其他人正在分支上的同一项目上工作。
在某些时候,我想将对分支所做的更改合并回主干。这包括对在分支上已重命名的文件(在分支上)所做的更改。
我做了一些测试,看来要么Subversion无法跟随这些更改,要么我缺少某种东西(这是我希望的)。我使用以下脚本对此进行了测试(应该在bash中工作,假定在“http://myserver/svn/sandbox”上有一个svn存储库):
svn co http://myserver/svn/sandbox
cd sandbox/
mkdir -p MyProject/trunk MyProject/branches MyProject/tags
cat - <<EOF >MyProject/trunk/FileOne.txt
Test
1
2
EOF
svn add MyProject
svn commit -m "init"
# create a branch
svn copy http://myserver/svn/sandbox/MyProject/trunk http://myserver/svn/sandbox/MyProject/branches/Branch_1 svn copy http://myserver/svn/sandbox/MyProject/trunk http://myserver/svn/sandbox/MyProject/branches/Branch_1
# rename the file
svn move MyProject/trunk/FileOne.txt MyProject/trunk/FileTwo.txt
svn commit -m "renamed file"
svn update
# change the content of FileOne in branch
cat - <<EOF >MyProject/branches/Branch_1/FileOne.txt
Test
2
3
EOF
svn commit -m "changed branch"
# I now try to merge the changes in FileOne back to FileTwo
cd MyProject/trunk/
svn merge -r1:HEAD http://myserver/svn/sandbox/MyProject/branches/Branch_1
# but this yields the following message:
# Skipped missing target: 'FileOne.txt'
任何帮助是极大的赞赏。
编辑:
也许mikegrb建议的过程可以通过首先通过干线上的svn log命令生成重命名文件的映射(旧->新)来实现某种程度的自动化:
svn log -v
------------------------------------------------------------------------
r33 | sme | 2008-10-09 15:17:54 +0200 (Do, 09 Okt 2008) | 1 line
Changed paths:
D /MyProject/trunk/FileOne.txt
A /MyProject/trunk/FileTwo.txt (from /MyProject/trunk/FileOne.txt:31)
resulting map: {FileOne.txt => FileTwo.txt}
现在,使用此映射更改分支上生成的补丁文件中的文件名。
原版的:
Index: FileOne.txt
===================================================================
--- FileOne.txt (.../trunk) (revision 31)
+++ FileOne.txt (.../branches/Branch_1) (revision 34)
@@ -1,3 +1,3 @@
Test
-1
2
+3
改性:
Index: FileTwo.txt
===================================================================
--- FileTwo.txt (.../trunk) (revision 31)
+++ FileTwo.txt (.../branches/Branch_1) (revision 34)
@@ -1,3 +1,3 @@
Test
-1
2
+3
只是一个想法,还没有完成。
最佳答案
我认为这是现有的Subversion bug-但是请不要屏住呼吸,它从2002年开始开放。
关于svn - Subversion不会将更改合并到重命名的文件中吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/187454/