问题类似于这个(未回答)和这个(同样的问题不涉及 Git)。
目标是Hg
在完全过渡到 Hg 之前为 SVN 做一个前端一段时间。
设置可能看起来像下面描述的那样(与上面提到的问题相同),但是我不确定中间 Hg 存储库的确切拓扑。
Dev1 Hg --> Hg <--> SVN
Dev2 Hg -/
我知道上述设置适用于此评论git
中的git-svn
描述:
Dev1 Git --> Git (bare) <--> Git (bridge) <--> SVN
Dev2 Git -/
设置:
git svn init
或SVNgit svn clone
存储库。这将成为“Git/SVN 桥”。</p>在这里修复任何分支、标签等。refs 被视为远程,因此
svn/*
如果您想要跟踪分支,请检查这些远程并创建适当的本地分支。此外,检查标签,并创建实际标签。您必须为希望在 Git 和 SVN 之间同步的任何 SVN 分支创建本地分支。现在,在某处创建一个新的裸存储库 (
git init
),然后从网桥将所有分支推送到裸存储库 (git push –tags
)。所有 Git 用户现在都克隆这个裸存储库。桥只会由了解如何同步 Git 和 SVN 的一个(或少数)人维护。
要从网桥更新 SVN 主干上的更改,反之亦然:
git svn fetch
(获取新的 SVN 更改)
git checkout master
git pull master
(从裸仓库获取 Git 更改)
git checkout svn/trunk
(结帐分离头)
git merge –no-ff –log master
(合并来自 master 的更改)。–no-ff
确保实际提交,–log
从 master 上的每个提交复制单独的日志消息(–log
可选)。如果要编辑提交消息,则可以运行 git commit –amend。
git svn dcommit
(这会将您的合并提交推送到 SVN。请注意,提交是在一个分离的头部,并且不再可访问)。您在 master 上的所有工作(自从 master 和 的合并基础以来svn/trunk
)作为单个更改提交,现在可供 SVN 用户使用。
git checkout master
git merge svn/trunk
(从 SVN 获取新的更新 - 使用更改的提交消息 - 并合并到 master)
git push barerepo
(使 SVN 更改可供 Git 用户使用)
我不知道是否有可能以某种方式在 Hg 上复制上述内容。正如我所看到的(我是 Git 中级用户并且了解使用 Hg 的基础知识),Hg 中的障碍是:
- 没有远程跟踪分支(这可以通过书签实现吗?单独的克隆存储库?)
- 不可能通过
hgsubversion
(上面列表中的第 6 步。什么停止hgsubversion
做什么svn dcommit
?)
是否可以使 Hg-SVN 网关以与 Git-SVN 网关相同的方式工作?如果不是,为什么?