Version control 将Mercurial存储库放在共享网络驱动器中是个好主意吗?

Version control 将Mercurial存储库放在共享网络驱动器中是个好主意吗?,version-control,mercurial,Version Control,Mercurial,我们是一个由3名开发人员组成的小组(Boss、我和另一名主要远程工作的开发人员),我的任务是为Mercurial HG设置一个存储库服务器 看起来我可以简单地将我们的集中存储库放在一个共享的网络驱动器上。这将非常容易设置,但似乎存在这样的风险:我们中的任何人都可能滥用直接工作/修改源存储库的便利性。这就是为什么我考虑使用HgWebdir服务器作为控制对中央存储库的访问的一种方式。因此,不鼓励直接访问中央源代码存储库,但这里将提供共享驱动器,以防万一 我想这是一个定义内部版本控制程序的问题,不是一

我们是一个由3名开发人员组成的小组(Boss、我和另一名主要远程工作的开发人员),我的任务是为Mercurial HG设置一个存储库服务器

看起来我可以简单地将我们的集中存储库放在一个共享的网络驱动器上。这将非常容易设置,但似乎存在这样的风险:我们中的任何人都可能滥用直接工作/修改源存储库的便利性。这就是为什么我考虑使用HgWebdir服务器作为控制对中央存储库的访问的一种方式。因此,不鼓励直接访问中央源代码存储库,但这里将提供共享驱动器,以防万一

我想这是一个定义内部版本控制程序的问题,不是一个真正的版本控制问题,但我仍然会继续问这个问题。因为我觉得我没有足够的经验来做出决定,如果我不能100%确定我的理由和方法是有效的,那么我可能很难强制其他开发人员使用版本控制系统

编辑:


我可以看到,使用版本控制软件的共享文件夹存在潜在问题。但有谁愿意解释一下,当推到共享文件夹时,幕后发生了什么?我的理解是,共享驱动器本质上是一个共享链接/快捷方式,因此对于共享驱动器,Mercurial在本地计算机上仅持有该链接的锁,但事实是,每个用户的计算机可能有一个Mercurial持有链接锁的不同实例,而服务器的Mercurial实例将在物理驱动器上保留自己的链接。我知道这很复杂,但它怎么会失败呢?我可以理解这个结论,但我自己无法将事实与结论联系起来

您不应该将Mercurial存储库放在网络服务器上的共享文件夹上,因为Mercurial无法在这种设置下的所有情况下可靠地持有锁,并且在推送到该中央存储库的过程中,锁对于避免损坏存储库至关重要


事实上,我会删除“不鼓励”并将其替换为“不可能”,并且只使用hgweb或
hg serve
为存储库提供服务,前者是长时间运行的服务器的推荐设置。

如果您有一个集中式服务器,您可以在那里安装hgweb,并将其作为中心和备份源进行推拉。我们仍然有Windows 2003服务器(我无法改变这一点)在Web上稍加搜索就能找到如何在Windows服务器上建立HGWEB的信息,尽管大多数都引用Windows Server 2007。

另一点要考虑的是,网络驱动器常常具有奇怪的文件系统语义,而这些语义系统与SCMs没有很好的匹配。至少在这种情况下,涉及到的网络驱动器发生了损坏(可能没有修复)。我猜,像在bitbucket或Kill上的私有存储库那样在场外托管代码是不可能的?@Lasse不,现在不行。顺便说一下,有人知道在Bitbucket中托管非开源源代码是否可行吗?我知道这是一个理性的选择,但是除了说“为什么不?”之外,我如何说服我的老板呢?这是一个完全不同的问题,我认为你应该试着看看programmers.stackexchange.com和这里的stack overflow,看看是否存在问同样问题的问题,如何说服老板/管理层/领导层接受非现场源代码托管。如何运行HGWEB,将存储库存储在网络共享上?我可以证明。Mercurial不能被推拉到共享文件夹,而不会发生常规和不可逆的损坏。git有什么不同吗?看到另一个帖子——人们并没有对此感到气馁。(我更喜欢hg,但需要为我的团队找到一个可行的解决方案,而且我们无法轻松设置服务器。)不,不是真的,mercurial无法在所有情况下获得共享驱动器上的锁不是mercurial特有的,而是共享驱动器系统本身的问题。这并不是说所有的共享网络驱动器都不好,但是如果你问的是一般意义上的问题,那么一般的答案是它不是(我推荐的)。git是否会损坏共享存储库,或者如果发生这种情况,是否只需要一些小的修复,我不能说。但是“我”已经读了足够多的关于这项建议的地方,我认为一般来说,这是不推荐的。