Git - 为什么"共享存储库应该是裸存储库"?这是过时的建议吗?

But*_*kus 2 git github

我是git和Github的新手.我已经学习了许多术语(推,拉,提交,分支等),但我将主要使用常用的说法来解释我最初的期望.

我假设这个过程是:

1.) Create a git repo out of my existing files.
2.) Copy those to my Github account to create a central "hub".
3.) Anyone who works on the project will check it out from Github, do work on their computers, then upload the changes to the hub.
4.) Anyone else working on the same branch can easily upload their changes as well, and will be warned if there are any conflicts. They can also easily download changes since their last download to update their local copy.
Run Code Online (Sandbox Code Playgroud)

所以我做了第1步和第2步.我创建了一些分支.我做了一些提交并将更改推送到Github.我还在另一台机器上克隆了主分支,然后分支出来.我把新分支推到了Github.一切似乎都很好.但是现在,当我准备将其他开发人员添加到项目中时,我反复告诫"中央"存储库应该"裸露".

在这里,这里("不建议推入非裸存储库"),atlassian说 "中央存储库应该始终是裸存储库",以及其他几个地方.显然,如果它不是裸露的,而其他人推送一个新文件,那么当我推送时,我的本地版本会认为自己删除了该文件.我最终会撤消其他开发人员的工作,这是我试图用git修复的问题!

这让我很担心,因为我已经用一堆文件设置了我的Github项目.我正准备找出将我的集线器转换为裸仓库的工作,当我发现一些信息表明使用较新版本的Git时,你不需要在集线器上有一个裸存储库.我认为这与版本2.3有更新的行为有关git push.这是真的吗?为什么?

如果我的本地Windows机器有2.7版本,但另一台CentOS机器使用的是1.7.1,我该怎么办?

rod*_*igo 6

非裸存储库的问题是它们有一个签出分支,如果有人推送到那个分支,那么事情就变得奇怪了:工作副本和索引将在分支后面.这不应该发生在正常的工作流程中:想象如果在非裸主仓库中收到推送分支之后会发生什么,你会进行一行提交?您的提交实际上会回滚所有收到的更改,甚至不会向索引添加任何文件.

GitHub回购是裸的.虽然你可以看到文件和分支,但实际上并没有检出(你不能直接在github分支中提交!).