我已经将Mercurial用于我自己的个人项目一段时间了,我喜欢它.我的雇主正在考虑从CVS转换到SVN,但我想知道是否应该推动Mercurial(或其他一些DVCS).
Mercurial的一个问题是它似乎是围绕每个"项目"拥有一个存储库的想法而设计的.在此组织中,当前CVS存储库中有许多不同的可执行文件,DLL和其他组件,这些组件按层次结构组织.有许多通用的可重用组件,但也有一些客户特定的组件和客户特定的配置.当前的构建过程通常从CVS存储库中获取一些子树.
如果我们从CVS迁移到Mercurial,那么组织存储库/存储库的最佳方法是什么?我们应该有一个包含所有内容的巨大Mercurial存储库吗?如果不是,那么较小的存储库应该有多细粒度?我认为如果他们必须从许多不同的地方提取和推送更新,人们会觉得非常讨厌,但如果他们必须拉/推整个公司的代码库,他们也会觉得很烦人.
有人有这方面的经验或建议吗?
相关问题:
我如何svn switch
在Mercurial中做什么?
那是改变我的工作目录切换到存储库中的另一个分支?
我有一个包含少数相关项目的Mercurial存储库.我想分支其中一个项目,以便在其他地方开展工作.
克隆只是存储库的一部分,并且这是实现这一目标的正确方法吗?
在合并期间,mercurial会为任何未解析的文件留下.orig文件.但在手动解决问题并将文件标记为正确后,它不会删除.orig文件.可以通过某些命令自动删除吗?
我在Mac上工作,所以我可以使用类似的东西:
find . -iname '*.orig' -exec rm '{}' ';'
Run Code Online (Sandbox Code Playgroud)
和它或别的什么,但我宁愿使用类似hg清理的东西......
更新:
从一段时间以来,Purge扩展与Mercurial捆绑在一起并很好地解决了这个问题.
我有两个分支,默认和branch1.我们团队中的一个人错误地将branch1合并.branch1中的内容尚未准备好与默认值合并(它包含构建和部署环境的主要返工).
我们做了'hg backout'的实验,退出合并(不确定这是正确的方法).然后从默认情况下删除branch1中的更改,这很好 - 但我们不能使用branch1重新合并.
我们该如何解决这个问题?
将我的存储库视为SVN存储库,我得到:
svn co http://myrepo/foo/trunk foo
...
foo/
bar/
baz/ -> http://myrepo/baz/trunk
Run Code Online (Sandbox Code Playgroud)
把它作为Git回购处理,我得到:
git svn clone http://myrepo/foo --trunk=trunk --branches=branches --tags=tags
...
foo/
bar/
Run Code Online (Sandbox Code Playgroud)
我可以将baz克隆到其他地方的本地机器并添加一个符号链接,但这只是一个黑客攻击.有没有办法git svn rebase
在更新其他所有内容时自动提取这些更改,就像这样svn up
做?
我想知道是否可以使用nuget仅存储对版本控制中所需包的引用(仅限package.config并忽略packages文件夹).
有没有办法告诉nuget(重新)下载各种package.config文件中的所有引用的包?或类似的东西可以放入构建脚本.
更新:
似乎我不是唯一一个请求此功能的人:请参阅此工作项(感谢PHeiberg的提示)
更新2:
NuGet现在内置了这个功能.有关详细信息,请参阅使用NuGet而不将包提交到源代码管理.剩下的就是将packages目录添加到.gitignore或一些等效的VCS(/packages/
如果你在存储库的根目录中使用它并使用git,它将会发挥作用).
我想在使用vcs或dvcs时学习其他人的工作流程.
请描述您处理以下任务的策略:
您可以随意组织您的答案,不按任务分组,但按照您认为相关的任何分组,但请通过VCS/DVCS进行组织(请不要混用它们).
谢谢.
当我在Hg repo中有两个分支时,如何只将一个文件与另一个分支合并,而没有将变更集中的所有其他文件合并?
是否可以仅合并某些文件,而不是整个变更集?
我可以看到为什么分布式源代码控制系统(像Mercurial这样的DVCS)对开源项目有意义.
但它们对企业有意义吗?(通过集中的源控制系统,如TFS)
DVCS的哪些特性使其更适合或更适合具有许多开发人员的企业?(通过集中式系统)