我需要控制通过SMB共享访问的几个文件的版本。这些文件将被几个人修改。文件本身直接由Web服务器使用。
由于这些是生产文件,我想强制用户提取本地副本,编辑它们,提交并推回它们。不幸的是,该机器上没有Mercurial服务器。
在我这边配置Mercurial的合适方法是什么:
我无法访问此服务器(通过共享除外)。如果我可以在该机器上安装一个mercurial服务器,我会使用一个钩子来更新生产目录中的文件(我这样说只是为了突出我想要实现的目标 - 这种方法是不可能的,因为我不控制该服务器)
谢谢!
更新:我最终使用了一个中间服务器(我已经控制了)。 changegroup
上的一个钩子会触发一个脚本 i) hg update
以获取新的本地文件 ii)将它们复制到SMB共享
编辑1 在使用alex的评论中进行讨论后,我查看了命令行输出的详细版本。 \\srv\hg\test1
个回购邮件的[hooks]
部分为changegroup = hg update
。 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"
如果我正确理解上面的输出:
[hook]
位于接收服务器上所以alex的答案是正确的 - 它只是在MS Windows上无效(但是?)。 (如果我错了,请在评论中纠正我)
答案 0 :(得分:0)
是什么阻止您安装Samba共享并在那里运行hg init
?您不需要mercurial服务器(hg serve
或更复杂的东西)来执行推/拉操作。
答案 1 :(得分:0)
如果我理解正确,你正在寻找两件事:
一个存储库挂钩,每当有人推送它时,它会自动将生产存储库更新到最新版本。这很简单:您正在寻找this question.
如果你可以依靠你的同事总是通过pull-commit-push过程,你就完成了。如果不是这种情况,您需要一种方法来阻止人们修改生产文件并且永远不会提交它们。
不幸的是,我不认为您可以选择性地保留对SMB共享上已签出文件(但不包括回购)的写入权限。但是你可以通过使文件的位置不那么明显来阻止直接修改。也许您可以将人们引导到第二个存储库,配置为将所有推送到它的内容立即推送到生产存储库。这个repo根本不需要有文件的签出版本(用hg clone -U
创建它,或者之后再做hg update -r 0
),消除了绕过mercurial的诱惑。