我的项目中出现了一些复杂的颠覆合并:长期分离的大分支.Svn给出了太多的冲突 - 其中一些似乎是虚假的.
鉴于git
对于优秀的合并体验而言,为了使合并更易于管理,使用git-svn
它是否有益?
你能推荐其他的替代品(如svk
,hgsvn
),以减轻疼痛合并?
有些冲突很容易解决(例如java导入,空格) - 所以我也想知道是否有任何自动解决方案.
将来可能会完全切换到DVCS(我们中的一些人会喜欢),但现在不行.(更新:这不再是真的 - 团队最近完全切换并对此感到高兴).
提前致谢.
PS:有些帖子似乎是相关的(例如git-svn合并2个svn分支),但他们没有完全回答这个问题.
更新:看完我的-novice-回答后再往下走(这个道路).
我们正在从Subversion迁移到Mercurial.为了促进迁移,我们正在创建一个中间Mercurial存储库,它是我们的Subversion存储库的一个副本.所有开发人员将开始切换到Mercurial存储库,我们将定期将更改从中间Mercurial存储库推送到现有的Subversion存储库.经过一段时间后,我们将简单地废弃Subversion存储库,中间的Mercurial存储库将成为新的记录系统.
Dev 1 Local --+--> Mercurial --+--> Subversion
Dev 2 Local --+ +
Dev 3 Local --+ +
Dev 4 -------------------------+
Run Code Online (Sandbox Code Playgroud)
我一直在测试它,但是当我将更改从本地存储库推送到中间Mercurial存储库,然后直到我们的Subversion存储库时,我一直遇到问题.
alt text http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/01.png
在我的本地计算机上,我有一个已提交的变更集,可以将其推送到我们的中间Mercurial存储库.在这里你可以看到它是版本#2263,哈希625 ...
alt text http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/02.png
我只将此变更集推送到远程存储库.
替代文字http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/03.png
到目前为止,一切看起来都很好 变更集已被推送.
hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Run Code Online (Sandbox Code Playgroud)
我现在切换到远程存储库,并更新工作目录.
hg push
pushing to svn://...
searching for changes
[r3834] bmurphy: database namespace
pulled 1 revisions
saving bundle to /srv/hg/repository/.hg/strip-backup/62539f8df3b2-temp
adding branch
adding changesets
adding manifests
adding file changes
added 1 changesets …
Run Code Online (Sandbox Code Playgroud) hgsubversion的在线文档很糟糕,IMO(我不想这么说).我一直在按照快速入门中的说明操作.
我做了什么?
我安装了Mercurial:
D:\ repos\experimental> hg --version Mercurial Distributed SCM(1.6版)
我安装了TortoiseHg以匹配Mercurial版本.
我下载了hgsubversion存储库:
D:\ devapps> hg clone http://bitbucket.org/durin42/hgsubversion
我修改了我的.hgrc如下:
[extensions] hgsubversion = D:\ devapps\hgsubversion\hgsubversion
D:\ repos\experimental> hg help hgsubversion hgsubversion extension - 与Subversion存储库集成
hgsubversion是Mercurial的扩展,它允许它充当Subversion客户端,提供快速,增量和双向同步.
我为Python 2.5安装了PySVN.
我试图克隆SVN存储库:
...> hg clone http:// path/to/repository / repository-hg
我得到了以下结果:
...
abort: Subversion 1.5.0 or later required, but no bindings were found!
Run Code Online (Sandbox Code Playgroud)
WTF?我正在遵循的说明中没有任何内容告诉您如何安装它.任何帮助是极大的赞赏!!(我只想尽可能地在没有SVN的情况下工作 - 请帮助!).
一个类似的问题最近已经问过,但就是不一样.
Mercurial网站有一个详细的页面,列出了4种不同的选项,可以让Mercurial和Subversion进行互操作.
我想知道是否有人在那里尝试了其中一个或多个,并且可能涉及任何真正好或非常糟糕的经历.关于hgsubversion下载的说明如下
hgsubversion是Mercurial的扩展,允许使用Mercurial作为Subversion客户端.现在还没有准备好用于生产.如果你已经准备好攻击它,你应该只使用它,并潜入Mercurial和/或Subversion的内部.
这就像邀请我一样说"放弃希望,所有进入这里的人"或"闯入者将被捕".所以我只是想知道这个或任何其他替代方案是否值得为那些没有太多时间来破解的人尝试.
这是一个非常深奥的问题,所以只是从头开始说清楚:我不是在谈论从svn转换为git,git转换为mercurial,或者mercurial转换为git.我说的是利用"跨系统"插件产生的一种复杂情况,这种插件允许Mercurial在某种程度上与git和SVN进行互操作.
有一段时间我使用了Mercurial的hg-subversion插件来"跟踪"code.google.com上的上游SVN存储库.感谢这个插件,Mercurial认为存储库是"相关的",并且能够提取自我上次从回购中提取以来发生的变化.这允许我维护我自己的私有Mercurial存储库,其中包括私有变更集,分支,标记等,但它会定期与上游SVN存储库中发生的更改同步并合并.
上游回购已经从SVN干净地移动到git.当我干净利落地说,我的意思是他们已经把整个提交树,或至少影响我关心的默认/主分支的部分.
我现在处于这样一种情况:我有一个Mercurial存储库,它最近与现已解散的SVN存储库中的最后一次签入合并,我想开始从新的上游git存储库中提取更改,从在svn存储库移动到github之后发生的更改.
我可以使用精彩的hg-git插件从这个存储库中提取更改,但由于当前存储库没有与git上游存储库"相关"的概念,它将提取所有更改,包括镜像更改集的所有更改已存在于我的存储库中.
所以我正在寻找的建议是如何让我的Mercurial存储库通过hg-git考虑自己,与上游git存储库相关,并且还考虑git存储库中所有适当的提交为"已经拉出"维持变更集平等的目的.
我看到内部的hg-git似乎使用了一个文件.hg/git-mapfile,我认为它可以映射上游git和本地Mercurial存储库之间的变更集.这可能是一个线索.
什么是让我的本地Mercurial存储库进入这样一种状态的最简单方法,它本质上就像它是作为上游git存储库的克隆而开始的,但是保留了我自己随时间添加的所有不相关的变更集?
(注意:我不希望用新的克隆"重新开始",然后应用我的私有更改,因为我想保持此存储库的历史完整性以用于我自己的构建/调试目的).
我已经开始在SVN存储库中工作了.我已将它的子文件夹克隆到当地的Hg仓库中hg clone
.
之后,我想与一位无权访问SVN存储库的同事分享.我已经创建了一个私有BitBucket存储库,我们偶尔推动这些更改,因此我不得不拉它们.
hgsubversion
做一些令人讨厌的改变集,比如改变他们的提交者(我甚至相信哈希).当我尝试推送到BitBucket仓库时,我不得不进行合并.
由于我们敬爱的朋友,现在我无法将更改推回到Subversion存储库中abort: Sorry, can't find svn parent of a merge revision.
.
如何使用svn-targetinging Mercurial存储库拉出BitBucket目标Mercurial存储库,同时保持兼容hgsubversion
(即不导入合并修订版)?
当然,一些自动化的方法可以理解,但如果没有这样的事情/简单的方法来做到这一点,我将不胜感激任何解决方案.
我用hgsubversion
,不是hgsvn
; 也就是说,一个人所做的扩展hg clone svn://repo/url
.不过,如果有必要,我愿意转换.
最近在我的新工作中,我的部门(我们主要建立股票和赛马网站,我们只在办公室的网站上工作.)正在考虑使用SVN或Mercurial.我们的项目经理说他喜欢SVN(没有告诉我们他的理由)但是我们也可以选择Mercurial并向我们征求我们的意见(最终的决定仍然在于他)
鉴于大多数在线文章都是为了解释为什么选择Mercurial而不是SVN(或类似的东西).我想问相反的问题.
那么,尽管Mercurial/Git相对于SVN有很多优势,你何时以及为什么在新项目中选择SVN而不是Mercurial?
这个问题是非常相似,在提出的一个这样的问题,但我有解决方法如下一些问题.
问题:
基本上我有一个subversion服务器和一个mercurial本地客户端.扩展hg-subversion允许mercurial充当subversion客户端.这对我来说是理想的,因为我可以在我的subversion开发分支中创建无限的功能分支,并在我选择合适时合并它们.
由于subversion的限制,我无法将分支合并提交到subversion存储库.实际上,我不需要提交每个分支合并,我只想将"默认"分支头提交给SVN.
拟议的解决方案:
Harvey建议的解决方法用户是修改我的工作流程,以包含用于开发的hgsubversion克隆的仅hg克隆.
引用哈维的话:
诀窍是学习修改后的hg < - > hgsubversion < - > svn工作流程.一旦你"了解"它的工作方式,你就不会有任何麻烦.你只需输入几个命令.我实际上已经开始编写脚本来使这个过程(重复性)更容易.典型流程:[in"hg"repo]提交一系列更改; 把他们推向"hgsubversion"; [切换到"hgsubversion"] hg update(hgsubversion需要这个); hg推送到"svn"(在你推送并在本地删除你的变更集后自动重新拉出); [切换回"hg"] hg从"hgsubversion"拉出; hg剥离较旧的重复项b/c"hg"不是hgsubversion克隆,并且不知道自动剥离旧的变更集.
我遇到的问题:
我遇到了从hgsubversion运行hg push到svn存储库的问题.我仍然收到错误消息,"abort:抱歉,找不到合并修订版的svn父版."
不可否认,我不是100%关于hgsubversion如何推动对svn的修改.老实说,我希望看到我的本地副本被推送到svn服务器的状态.
HALP?
作为一名自由职业者,我经常在使用Subversion存储库的公司工作.
如果我可以使用Mercurial从这些存储库获取代码,在我离线时跟踪我的更改,然后在我重新上线时将所有本地更改提交到公司的Subversion服务器,这将非常方便.
这有用吗?你有没有阅读有关细节的任何好的教程?
我从https://tortoisehg.bitbucket.io/download/index.html(2.8.1)安装了最新版本的TortoiseHG for Windows
我做到了
hg clone http://bitbucket.org/durin42/hgsubversion .
Run Code Online (Sandbox Code Playgroud)
并在mercurial.ini中设置正确的路径:
[extensions]
hgsubversion = C:\hgextensions\hgsubversion\hgsubversion
Run Code Online (Sandbox Code Playgroud)
如果我做:
hg version --svn
Run Code Online (Sandbox Code Playgroud)
我可以看到hgsubversion似乎安装正确:
Mercurial Distributed SCM (version 2.6.2)
(see http://mercurial.selenic.com for more information)
Copyright (C) 2005-2012 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
hgsubversion: 32f6b970c762
Subversion: 1.6.16
bindings: SWIG
Run Code Online (Sandbox Code Playgroud)
但是当我想克隆一个SVN存储库(来自网络的任何例子)时,它说:
abort: No module named hgsubversion!
Run Code Online (Sandbox Code Playgroud)
这有什么不对?