mercurial 是否可以与多个用户在共享上使用单个工作副本正常工作

mercurial 是否可以与多个用户在共享上使用单个工作副本正常工作

我正在寻找一种解决方案,让我能够以尽可能最少的干扰方式在公司环境中安装版本控制。我考虑过的一个可能的解决方案是在每个 Windows 桌面上安装 mercurial,并在共享上设置存储库的工作副本。这样就不需要在服务器上安装 mercurial。显然,这并不能解决多个用户同时使用同一文件的问题,但这不是我们要解决的问题。这不是备份,但版本控制不应该是备份。另外,我们有足够的备份。

这种设置能正常工作吗?提交日志中的用户名会被正确记录吗?还是所有内容都似乎由同一用户提交?有人有这种设置的经验吗?

答案1

是的,您可以按照您的建议去做。Mercurial 的现代版本并不真正关心工作副本存储在哪里 — 它们可以存储在本地磁盘或网络文件系统上。

我们过去遇到过一些问题(在 1.7.1 版之前),Mercurial 无法断开存储在网络文件系统上的存储库中的硬链接。问题是,如果您这样做,服务器上的两个存储库将被硬链接hg clone foo bar。如果用户将提交推送到bar,并通过网络共享访问存储库,那么 Mercurial 发现其中的文件bar/.hg/store被硬链接到 ,foo/.hg/store以便它可以断开链接,这一点至关重要。由于各种Windows 和 Linux 中的内核错误,这可能会在旧版本的 Mercurial 中失败。

因此,总结一下:如果您在所有客户端上都安装了 Mercurial,则您的服务器不需要安装 Mercurial。创建(我希望我记得 UNC 路径)

\\server\share\main

作为主存储库并为开发人员制作克隆:

\\server\share\alice
\\server\share\bob

Alice 和 Bob 将在那里工作并独立修改工作副本。他们像往常一样提交,并在准备就绪后将其推送回仓库main。用户名存储在变更集中,因此当变更集进入主仓库时,它们将被保留。

答案2

在网络共享上创建一个共享基线存储库。让所有用户执行“hg clone”以获取该存储库的本地副本,并让他们在本地副本上工作(编译、编辑、“hg add / ... / commit”)。每当有人准备将他们的本地更改推送到共享存储库时,让他们执行“hg push”。每当有人想要让其他人将更改推送到共享存储库时,让他们执行“hg pull”和“hg update”。简而言之就是这样。

几点说明:

  • 对共享存储库的并发读/写访问不是问题。与其他类似系统一样,Mercurial 已明确设计用于处理此问题。

  • 共享存储库的本地副本你的备份。

  • 必须在 Mercurial 的每个本地安装中的“mercurial.ini”文件中手动配置提交所附加的用户名。我不知道是否有办法在该文件中使用类似 %USERNAME% 的内容,这将扩展为当前登录名,也许有。

  • 一种常见的做法是避免在共享存储库中出现多个头(如果您还不知道它在说什么,请暂时忽略这一点)。为了帮助实现这一点,即将推送更改的用户通常希望首先拉取其他人所做的更改,并确保他们的本地更改与其他人所做的更改兼容。冲突解决部分由“hg merge”完成。大多数冲突都会自动解决,但有些冲突需要用户干预(例如,如果您和我编辑同一个文件中的同一行,就会发生冲突,我们中较慢的人将不得不处理该问题并手动编辑最后一行)。

  • 由于我们处理的是 Windows,我建议强制所有文件名都为小写(或者大写,如果你喜欢大喊的话)。对于最新版本的 Mercurial,这可能不是绝对必要的,但为了安全起见,我们仍然这样做(是的,当 Mercurial 认为“a.txt”与基于 Windows 的系统上的“A.txt”不是同一个文件时,它会崩溃)。

祝你好运。

相关内容