23

通过命令行,我通常这样做:

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

我需要将 vendor 下的 1.1 的内容放入主干,而无需实际复制 1.1 文件夹。

4

5 回答 5

21

正如您肯定发现的那样,复制到已经存在的目标目录是行不通的:

svn cp svn://my_project/vendor/1.1 svn://my_project/trunk

因为主干已经存在,所以你最终会得到:

svn://my_project/trunk/1.1

使用合并有一个不幸的属性,即在引入合并跟踪的 1.5 之前的版本中不保留供应商 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

利用外壳(bash):

svn co svn://my_project/trunk trunk
svn co svn://my_project/vendor/1.1 1.1
( 光盘 1.1
  对于 x in * ; 做
    svn cp $x ../trunk
  完毕
)
svn ci 主干
于 2008-11-04T06:17:20.633 回答
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 .
于 2008-11-04T02:58:30.317 回答
6

此链接解释了一种解决方法。

http://svn.haxx.se/users/archive-2004-12/1537.shtml

基本上它所说的是,如果目标文件夹在存储库中不存在,您将在目标文件夹中获得源文件夹的内容。

请参见下面的示例。您的存储库中不存在文件夹 07-03-2012。执行以下命令后,您将获得 2012 年 7 月 3 日 HEAD 文件夹的内容。

svn cp <URL>/HEAD/ <URL>/branches/07-03-2012 -m "test"
于 2012-07-03T16:37:43.200 回答
4

我认为您想要的是主干的内容最终出现在/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
于 2012-04-04T22:26:25.177 回答
0

你非常非常接近:

svn copy -m"Copy Directory" file:///path/to/a_folder file:///path/to/another_folder

/*只需从第一个参数中删除。

于 2008-11-04T03:11:01.447 回答