我的终端中的Git分支和远程与我在github中看到的不同

时间:2018-05-14 20:45:47

标签: git repository branch git-remote

我正在学习git,这让我感到困惑。我对分支,远程存储库和目录感到困惑。有人在我的本地机器上克隆了一个代码。当我git branch时,我看到了这三个分支:

ChrisMerge
* EliasWork
develop

当我git remote时,我得到了这些

chris
origin
prime

我想也许他们是目录,但我找不到任何名为chris,develop的目录。那么代码存储在哪里?因为每个代码都不同。

在我在github.com上的git帐户上,我想也许我可以在那里看到其中一个名字。但在分支机构下还有其他名称,如devel, ver, ... 我需要有人一劳永逸地为我说清楚。

2 个答案:

答案 0 :(得分:2)

Git 远程只是Git存储一些数据的简称。它不是目录。运行git remote会列出Git知道的所有远程名称,这基本上是git config --list将列出的以remote.开头的所有内容:您将看到:

remote.chris.url = <some url>
remote.origin.url = <another url>
remote.prime.url = <yet another url>

可能还有其他行,例如:

remote.chris.fetch = +refs/heads/*:refs/remotes/chris/*

等等。这些线条&#39; 存在创建所谓的遥控器。 fetch行特别告诉git fetch你的Git应该从其他Git复制什么,而url行告诉你的Git如何联系其他每一个GITS。

相比之下,分支名称您的 Git用于存储一个特定提交哈希ID的名称。这个名称取决于你 - 它不受任何其他Git的控制,当你要求你的Git创建分支名称时它由你控制。通常,如果名为origin的远程名称具有名为master的分支,您的 Git会将该名称记为origin/master,并且您可能希望使用您的分支名称{{ 1}}要记住master这是你Git记住你的Git通过origin/master调用的Git master的方式。

Git称这些名称为remote.origin.url等等 - 远程跟踪名称远程跟踪分支名称。它们实际上不是分支名称,它们与遥控器不同(但显然相关)。它们会让您的Git记住(&#34;跟踪&#34;)遥控器上的分支,这就是为什么它们被称为远程跟踪名称

通常,这一点都不会特别令人困惑,因为他们的Git存储库中的大多数用户只有一个远程用户,名为origin/master,因此他们的origin将与{ {1}}。但在你的情况下,你有三个遥控器。通过master命名的网址中的Git可能有一个origin/master,您的Git会通过prime记住该网址。现在,您同时拥有masterprime/master。如果您想使用这些,通常的建议是使用名为origin/master的分支来处理prime/master,并使用名为master的分支来处理origin/master }。但这注定要失败 - 所以你需要使用一些其他本地分支名称,以及那些令人困惑的地方。

幸运的是,正如我们刚刚看到的那样,您自己的分支机构名称​​不要必须匹配某个远程名称。您可以将master之类的分支连接到任何远程跟踪名称。限制是每个分支名称只能有一个这些集合。 Git称之为分支的上游

令人困惑的是,当我们将远程跟踪名称设置为分支的上游时,Git说这个分支现在正在跟踪&#34;跟踪&#34;那个远程跟踪名称。所以现在我们有:

  • 分支名称,这是我们自己编造的本地名称......
  • 跟踪(作为独立单词)上游由...制作
  • 远程跟踪名称远程跟踪分支名称,作为完整的词组,实际上是本地名称...
  • 会记住在远程上看到的分支名称 ...
  • 其中远程是某个其他Git存储库的URL的简称(哇!)。

请注意,这会不断重复使用各种单词,让它们意味着不同的东西!从术语来看,它还有很多不足之处。

在任何情况下,这些都不是您将在工作树中看到的目录,这是您工作的地方。 (Git有时会使用这些名称在prime/master中创建一些目录,但存储存储库本身的EliasWork目录在技术上并不包含在您的工作树中。)

答案 1 :(得分:0)

因为我甚至不知道非常基本的事情,所以我无法提出正确的问题。我尝试阅读和阅读并理解git一点点。我想分享一些我不知道的基本内容,希望能帮助那些不像我这样的计算机科学专业的人理解git。请注意,我并不想在这里准确,我只是希望你像我一样开始。您可以看到这个很棒的tutorial以获取更多信息。

  1. 这是包含所有文件的提交对象
  2. 通常会修改或添加文件之间的差异。所以他们可以有不同的文件
  3. 分支是我们为其命名的提交对象。他们的目的是添加一些功能或修复一些错误。就我而言,ChrisMerge,EliasWork并开发。
  4. 否则,每个提交对象都有一个名为SHA1的长名称。例如, 我的EliasWork分支有这个SHA1: 007415674d8e44908ce2786e164e9e8a751c3984 和a98fd670b9b5c39c8b049671a349f9dfd7b362e3是一个提交对象,它没有特定的分支或头名,但我提到的另一个提交对象有一个名字,EliasWork。
  5. 实际上head表示常规分支名称,HEAD是活动的分支。
  6. by active branch,我的意思是当你查看该目录时,你会看到与该分支相关的文件。如果您更改活动分支,则会看到不同的文件。
  7. 所以就像你有一些分支就像不同的目录一样。但您只能查看和修改活动分支的文件。 EliasWork在这里是活动分支,我看到与这个分支相关的文件。
  8. Chris,origin和prime是远程存储库。他们有自己的分支和承诺。这里的原点是我在github帐户上看到的。我已经在我的本地机器上克隆了这个远程存储库,并且我拥有所有的提交对象,但我只有远程活动分支,即develop,而不是其他分支。然后我创建了另一个名为EliasWork的分支,因此我可以修改代码,然后将其推送到主存储库