这是来自gitglossary的裸仓库的定义:
裸存储库通常是一个适当命名的目录,带有 .git 后缀,它没有任何受修订控制的文件的本地签出副本。也就是说,通常存在于隐藏的 .git 子目录中的所有 Git 管理和控制文件都直接存在于 repository.git 目录中,并且没有其他文件存在和检出。公共存储库的发布者通常会提供裸存储库。
我来到这里是因为我在玩“本地存储库”,并且希望能够像远程存储库一样做任何我想做的事情。我只是在玩耍,试图了解 git。我假设这是任何想阅读此答案的人的情况。
我希望获得专家意见或一些具体的反例,但似乎(在翻阅了我找到的一些 git 源代码之后)只需转到文件 .git/config 并设置 core 属性 bare 到 true,git 会让你远程对存储库做任何你想做的事情。 IE。 .git/config 中应存在以下行:
[core]
...
bare = true
...
(这大概是git config --bool core.bare true这个命令会做的事情,可能建议处理更复杂的情况)
我对这种说法的理由是,在 git 源代码中,似乎有两种不同的方法来测试一个 repo 是否是裸露的。一种是检查全局变量is_bare_repository_cfg。这是在执行的某些设置阶段设置的,反映了在.git/config 文件中找到的值。另一个是函数is_bare_repository()。下面是这个函数的定义:
int is_bare_repository(void)
{
/* if core.bare is not 'false', let's see if there is a work tree */
return is_bare_repository_cfg && !get_git_work_tree();
}
我没有时间也没有专业知识可以绝对自信地说出这一点,但据我所知,如果你在.git/config 中将bare 属性设置为true,这应该总是返回1 .剩下的功能大概是针对以下情况的:
- core.bare 未定义(即既不是真也不是假)
- 没有工作树(即 .git 子目录是主目录)
稍后我会尝试使用它,但这似乎表明设置 core.bare = true 等同于将 core.bare 从配置文件并正确设置目录。
无论如何,设置 core.bare = true 肯定会让你推到它,但我不确定项目文件的存在是否会导致其他一些操作出错。这很有趣,我认为推送到存储库并查看本地发生的情况很有启发性(即运行 git status 并理解结果)。