git-svn分支而不复制每个子目录

时间:2011-01-19 03:42:32

标签: git git-svn

我们项目的主干看起来像:

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分支,它会自动处理复制。不幸的是,我找不到任何选项,只允许我分支一个特定的子目录。

4 个答案:

答案 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

如果您不想,则无需复制barbaz目录。或者,您可以复制所有内容(因为副本基本上是免费的)并且只检查您需要的内容:

svn cp svn://server/repo/trunk svn://server/repo/branches/branch1
svn co svn://server/repo/branches/branch1/foo

答案 3 :(得分:0)

不确定这个的确切语法,也不知道这是否有效,但我认为你可以尝试制作三个不同的文件夹git子模块。

你可以将git克隆分别指向每个主干并以这种方式克隆它们吗?