1

我需要控制通过 SMB 共享访问的几个文件的版本。这些文件将被几个人修改。文件本身由 Web 服务器直接使用。

由于这些是生产文件,我想强制用户提取本地副本、编辑它们、提交并将它们推回。不幸的是,那台机器上没有 Mercurial 服务器。

在我这边配置 Mercurial 的合适方法是什么,以便:

  • 版本控制(.hg 目录)保存在共享中
  • 并且共享上的文件是最新版本?

我无权访问此服务器(通过共享除外)。如果我可以在那台机器上拥有一个 mercurial 服务器,我会使用挂钩来更新生产目录中的文件(我这样说只是为了突出我想要实现的目标 - 这种方法是不可能的,因为我不控制该服务器)

谢谢!

更新:我最终使用了一个中间服务器(我可以控制它)。一个钩子changegroup触发一个脚本i) hg update有新的本地文件ii)将它们复制到 SMB 共享

编辑 1在与alex的评论中讨论之后,我查看了命令行输出的详细版本。\\srv\hg\test1回购有一个[hooks]部分。changegroup = hg updatea 的输出hg push -v给出了一些见解:

pushing to \\srv\hg\test1
query 1; heads
(...)
updating the branch cache
running hook changegroup: hg update
'\\srv\hg\test1'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.
abort: no repository found in 'C:\Windows' (.hg not found)!
warning: changegroup hook exited with status 255
checking for updated bookmarks
listing keys for "bookmarks"

如果我正确理解上面的输出:

  • 一个 cmd.exe 在客户端被触发,即使[hook]是在接收服务器上
  • 它试图更新远程仓库
  • ...但失败,因为不支持 UNC

所以alex的回答是正确的——它只是在 MS Windows 上不起作用(还没有?)。(亚历克斯如果我错了,请在评论中纠正我)

4

2 回答 2

0

是什么阻止您挂载 Samba 共享并在hg init那里运行?您不需要 mercurial 服务器(hg serve或更复杂的东西)来执行推/拉操作。

于 2013-06-13T18:29:14.257 回答
0

如果我理解正确,您正在寻找两件事:

  1. 一个存储库挂钩,只要有人推送到它,它就会自动将生产存储库更新到最新版本。这很简单:您正在寻找这个问题的答案。

  2. 如果您可以依靠您的同事始终完成拉-提交-推过程,那么您就完成了。如果不是这种情况,您需要一种方法来防止人们修改生产文件并且从不提交它们。

不幸的是,我认为您不能有选择地保留对 SMB 共享上签出文件(但不能对 repo)的写入权限。但是您可以通过使文件的位置不那么明显来阻止直接修改。也许您可以将人们引导到第二个存储库,该存储库进行了配置,以便推送到它的所有内容都会立即推送到生产存储库。这个 repo 根本不需要文件的签出版本(使用创建它hg clone -U,或者hg update -r 0之后执行),消除了绕过 mercurial.xml 的诱惑。

于 2013-06-14T16:08:40.387 回答