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

标签 git git-svn

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

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/

相关文章:

git - laravel 4 安装问题

git - 从历史中删除旧的 Git 提交?

git - 缓慢的 git-svn rebase 报告 "W:unknown path/rev"和 "W:svn cherry-pick ignored"

git - 如何将 fetch 的结果 merge 到 master 中?

GitKraken: "This repository requires LFS but you do not have LFS installed"

git clone 不询问用户密码

git svn fetch 为分支多次检索相同的 Subversion 修订版

git - SVN 到 Git 迁移 - 未定义作者,但它是

svn - Subversion 在 '..\..\..\subversion\libsvn_wc\update_editor.c 的第 1550 行报告故障 'action == svn_wc_conflict_action_delete'

git - cloudbees 中的 jenkins 远端意外挂断