我在一家公司工作,我们在那里创建了很多小客户特定的应用程序。 我们是少数开发人员,但大多数情况下,每个项目只有一名开发人员。DVCS(Mercurial)不适合我吗?
Customer1
ProjectX
App
Tests
ProjectY
App
Tests
Customer2
Project2
Products
Product1
Common
今天一切都存储在一个存储库。
该过程很简单。
- 开发人员需要一个新的项目为客户
- 新项目
- 为项目创建一个新的文件夹
- 代码做一些保养在另一个项目
- 入住更新维护项目
- 更多在新项目中的工作
- 签入新项目
- 交付给客户
没有标签或分支。早期版本根据日期检出。
这个过程一直担任好多年,但也有与当前的工具(CVS)
- 慢一些痛点。即使没有任何变化,结账也需要几分钟时间。历史记录存储在服务器上,因此差异需要很长时间
- 添加新项目。如果你使用CVS你知道它是这样的:添加文件夹,添加文件夹,添加下一个文件夹...
- 无法退出明显的错误(检查二进制等)
- 不支持重命名,这使得必要的重构更加痛苦。
我已经私下使用了Mercurial一段时间,并希望将其扩展到所有开发人员。
我可能弄错了所有的东西,但有一些东西我不明白如何在我们的组织中实施。
CVS提交只是当前文件夹,但在mercurial中它们是存储库范围广。 在我们的情况下,它意味着一个文件夹中犯下的维护工作也将提交尚未完成的东西,在另一个文件夹。 (我认为我们可以做的改变文件夹hg ci ./**
但这是不允许的合并,至少这是文件说什么If you are committing the result of a merge, do not provide any filenames or -I/-X filters.
)
在水银通常的做法是让每个项目一个资料库。每个项目
一个存储库对我们来说是确定的,但它会建立像其他一些问题:
如何在中央服务器上管理多个存储库?
如果开发人员创建了一个新的项目,他最终需要推动他的变化。 只是做
hg push http://localhost:8000/Customer1/NewProject
崩溃的HG-Web服务器和一个丑陋的堆栈转储和挂起客户端。
我的理解是,开发人员需要访问服务器外壳到新存储库添加到配置文件并重新启动hgweb
另一种方法是使用SSH或每股 (该方法在那里用益SSH而不是一个文件共享?)
cd Customer\NewProject
hg init
hg clone --noupdate --pull . //mercurialshare\Customer\Project
echo "[paths]" >.hg\hgrc
echo "default=//mercurialshare\Customer\Project" >>.hg\hgrc
hg push
作品,但它是一个有点复杂,一些开发商
所有开发人员都需要拥有所有项目。
(不是真的,但很多项目都相关,因此需要存在,这是最简单的,只是都)
与许多现有项目并添加每周我们需要一种方法来把所有的项目在一个新的去并且克隆新的。
我在想,subrepos可以解决的“全球性”上拉,但下面 行的文档中是一个搅局者
“当我们承诺,水银会尝试创建整个的状态一致的快照项目及其subrepos 它首先尝试提交所有修改的subrepos,然后记录所有subrepos的状态。“
回到单个存储库问题的全局提交。
(试过hg ci .hgsub .hgsubstate <subrepo>
几个变种,但.hgsubstate似乎只能在完全提交更新后,其他用户将无法看到项目的变化没有明确的hg pull --update
在项目文件夹)
我目前的想法是有一个在所有项目的根目录下的批处理文件
有关如何在组织中使用mercurial的其他想法?
编辑
感谢您的答复。我目前正在评估每个项目的一个存储库如何为我们工作。我在顶层放置了一个批处理文件
FOR /F %%x IN (repolist.txt) DO (
If EXIST .\%%x\.hg (
ECHO Pull %%x
hg pull --update --repository .\%%x
) ELSE (
ECHO Clone %%x
mkdir .\%%x
hg clone --pull %1\%%x .\%%x
)
)
[“只是因为你可以使用分布式的DVCS并不意味着你必须。”](http://stackoverflow.com/q/3854611) – 2010-11-08 09:32:17