通过命令行,我通常这样做:
cp -rRp /path/to/a\_folder/. /path/to/another\_folder
这会将 a_folder 下的内容复制到 another_folder 。在SVN我需要做同样的事情,但无法搞清楚。我总是最终得到这个:
/path/to/another\_folder/a\_folder
即使我尝试这样做,SVN也会抛出:
svn copy file:///path/to/a\_folder/* file:///path/to/another\_folder
它说它不存在。
修改
这可能会有所帮助。我的项目的目录结构如下所示:
my_project
/branches
/tags
/trunk
/vendor
/1.1
我需要将供应商下的1.1内容放入主干,而不是实际复制1.1文件夹。
答案 0 :(得分:20)
正如您所发现的那样,复制到已存在的目标目录将无效:
svn cp svn://my_project/vendor/1.1 svn://my_project/trunk
因为trunk已经存在,所以你最终得到:
svn://my_project/trunk/1.1
使用 merge 有一个不幸的特性,就是在引入合并跟踪的1.5之前的subversion中不保留vendor 1.1标记的历史记录。你可能不在乎。在这种情况下,合并将是正确的解决方案:
svn co svn://my_project/trunk trunk-wc svn merge svn://my_project/trunk svn://my_project/vendor/1.1 trunk-wc
阅读此合并的最佳方法是:首先确定使trunk
与vendor/1.1
相同所需的更改,然后将这些更改应用于给定的工作副本(在这种情况下也适用于主干) )。
我应该指出,这次合并将有效地吹走之前在行李箱中的任何东西。因此,如果您已经在主干上进行了本地(非供应商)修改,那么您只需要应用1.1和之前供应商代码之间的更改:
svn co svn://my_project/trunk trunk-wc svn merge svn://my_project/vendor/1.0 svn://my_prjoect/vendor/1.1 trunk-wc
如果 trunk存在但是为空,你有两个选择:替换trunk,或写一个小shell循环:
更换主干如下所示:
svn rm svn://my_project/trunk svn cp svn://my_project/vendor/1.1 svn://my_project/trunk
利用shell (bash):
svn co svn://my_project/trunk trunk svn co svn://my_project/vendor/1.1 1.1 ( cd 1.1 for x in * ; do svn cp $x ../trunk done ) svn ci trunk
答案 1 :(得分:9)
你考虑过使用svn merge吗?
鉴于这样的回购:
trunk/a_folder/foo
trunk/a_folder/bar
trunk/new_folder/baz
使用这些命令合并foo和bar目录:
cd trunk/new_folder
svn merge -r1:HEAD http://svn/repo/trunk/a_folder .
答案 2 :(得分:6)
此链接解释了一种解决方法。
http://svn.haxx.se/users/archive-2004-12/1537.shtml
基本上它说的是如果目标文件夹不存在于仓库中,您将获得目标文件夹中源文件夹的内容。
见下面的例子。您的仓库中不存在07-03-2012文件夹。执行以下命令后,您将在07-03-2012获取HEAD文件夹的内容。
svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test"
答案 3 :(得分:3)
我认为你想要的是主干的内容最终会出现在/tags/version-1.0/
文件夹中而没有额外的/trunk
文件夹。即这很糟糕:/tags/version-1.0/trunk/stuff
。这很好:/tags/version-1.0/stuff
。
为了做到这一点,我做了两个步骤:
svn copy http://localhost/MyProject/trunk http://localhost/MyProject/tags/
# now I have /MyProject/tags/trunk
svn rename http://localhost/MyProject/tags/trunk http://localhost/MyProject/tags/version-1.0
答案 4 :(得分:1)
你非常非常接近:
svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder
从第一个参数中删除/*
。