我正在学习git,这让我感到困惑。我对分支,远程存储库和目录感到困惑。有人在我的本地机器上克隆了一个代码。当我git branch
时,我看到了这三个分支:
ChrisMerge
* EliasWork
develop
当我git remote
时,我得到了这些
chris
origin
prime
我想也许他们是目录,但我找不到任何名为chris,develop的目录。那么代码存储在哪里?因为每个代码都不同。
在我在github.com上的git帐户上,我想也许我可以在那里看到其中一个名字。但在分支机构下还有其他名称,如devel, ver, ...
我需要有人一劳永逸地为我说清楚。
答案 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
记住该网址。现在,您同时拥有master
和prime/master
。如果您想使用这些,通常的建议是使用名为origin/master
的分支来处理prime/master
,并使用名为master
的分支来处理origin/master
}。但这注定要失败 - 所以你需要使用一些其他本地分支名称,以及那些令人困惑的地方。
幸运的是,正如我们刚刚看到的那样,您自己的分支机构名称不要必须匹配某个远程名称。您可以将master
之类的分支连接到任何远程跟踪名称。限制是每个分支名称只能有一个这些集合。 Git称之为分支的上游。
令人困惑的是,当我们将远程跟踪名称设置为分支的上游时,Git说这个分支现在正在跟踪&#34;跟踪&#34;那个远程跟踪名称。所以现在我们有:
请注意,这会不断重复使用各种单词,让它们意味着不同的东西!从术语来看,它还有很多不足之处。
在任何情况下,这些都不是您将在工作树中看到的目录,这是您工作的地方。 (Git有时会使用这些名称在prime/master
中创建一些目录,但存储存储库本身的EliasWork
目录在技术上并不包含在您的工作树中。)
答案 1 :(得分:0)
因为我甚至不知道非常基本的事情,所以我无法提出正确的问题。我尝试阅读和阅读并理解git一点点。我想分享一些我不知道的基本内容,希望能帮助那些不像我这样的计算机科学专业的人理解git。请注意,我并不想在这里准确,我只是希望你像我一样开始。您可以看到这个很棒的tutorial以获取更多信息。