我们项目的主干看起来像:
trunk/foo
trunk/bar
trunk/baz
子目录foo,bar和baz实际上彼此无关,bar和baz实际上非常庞大。如何使用foo创建一个分支,这样我的分支看起来像:
branches/branch1/foo
branches/branch2/foo
现在,我正在做的是分支整个主干,然后删除bar和baz,但我认为在合并期间会有问题,因为它会尝试删除bar和baz。我想要的是它足够聪明,知道我只想和foo一起工作,而不是用bar或baz做任何事情。
次要问题,并不重要,如果我想要一个foo和bar的分支,例如:
branches/branch1/foo
branches/branch1/bar
分支这两个文件夹而不分支其他文件夹的过程是否会更难?
编辑: 有人指出我可以使用svn cp。这是有效的,但我希望从git svn repo开始工作,据我所知,最接近的模拟git-svn必须svn cp是git svn分支,它会自动处理复制。不幸的是,我找不到任何选项,只允许我分支一个特定的子目录。
答案 0 :(得分:4)
一个巨大的svn存储库通常由许多git存储库代表。您应该使用git svn init .. -t trunk/foo -b branches/branch1/foo -b branches/branch1/foo
等。注意:init
,而不是clone
。然后修改.git/config
:
[svn-remote "foo"]
url = http://server.org/svn
fetch = trunk/foo:refs/remotes/foo/trunk
branches = branches/*/foo:refs/remotes/foo/branches/*
tags = tags/*/foo:refs/remotes/foo/tags/*
然后做git svn fetch
。此外,您可以指定--ignore-paths
,例如,忽略docs
目录。
之后git svn branch
应该做正确的事情。请参阅git-svn manual
。
答案 1 :(得分:2)
svn copy将很乐意在文件夹结构中的任何级别运行。
只是做:
svn cp trunk/foo branches/branch1/foo
将其视为典型的unix文件系统。
如果branch1尚不存在,您可能必须将--parents添加到cp行。
答案 2 :(得分:0)
Subversion中的分支基本上只是制作文件的副本(但它们不是真正的副本,因为它们不占用任何空间)。所以:
svn cp svn://server/repo/trunk/foo svn://server/repo/branches/branch1/foo
如果您不想,则无需复制bar
和baz
目录。或者,您可以复制所有内容(因为副本基本上是免费的)并且只检查您需要的内容:
svn cp svn://server/repo/trunk svn://server/repo/branches/branch1
svn co svn://server/repo/branches/branch1/foo
答案 3 :(得分:0)
不确定这个的确切语法,也不知道这是否有效,但我认为你可以尝试制作三个不同的文件夹git子模块。
你可以将git克隆分别指向每个主干并以这种方式克隆它们吗?