Git 的本地存储库和远程存储库——令人困惑的概念

如果我理解正确的话,Git 有两种存储库: 一种叫本地存储库,另一种叫远程存储库。关于这两种类型的存储库,我的问题非常幼稚。

这么说对吗

  • Git 本地存储库是我们将在其上进行本地更改的存储库,通常这个本地存储库位于我们的计算机上。

  • Git 远程存储库是服务器之一,通常是位于42英里外的一台机器。

另一个问题: 一些教程向我展示了这个工作流程

  • 我的项目
  • CD 我的项目
  • 走吧
  • 触摸自述
  • Git 添加自述文件
  • 滚出去

我看到 git init为我的项目创建了一个本地存储库 git commit指令。如果我还没有设置远程存储库,Git 如何知道在哪里提交我的 README文件?

我希望我说得够清楚了。

[编辑]我使用 Git 的方式可能与其他人不同: 我使用一个私有的 Git 存储库来备份我的代码。所以我确实需要一个远程存储库。在这种情况下,本地存储库应该是无意义的。我说的对吗?谢谢你的澄清。这些都是我在其他地方找不到答案的最天真的问题。

123370 次浏览

你引用的陈述是正确的。

您根本不需要有一个远程存储库。
您可以通过提交、分支、合并、重建等方式获得完整的 git 体验,只需要一个本地存储库。

远程存储库(如 GitHub)的目的是向全世界(或某些人)发布代码,并允许他们读写代码。

只有当您的本地 git push提交到远程存储库,或者当您的 git pull提交到其他人的远程存储库时,才涉及远程存储库。

如果我还没有设置远程存储库,Git 如何知道在哪里提交 README 文件?

You are committing to your local repository (which is a proper repository with its own change control; it isn't just a local checkout … since you created it locally, it isn't 甚至 a local checkout!).

如果希望将更改发送到远程存储库(以备份它们,使它们对团队的其他成员可用,或者将它们发布到全世界) ,则必须对它们进行 用力

Git 是一个 分发版本控制系统,它让 Git 变得非常棒。您的本地存储库具有与任何其他 Git 存储库完全相同的特性和功能。所以服务器上的 Git 回购和 GitHub 上的 Git 回购是一样的(GitHub 增加了额外的功能,但是在它的核心,你正在处理的是 Git 存储库) ,这和你同事的本地回购是一样的。

这有什么好的?因为没有中央回购,你必须有权利做你的工作。即使没有互联网接入,您也可以在本地机器上对自己的回购进行提交、分支和聚会。然后,当您再次建立连接时,您可以将更改推送到您可以访问的任何其他 Git 回购。因此,尽管大多数人将特定的回购视为中央回购(存储库) ,但这是一种过程选择,而不是 Git 的要求。

所有这一切的重点是声明(像其他人一样) ,您正在提交您的 README 到您的本地回购。然后,无论什么时候你选择,你可以把变化从你的本地回购到任何其他回购。真漂亮!

正如我正在经历完全相同的问题像你(来自于一个 href = “ https://en.wikipedia.org/wiki/Microsoft _ Visual _ SourceSafe”rel = “ nofollow noReferrer”> VSS 和一个 href = “ https://en.wikipedia.org/wiki/Team _ Foundation _ Server”rel = “ nofollow noReferrer”> TFS 心态) ,并在过去3天开始了解。我相信这些图表对于其他被困在那里的人来说会更有帮助。

发信人: https://greenido.files.wordpress.com/2013/07/git-local-remote.png?w=696&h=570

Git Flow diagram 1

另一个,来自 https://wiki.lsr.ei.tum.de/lib/exe/fetch.php?media=nst/programming/git_flow.jpg&w=500&tok=e87798

Git flow diagram 2

例如,在 github 上远程存储库实例的需要只是与其他程序员共享代码,因为他们不能仅仅访问你的 git repo (除非他们使用你的 ip 连接到你的电脑,那么他们只能访问你的更改,而不是其他程序员的更改) ,这就是为什么将你的更改从本地存储库提交到远程/中央 repo,这样其他开发人员就可以检查它们,最终得到相同的软件状态。但是在最后,如果您是唯一的开发人员,您并不真正需要一个远程/中央回购。