git状态如何反映其他用户在共享环境中所做的更改?

时间:2015-01-06 06:01:21

标签: git repository status bare

该主题的问题涉及gitguys.com似乎要声称要解释“在NON-NARE存储库工作的多个用户的环境中”git状态的输出不应该改变“http://www.gitguys.com/topics/shared-repositories-should-be-bare-repositories/

在上述网页中,解释说如果有人创建了“非git存储库用户和远程用户更新git对象数据库的非裸git存储库。非裸git存储库的创建者将使用git状态命令一分钟看到这个:     $ git status

# On branch master

nothing to commit (working directory clean)

下一分钟,远程用户可以将更改推送到非裸存储库。然后,当非裸git存储库的创建者输入git status时,git会找到一个不同的对象数据库,并为这次git状态运行提供不同的结果。“ 本教程以下面的断言结束,根据我的知识,我发现很难解释: 除非用户更改了工作目录或其对象数据库中的文件,否则不应更改git status的输出!

我觉得这很难解释,因为这个陈述是为什么应该在多个用户共享该存储库的中央存储库环境中使用裸存储库(而不是非裸存储库)的原因。这句话对我来说似乎不正确,因此很难理解为什么在多用户开发环境中需要裸存储库。这是不正确的,因为它意味着GIT状态受服务器存储器状态的影响我认为/相信git状态只考虑LOCAL .git文件对象和工作目录(即,不在服务器上)

请注意,我一直在试图解释为什么裸存储库是必需品而不仅仅考虑到裸存储库对共享环境有利 - 但到目前为止我还没有取得很大成功(包括在本网站中,也许是因为我没有正确地解决这个问题;我希望这次我能够正确地解决这个问题)

有人可以解释一下即使在处理具有多个用户的非裸存储库(假设有2个用户:USER A和USER B)时,例如,用户A在发出git状态时可能会得到2个不同的结果,因为更改,然后由USER B进行git推送

1 个答案:

答案 0 :(得分:0)

在我看来,虽然我可能错了,但您无法理解团队如何通过远程存储库有效地协作项目。

在开始解决你的困惑之前,我会解释一些基本概念。


首先让我们定义远程存储库的确切内容。在git的世界中,远程存储库只不过是您通过git remote command在本地存储库中注册的存储库。
此存储库甚至不需要与您的本地存储库具有共同的历史记录,它不需要是裸的,它不需要存在于服务器上 - 它甚至可以位于本地计算机上的同一文件夹中 - 它只需要通过本地存储库中的git remote注册即可被视为远程存储库

相当一般,不是吗?

在团队中工作时,git中的常见工作流将是定义中央存储库,所有开发人员都将其注册为远程数据库。克隆存储库(git clone)时,此存储库将克隆的存储库注册为远程存储库

每个开发人员现在都可以在本地工作并将更改推送到此中央存储库;其他开发人员可以从那里获取此更改。

但不一定要这样。

Git是一个分布式版本控制系统,这意味着存储库的每个克隆都是一个完整的备份,可以作为远程存储库(使用git术语) )。

这对我们意味着什么?这意味着中央存储库的工作流程只是团队中的一个共同协议,将此一个存储库视为 true


现在让我们回到你的困惑:

例如,只要您遵循中央存储库的工作流程,就不会推送更改存储库的本地克隆(意味着git status永远不会“自行更改” “)。

如果我理解您的评论,用户B克隆了用户A的存储库。我们从克隆存储库中学到了什么?用户A的存储库现在被视为用户B克隆中的远程存储库

这意味着每个推送用户B会将他的更改推送到用户A的存储库 - 默认情况下,git不允许推送到非裸存储库,但这是可能的。这样的推动可以有效地改变git status的输出,即使用户A没有做出任何改变,但是用户B也没有做出任何改变。

相关问题