如何将"普通"Git存储库转换为裸存储库?
主要区别似乎是:
在普通的git存储库中,您.git在存储库中有一个包含所有相关数据的文件夹,而所有其他文件都构建了您的工作副本
在一个简单的Git存储库中,没有工作副本,文件夹(让我们称之为repo.git)包含实际的存储库数据
git version-control git-clone git-bare git-non-bare-repository
我是git的新手,我通常使用具有中央存储库的P4,而git是分布式VCS.
我感兴趣的是当两个对等体同时将更改推送到同一个远程时git如何工作.假设每个对等体在推送之前解决了所有冲突.我想如果git报告冲突,后者将被拒绝!
但是,根据我的理解,git在内部是一个键/值存储,就像当前流行的NOSQL数据库,尤其是支持p2p复制的Couch-DB.
其实我想问一下,在客户端将更改推送到远程git存储库的情况下,git进程如何冲突?推被拒绝了吗?
从马克的答案来看,我认为推动应该被拒绝.
我们是由3个开发人员组成的小团队(Boss,我和另一个主要从事远程工作的开发人员),我的任务是为Mercurial HG设置存储库服务器.
看起来我可以简单地将我们的集中式存储库放在共享网络驱动器上.这将非常容易设置,但似乎存在任何人都可能滥用直接工作/修改源存储库的便利的风险.这就是为什么我在考虑使用HgWebdir服务器来控制对中央存储库的访问.因此,不鼓励直接访问中央源存储库,但共享驱动器将在这里以防万一.
我想这是一个定义我们内部版本控制程序的问题,而不是一个真正的版本控制问题,但我仍然继续问问题.因为我觉得我没有足够的经验做出决定,如果我不能100%确定我的理由和手段是有效的,那么我可能很难强制执行版本控制系统应该被其他人使用的方式开发人员.
编辑:
我可以看到共享文件夹与版本控制软件一起使用时存在潜在问题.但是,当推送到共享文件夹时,任何人都想更多地解释在幕后发生的事情?我的理解是共享驱动器本质上是一个共享链接/快捷方式,因此对于共享驱动器,本地计算机上的Mercurial只保留该链接的锁定,但事实是每个用户计算机可能有一个不同的Mercurial实例持有链接的锁定,而服务器的Mercurial实例将在物理驱动器上保留自己的链接.我可以看到它很复杂,但它会如何失败?我可以理解结论,但我自己不能将事实与结论联系起来