git - "git init"和 "git init --bare"有什么区别?

标签 git version-control

git initgit init --bare 有什么区别?我发现很多博客文章都需要 --bare 作为他们的 Git 服务器?

来自 the man page ,它说:

--bare

Create a bare repository. If GIT_DIR environment is not set, it is set to the current working directory

但这到底是什么意思呢? Git 服务器设置是否需要 --bare

最佳答案

非裸 Git 仓库

此变体创建了一个带有工作目录的存储库,因此您可以实际工作 (git clone)。创建它之后,您将看到该目录包含一个 .git 文件夹,历史和所有 git 管道都在其中。您在 .git 文件夹所在的级别工作。

裸 Git 仓库

另一个变体创建一个没有工作目录的存储库 (git clone --bare)。您没有可以工作的目录。在上述情况下,目录中的所有内容现在都包含在 .git 文件夹中。

为什么你会使用一个与另一个

需要没有工作目录的 git repos 是因为您可以将分支推送到它并且它不管理某人正在处理的内容。您仍然可以推送到非裸存储库,但您会被拒绝,因为您可能会移动某人正在该工作目录中处理的分支。

因此在没有工作文件夹的项目中,您只能看到 git 存储的对象。它们被压缩和序列化并存储在其内容的 SHA1(哈希)下。为了在裸存储库中获取对象,您需要 git show 然后指定要查看的对象的 sha1。您不会看到与您的项目类似的结构。

裸仓库通常是中央仓库,每个人都将他们的工作转移到那里。无需操纵实际工作。这是一种在多人之间同步工作的方法。您将无法直接查看您的项目文件。

如果您是唯一一个从事该项目的人,或者您不想要/不需要“逻辑上集中”的存储库,则您可能不需要任何裸存储库。在这种情况下,人们更喜欢从其他存储库中 git pull 。这避免了 git 在推送到非裸存储库时的反对意见。

希望对你有帮助

关于git - "git init"和 "git init --bare"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7861184/

相关文章:

Git:获取特定分支上两次提交之间的提交

visual-studio-2008 - 本地提交推送到中央服务器

git - 使用git查找文件特定行首次引入token

wordpress - 使用 Tower Git 登录 WPEngine Git Push

git - 在 GIT 上推送更改时出错。引用名称必须遵循 git ref-format 规则

Eclipse Git 关键字扩展

git - 如何使用git部署代码

java - 未显示货架选项卡时如何恢复 Intellij 中搁置的更改?

git - git merge 时始终使用本地版本的文件(即使 merge 的一侧没有更改)

version-control - 引用 Mercurial 中的当前书签