我在一家公司工作,在那里我们创建了许多针对客户的小应用程序。我们是少数开发人员,但大多数时候,每个项目只有一个开发人员。
Customer1
ProjectX
App
Tests
ProjectY
App
Tests
Customer2
Project2
Products
Product1
Common今天,所有的东西都存储在一个存储库中。
这个过程很简单。
开发人员为customer
H 112的更新,在新project
G 218没有标记,也没有分支。以前的版本是根据日期签出的。
这一过程多年来一直有效,但目前的工具(CVS)有几个痛点。
我私下使用Mercurial已经有一段时间了,并且希望将它扩展到所有的开发人员。
我可能完全搞错了,但是有一些事情我不知道如何在我们的组织中实现。
CVS提交仅是当前文件夹,但在mercurial中,它们是存储库范围的。在我们的例子中,这意味着在一个文件夹中提交维护工作也会在另一个文件夹中提交尚未完成的内容。(我认为我们可以在更改的文件夹中执行hg ci ./**,但合并时不允许这样做,至少文档中这样说是If you are committing the result of a merge, do not provide any filenames or -I/-X filters.)。
Mercurial的常见做法是每个项目都有一个存储库。
每个项目一个存储库对我们来说是可以的,但它会产生一些其他问题,如:
如何管理中央服务器上的多个存储库?
如果开发人员创建了一个新项目,他最终需要推动他的更改。只是在做
hg push http://localhost:8000/Customer1/NewProject
使用丑陋的堆栈转储使崩溃,并挂起客户端。
我的理解是,开发人员需要访问服务器shell,才能将新的存储库添加到配置文件中,并重新启动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可以解决“全局”的问题,但是文档中的下面一行是一个展示器。
“当我们提交时,Mercurial将尝试创建整个项目及其subrepos状态的一致快照。它首先尝试在所有修改的子记录中提交,然后记录所有subrepos的状态。”
回到全局提交的单一存储库问题。
(尝试了一些hg ci .hgsub .hgsubstate <subrepo>的变体,但.hgsubstate似乎只有在完全提交时才会更新。如果项目文件夹中没有显式的hg pull --update,其他用户将不会看到项目更改)
我目前的想法是在根目录中有一个批处理文件,用于提取所有项目。
关于如何在我们的组织中使用汞,还有其他的想法吗?
编辑
谢谢你的回复。我目前正在评估每个项目一个存储库将如何为我们工作。我把一个批处理文件放在最上层
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
)
)发布于 2010-11-08 00:21:21
你有权说汞是为每个回购项目设计的。当你像这样工作的时候,它也要好得多,因为不同项目的历史是分开的。
尝试在DVCS回购中进行多个项目只会造成痛苦。
就我个人而言,我更喜欢通过SSH服务项目,而不是HTTP。一个原因是有能力..。
# hg init blah
# hg clone blah ssh://server/blah如果您是通过HTTP提供服务的,这是不起作用的(正如您已经发现的)。不过,我很惊讶它会造成严重的崩溃:-/
获得所有项目的子回购方法并不完全像您所描述的那样。不是回到全局提交(项目可以单独开发),而是超级项目存储它所依赖的子项目的版本。这正是您想要的,如果您有一个库作为子项目(例如),但是发布取决于特定的版本。实际上,子回购链接是一个书签进入另一个回购在一个特定的版本。
但并不是你想要的。
可能,常见的东西应该是需要它的项目的子回购。然后,每个项目都可能被冻结在同一代码的不同版本上,您没有任何问题。这需要考虑一下。
否则,脚本的想法可能是最简单的。
https://stackoverflow.com/questions/4119462
复制相似问题