什么是裸存储库,为什么我需要它?

Alb*_*ert 15 git github git-bare

这可能已经得到了回答,但我没有找到一个好的答案.
我来自集中式存储库,例如SVN,通常您只执行检出,更新,提交,还原,合并等等.

Git让我发疯.有很多命令,但最难理解的是为什么很多东西都像他们一样工作.

根据"什么是裸git存储库?" :

使用创建的存储库git init --bare称为裸存储库.它们的结构与工作目录略有不同.首先,它们不包含源文件的工作或签出副本.
...
创建的裸存储库git init --bare用于... 共享....开发人员将克隆共享裸仓库,在其仓库的工作副本中进行本地更改,然后回退到共享裸仓库以使其他用户可以使用其更改.
- Jon Saints,http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/

但是,从接受的答案"github存储库和git裸存储库之间有什么区别?" :

GitHub上的Git repos是裸的,就像你要推送到[sic]的任何远程仓库一样.
- VonC,https://stackoverflow.com/a/20855207

但是,在GitHub中有源文件.我可以看到他们.如果我创建一个裸存储库,则没有源文件,只有.git工作存储库目录的内容.

这怎么可能?我不明白什么?

您能举例说明为什么我需要一个裸存储库及其以这种方式工作的动机吗?

UPDATE

爱德华汤姆森的回答部分是我想知道的.不过,我会重新提出我的问题:

我发布了第一个链接状态("什么是裸git存储库?"):

它们[裸存储库]不包含源文件的工作或签出副本.

VonC的回答:

GitHub上的Git repos是裸的

两个陈述暗示

Github没有工作副本.

爱德华汤姆森说:

它会在您浏览数据时根据数据呈现网页 - 将数据直接从存储库中提取出来并输出到您的Web浏览器,而不是先将数据写入文件服务器上的磁盘

不知何故,裸存储库必须包含所有数据和源代码.如果没有,那么渲染任何东西都不是不可能的,因为我可以看到所有源代码更新(提交),所有分支(具有各自的源),回购的整个日志等.

存储库的整个数据是否始终位于.git目录(或裸存储库)中,以某种格式可以随时呈现所有文件?这是裸存储库的原因,而工作副本只在给定时间有文件吗?

Von*_*onC 6

存储库的整个数据是否总是在.git目录内(或在一个裸存储库中),以某种格式能够随时呈现所有文件?

是的,这些文件和它们的完整历史记录都存储在.git/packed-refs.git/refs,和git的/对象.

当你克隆一个repo(裸或不)时,你总是拥有它的Git管理和控制文件的.git文件夹(或带有.git裸仓的扩展名的文件夹,通过命名约定).(见词汇表)

Git可以随时解压缩git unpack-objects所需的内容.

诀窍是:

从一个简单的仓库,你可以查询日志(git log在一个git 仓库工作正常:不需要一个工作树),或在一个裸仓库中列出文件.
或者从裸仓库中显示文件的内容.
这就是GitHub如何使用文件呈现页面而无需检出完整的回购.

我不知道,GitHub的不准确,虽然,作为回购的数量之多,迫使GitHub的工程队做所有种类的优化.
例如,查看他们如何优化克隆/获取回购.
使用DGit,这些裸存储库实际上是在多个服务器上复制的.

这是裸存储库的原因,而工作副本只在给定时间有文件吗?

对于GitHub,维护一个工作树会在磁盘空间和更新中花费太多(当每个用户请求一个不同的分支时).最好从独特的裸仓库中提取您需要渲染页面的内容.

通常(在GitHub约束之外),使用裸仓库进行推送,以避免工作树与刚刚推送工作树不同步.有一个具体的例子,请参阅" 但为什么我需要一个简单的回购? ".

话虽如此:

但是对于GitHub来说这是不可能的,因为GitHub不能为它必须存储的每个repo维护一个(或服务器)工作树.


归档时间:

查看次数:

4465 次

最近记录:

9 年,4 月 前