返回介绍

6.1 Mercurial 版本库的管理与设置

发布于 2024-01-21 17:11:03 字数 3736 浏览 0 评论 0 收藏 0

Mercurial 是分布式版本管理系统,所以原则上是不需要 Subversion 那种中央版本库的。但是,开发团队成员之间共享成果(变更集)时,如果仅凭对等(Peer To Peer)方式进行交流,效果是十分有限的。为解决这一问题,需要在所有开发成员都能随时访问的服务器上设置一个中央版本库,用它来共享成果。接下来将要介绍的,就是在服务器上设置中央版本库的步骤。

6.1.1 服务器上的 Uinx 用户群设置

要想对文件系统上的 Mercurial 版本库进行操作,必须能在对象版本库内的“.hg”目录下进行读写,这就需要相应的访问权限。因此,用版本库进行开发的 Unix 用户需要设置为同一用户群来集中管理。

我们创建名为 dev 的群作为本例的开发者群(LIST 6.1)。这需要以管理员权限执行 groupadd 命令。

LIST 6.1 创建 dev 群

$ sudo groupadd dev

然后用 useradd 命令给 dev 群新建用户,用户名指定方法如 LIST 6.2 所示。

LIST 6.2 新建 dev 群的用户

$ sudo useradd -g dev <username>

即通过 <username> 指定用户名。

NOTE

指定 -m 选项可以创建主目录。

指定 -s 选项可以设置登录时使用的shell。

另外,向群中添加已有用户时要用 usermod 命令(LIST 6.3)。

LIST 6.3 向 dev 群添加已有用户

$ sudo usermod -a -G dev <username>

NOTE

用户群的修改内容不会对已登录服务器的用户立刻生效。直到下次登录时才会应用新的群。

6.1.2 创建版本库

由于服务器上要放好几个版本库,所以我们新建一个统一存放版本库的目录。本例的路径为 /var/hg/(LIST 6.4)。各版本库要在这个目录下创建。

LIST 6.4 创建 /var/hg/ 目录

$ sudo mkdir /var/hg/

接下来我们在这个目录下新建一个版本库。执行 hg init 命令,新建名为 testrepo 的版本库(LIST 6.5)。

LIST 6.5 创建 testrepo 版本库

$ sudo hg init /var/hg/testrepo

然后把版本库内“.hg”目录的所有权交给 dev 群,让 dev 群的用户能够对该版本库进行写入操作(LIST 6.6)。

LIST 6.6 将版本库的群改为 dev

$ sudo chgrp -R dev /var/hg/testrepo/.hg

另外还需要设置 SGID(Set Group ID),保证向版本库写入时,文件的所有者是 dev 群(LIST 6.7)。

LIST 6.7 设置 SGID

$ sudo chmod g+sw -R /var/hg/testrepo/.hg

这样我们就有了一个可多用户共同使用的版本库。

6.1.3 hgrc 的设置

要想在服务器端执行钩子(Hook)脚本,必须使用可信群或可信用户(关于钩子脚本的相关知识将在 6.2 节学习)。我们在 hgrc 的 trusted 节的 groups 中添加 dev 群。如果该文件不存在,则直接新建。至于 hgrc 的路径,假如版本库路径为 /var/hg/testrepo/,则 hgrc 位于 /var/hg/testrepo/.hg/hgrc。clone 来的版本库会自动生成这个文件,而用 init 创建的版本库并不会自动生成,需要手动创建(LIST 6.8)。

LIST 6.8 在 hgrc 的 trusted 节的 groups 中添加 dev 群

[trusted]
groups = dev

6.1.4 使用设置好的版本库

如果想通过 ssh 来 clone 我们刚创建的这个版本库,需要以“ssh:// 主机名 / 目录”的形式指定 clone 位置的路径。举个例子,假设服务器可通过 example.com 域名进行访问,现在我们想 clone 路径 /var/hg/testrepo 下的版本库,则命令如 LIST 6.9 所示。

LIST 6.9 对 example.com 上的 /var/hg/testrepo 版本库执行 clone 操作

$ hg clone ssh://example.com//var/hg/testrepo

指定路径时请注意斜杠数。协议部分 ssh:// 、域名 example.com 与目录 /var/hg/testrepo 的结合部分都是双斜杠。

NOTE

通过 ssh 连接时如果需要密钥,就需要在 ssh 客户端的设置文件 $HOME/.ssh/config 中预先设置好对连接对象使用的密钥文件。

6.1.5 使用 hgweb 建立简易中央版本库

Mercurial 具有 hgweb 功能,我们只需一个 hg serve 命令就能公开版本库浏览器的 Web 站点。

$ hg serve

启用 hgweb 功能的版本库默认允许 clone/pull,在 hgrc 中添加设置之后还可以进行 push 操作,所以对于一些仅需要在 LAN 内共享的版本库来说,启用 hgweb 功能后就可以当作中央版本库来用,能省去不少功夫。

我们在“.hg/hgrc”中添加以下设置。allow_push 是允许经由 hgweb 进行 push 操作的 user 列表,加上 * 表示不需认证即可 push。push_ssl 用来设置 push 时是否需要 SSL。

[web]
allow_push = *
push_ssl = False

这里不妨加上 -d 选项,让 hgweb 的 Web 服务器常驻。启动之后会显示 hgweb 的 URL。

$ hg serve -d
listening at http://127.0.0.1:8000/ (bound to *:8000)

如果直接执行 hg clone 加 URL,本地版本库名会变成 domain:port,所以我们在 clone 时添加版本库名作为第二传值参数。

$ hg clone http://127.0.0.1:8000/ monjudoh

如下所示,我们在 clone 来的版本库中进行修改,然后提交并 push。

$ cd monjudoh
$ touch monjudoh.txt
$ hg ci -A -m "add monjudoh.txt"
adding monjudoh.txt
$ hg push
pushing to http://127.0.0.1:8000/
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文