我们是一些开发人员,但大多数时候每个项目只有一个开发人员。
Customer1
ProjectX
App
Tests
ProjectY
App
Tests
Customer2
Project2
Products
Product1
Common
今天,所有东西都存储在一个存储库中。
-
开发人员为客户承担一个新项目
-
为项目创建新文件夹
-
新项目中的代码
-
在另一个项目中做一些维护
-
-
新项目中的更多工作
-
签入新项目
-
交付给客户
这个过程已经运行了很多年,但是当前的工具(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
使用难看的堆栈转储崩溃hg webserver并挂起客户端。
另一种方法是使用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
很好,但对一些开发人员来说有点复杂
所有的开发人员都需要有所有的项目。
随着许多现有的项目和新的每周增加,我们需要一种方法来拉所有项目一举,也克隆新的。
文档中的行是一个showstopper
“当我们提交时,Mercurial将尝试创建整个项目及其子回购的状态的一致快照。
它首先尝试在所有已修改的子回购中提交,然后记录所有子回购的状态
回到全局提交的单一存储库问题。
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
)
)