我们项目的主干看起来像这样:
trunk/foo
trunk/bar
trunk/baz
foo、bar、baz这几个子目录其实是互不相关的,bar和baz其实都挺大的。我如何创建一个只有 foo 的分支,这样我的分支看起来像这样:
branches/branch1/foo
branches/branch2/foo
现在,我正在做的是对整个主干进行分支,然后删除 bar 和 baz,但我认为这在 merge 期间会出现问题,因为它会尝试删除 bar 和 baz。我想要的是让它足够智能,知道我只想使用 foo 而不想对 bar 或 baz 做任何事情。
次要问题,不那么重要,如果我想要一个带有 foo 和 bar 的分支怎么办,比如:
branches/branch1/foo
branches/branch1/bar
分支这两个文件夹而不分支其他文件夹的过程会更难吗?
编辑: 有人向我指出我可以使用 svn cp。这行得通,但我希望从 git svn repo 开始工作,据我所知,git-svn 最接近 svn cp 的模拟是 git svn branch,它会自动处理复制。不幸的是,我在那里找不到任何选项可以让我只分支一个特定的子目录。
最佳答案
一个巨大的 svn 存储库由许多 git 存储库代表是很常见的。你应该用过 git svn init .. -t trunk/foo -b branches/branch1/foo -b branches/branch1/foo
等。注意:init
,不是 克隆
。然后编辑.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
.
关于git-svn 分支而不复制每个子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4731529/