通过命令行,我通常这样做:
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文件夹.
正如您已经发现的那样,复制到已存在的目标目录将不起作用:
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
你考虑过使用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 .
此链接说明了一种解决方法.
http://svn.haxx.se/users/archive-2004-12/1537.shtml
基本上它说的是如果目标文件夹不存在于仓库中,您将获得目标文件夹中源文件夹的内容.
见下面的例子.您的仓库中不存在07-03-2012文件夹.执行以下命令后,您将在07-03-2012获取HEAD文件夹的内容.
svn cp/HEAD/ /branches/07-03-2012 -m "test"