Bare和非Bare存储库之间的实际区别是什么?

Bare和非Bare存储库之间的实际区别是什么?

我一直在阅读Git中的裸机和非裸机/默认存储库。我无法理解(理论上)它们之间的差异,以及为什么我应该“推”到一个裸存储库。这是交易:

目前,我是唯一一个在3台不同计算机上工作的人,但是后来会有更多人参与其中,所以我使用Git进行版本控制。我在所有计算机上克隆了裸仓库,当我在其中一台计算机上完成修改后,我提交并将更改推送到裸仓库。从我所读到的,裸存储库没有“工作树”,所以如果我克隆裸仓库,我将没有“工作树”。

我猜测工作树存储项目中的提交信息,分支等。这不会出现在裸仓库中。因此,对于我来说,使用工作树将提交“推送”到repo似乎更好。

那么,为什么我应该使用裸存储库,为什么不呢?有什么实际区别?我认为,这对于从事项目的更多人来说没有好处。

你做这种工作的方法是什么?建议?


慕容3067478
浏览 760回答 3
3回答

慕村225694

裸存储库和非裸存储库之间的另一个区别是裸存储库没有默认的远程源存储库:~/Projects$ git clone --bare test bareInitialized empty Git repository in /home/derek/Projects/bare/~/Projects$ cd bare~/Projects/bare$ git branch -a* master~/Projects/bare$ cd ..~/Projects$ git clone test non-bareInitialized empty Git repository in /home/derek/Projects/non-bare/.git/~/Projects$ cd non-bare~/Projects/non-bare$ git branch -a* master   remotes/origin/HEAD -> origin/master   remotes/origin/master从手册页git clone --bare:远程处的分支头也直接复制到相应的本地分支头,而不将它们映射到refs / remotes / origin /。使用此选项时,既不会创建远程跟踪分支,也不会创建相关的配置变量。据推测,当它创建一个裸存储库时,Git假定裸存储库将作为几个远程用户的源存储库,因此它不会创建默认的远程源。这意味着基本git pull和git push操作将无法工作,因为Git假设没有工作空间,您不打算对裸存储库进行任何更改:~/Projects/bare$ git pushfatal: No destination configured to push to.~/Projects/bare$ git pullfatal: /usr/lib/git-core/git-pull cannot be used without a working tree.~/Projects/bare$

炎炎设计

裸存储库只是.git文件夹本身,即裸存储库的内容与本地工作存储库中.git文件夹的内容相同。在远程服务器上使用裸存储库以允许多个贡献者推动他们的工作。非裸 - 具有工作树的那个在您项目的每个贡献者的本地机器上是有意义的。
打开App,查看更多内容
随时随地看视频慕课网APP