我已将我的开发转换为mercurial,但我仍然需要使用hgsubversion与subversion服务器通信。我已经在本地运行了hg,用于所有已经存在于subversion中的项目。
我的问题是:创建一个最终将存在于颠覆中的新项目的最佳工作流程是什么?
我尝试使用hg init启动一个新项目,然后推送到颠覆。但我迷路了,无法让它发挥作用。我认为最好的工作流程是将项目直接创建为颠覆,完全不知道mercurial的存在,然后用hgsubversion克隆。但我想知道是否有更好的方法。
为了它的价值,我们在subversion中使用经典的trunk / tags / branches目录结构。其他开发人员仍然直接使用svn。
答案 0 :(得分:1)
我认为最好的工作流程是将项目直接创建为颠覆,完全不知道mercurial的存在,然后用hgsubversion进行克隆。
这不仅是最好的,而且只有一种可能。初始化的hg repo添加了后来的扩展,而[path] 中的Subversion repo将无效用于拉/推
是的,从Mercurial开始使用空的Subversion repo(仅创建默认dirmap)也会给我带来意想不到的和不可预测的结果。
初始状态:
svn log file:///Z:/SVN
------------------------------------------------------------------------
r1 | Badger | 2013-01-09 12:00:10 +0600 (Ср, 09 янв 2013) | 1 line
Imported folder structure
------------------------------------------------------------------------
hg clone file:///Z:/SVN z:\HG
[r1] Badger: Imported folder structure
no changes found
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
(好的,Mercurial不跟踪空目录,因此我们在变更集中没有任何内容存储)
hg log -R z:\hg
产生空输出
通常的工作流程测试 - 添加,提交,推送(TortoiseHG最新)
% hg add --repository Z:\HG Z:\HG\Intro.txt
[command completed successfully Wed Jan 09 12:17:31 2013]
% hg commit ...
Intro.txt
committed changeset 0:0a3fc4a9213d
[command completed successfully Wed Jan 09 12:17:31 2013]
% hg --repository Z:\HG push file:///Z:/SVN
pushing to file:///Z:/SVN
searching for changes
no changes found
[command completed successfully Wed Jan 09 12:18:02 2013]
“没有发现任何变化” - 糟糕,非常糟糕的消息。在Mercurial和上游Subversion中有不同的历史
>hg log
changeset: 0:0a3fc4a9213d
summary: Added file
svn log file:///Z:/SVN
------------------------------------------------------------------------
r1 | Badger | 2013-01-09 12:00:10 +0600 (Ср, 09 янв 2013) | 1 line
Imported folder structure
------------------------------------------------------------------------
>svn log file:///Z:/SVN
------------------------------------------------------------------------
r2 | Badger | 2013-01-09 12:22:38 +0600 (Ср, 09 янв 2013) | 1 line
Added main file
------------------------------------------------------------------------
r1 | Badger | 2013-01-09 12:00:10 +0600 (Ср, 09 янв 2013) | 1 line
Imported folder structure
------------------------------------------------------------------------
hg --repository Z:\HG fetch --verbose file:///Z:/SVN
pulling from file:///Z:/SVN
[r2] Badger: Added main file
A trunk/Topic.txt
Topic.txt
committed to "default" as fc8bf55ea98f
pulled 1 revisions
updating to 1:fc8bf55ea98f
resolving manifests
removing Intro.txt
getting Topic.txt
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
merging with 0:0a3fc4a9213d
resolving manifests
getting Intro.txt
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Intro.txt
new changeset 2:98c16d1829d8 merges remote changes with local
仍然无法推送(“抱歉,无法找到合并修订版的svn父级。”):我们的0在原点上没有父级
但是,如果我将文件添加到SVN中的树(空.hgignore,它必须出现在Mercurial repo中)
> svn log file:///Z:/SVN -q -v
------------------------------------------------------------------------
r2 | Badger | 2013-01-09 13:44:47 +0600 (Ср, 09 янв 2013)
Changed paths:
A /trunk/.hgignore
------------------------------------------------------------------------
r1 | Badger | 2013-01-09 13:43:27 +0600 (Ср, 09 янв 2013)
Changed paths:
A /branches
A /tags
A /trunk
------------------------------------------------------------------------
克隆后我得到了
>hg log
changeset: 0:71c7bc7bce68
tag: tip
user: Badger@1d57b098-00df-af47-a2e3-c1451e4b2f8d
date: Wed Jan 09 07:44:47 2013 +0000
summary: Added needed for successful cloning hgignore
并添加了| commited文件被推送到Subversion而没有任何头痛
% hg --repository Z:\HG push file:///Z:/SVN
pushing to file:///Z:/SVN
searching for changes
[r3] Badger: File from Mercurial
pulled 1 revisions
nothing to rebase
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
svn log file:///Z:/SVN -q -v -r "HEAD"
------------------------------------------------------------------------
r3 | Badger | 2013-01-09 13:59:15 +0600 (Ср, 09 янв 2013)
Changed paths:
A /trunk/Test.txt
------------------------------------------------------------------------
注意:我在测试使用带有SVN原点的Mercurial分支时失败:在推送到Subversion之后保存在此分支变量集中的已创建(命名)分支消失了(并且变更集出现在主干而不是预期/支链/ BRANCHNAME)