Git分支:主节点与源节点/主节点与远程节点/源节点/主节点

Git分支:主节点与源节点/主节点与远程节点/源节点/主节点,git,git-remote,Git,Git Remote,我认为我理解git的基本概念是正确的 我已经建立并克隆了一个远程存储库。我还创建了一个服务器端空存储库,并将本地存储库链接到它 我的问题是我不理解以下两者之间的区别: 原点/主控与遥控器/原点/主控 据我所知,master是本地分支,remotes/origin/master是远程分支 但是,究竟什么是源代码/主代码?获取远程存储库的克隆并运行git branch-a(以显示git知道的所有分支)。它可能看起来像这样: * master remotes/origin/HEAD ->

我认为我理解git的基本概念是正确的

我已经建立并克隆了一个远程存储库。我还创建了一个服务器端空存储库,并将本地存储库链接到它

我的问题是我不理解以下两者之间的区别:

  • 原点/主控与遥控器/原点/主控
据我所知,master是本地分支,remotes/origin/master是远程分支


但是,究竟什么是源代码/主代码?

获取远程存储库的克隆并运行
git branch-a
(以显示git知道的所有分支)。它可能看起来像这样:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
这里,
master
是本地存储库中的一个分支
remotes/origin/master
是名为
origin
的远程设备上名为
master
的分支。您可以将其称为
origin/master
,如中所示:

git diff origin/master..master
您也可以将其称为
遥控器/origin/master

git diff remotes/origin/master..master
这只是引用同一事物的两种不同方式(顺便说一句,这两个命令的意思都是“显示远程
master
分支和我的
master
分支之间的更改”)


remotes/origin/HEAD
是名为
origin
的远程设备的
默认分支
。这使您可以简单地说
origin
,而不是
origin/master
,从技术上讲,实际上没有任何“远程设备”“在Git回购协议中,只有本地名称应该与另一个不同回购协议上的名称相对应。名为
origin/which
的文件最初将与您从中克隆的回购文件上的文件匹配:

git clone ssh://some.where.out.there/some/path/to/repo # or git://some.where...
制作另一份回购协议的本地副本。在此过程中,它会记录所有存在的分支,以及那些引用的提交,并将它们粘贴到本地repo的名称下
refs/remotes/origin/

根据您在
git fetch
或更新“what's some.where.out.there”的等效文件之前的时间长短,他们可能会更改分支、创建新分支和删除一些分支。当您执行
git fetch
(或
git pull
,即真正的fetch+merge)时,您的repo将复制他们的新作品,并根据需要更改所有
ref/remotes/origin/
条目。正是在
fetch
ing的时刻,一切都匹配起来了(好吧,这和最初的克隆,还有一些
push
ing的情况,基本上只要Git有机会检查,但请参见下面的警告)

Git通常让您将自己的
refs/heads/
称为
,而将远程引用为
origin/
,这一切都很有效,因为很明显哪个是哪个。有时可以创建自己的分支名称,使其不明显,但在发生之前不要担心这一点。:-)只要给Git起一个最短的名字就可以了,它将从那里开始:
origin/master
是“上次我检查时master在哪里”,而
master
是“根据我所做的事情,master在哪里”。运行
git fetch
根据需要在“主机在哪里”上更新git


警告:在1.8.4之前的Git版本中,
Git fetch
有一些模式不会更新“主机在哪里”(更准确地说,是不会更新任何远程跟踪分支的模式)。运行
git fetch origin
,或
git fetch--all
,甚至只是
git fetch
,都会更新。运行
git fetch-origin-master
时不会出现问题。不幸的是,这种“不更新”模式是由普通的
git pull
触发的。(这主要是一个小麻烦,在Git 1.8.4及更高版本中已修复。)



有一种东西叫做“遥控器”。但那也是本地的!名称
origin
是Git称之为“远程”的东西。它基本上只是克隆时使用的URL的一个简短名称。它也是
origin/master
origin
的来源。名字
origin/master
被称为远程跟踪分支,有时会缩写为“远程分支”,尤其是在旧的或更非正式的文档中。

对于像我这样的傻瓜(从Torek偷来的):

  • 原点/master是“上次我检查时master在哪里”
  • master是“根据我所做的事情,master在这里的位置”
    • 一个澄清(也是让我困惑的一点):

      “remotes/origin/HEAD是默认分支”实际上并不正确

      remotes/origin/master是远程存储库中的默认分支(上次检查时)。头不是一根树枝,它只是指向一根树枝

      将头部视为您的工作区域。当您这样想时,“git checkout branchname”对于将您的工作区文件更改为特定分支的文件是有意义的。您可以将分支文件“签出”到您的工作区域。所有实际用途的头部都是您在工作区域可以看到的

    • 来源-这是指向远程的自定义和最常见的名称
    • $git remote add origin
      ——您将运行此命令将github项目链接到origin。这里的原点是用户定义的。 您可以通过
      $git remote rename old name new name


    • master-Git中的默认分支名称是master。用于远程和本地计算机
    • 来源/master-这只是远程回购中引用主分支的指针。记得我说过原点指向远方
    • $git fetch origin
      -将对象和引用从远程存储库下载到本地计算机[ori]
      $ tree  
      .  
      ├── branches  
      ├── config  
      ├── description  
      ├── FETCH_HEAD  
      ├── gitk.cache  
      ├── HEAD  
      ├── hooks  
      │   ├── applypatch-msg.sample  
          ...
      ├── index  
      ├── info  
      │   └── exclude  
      ├── logs  
      │   ├── HEAD  
      │   └── refs  
      │       ├── heads  
      │       │   ├── master  
      │       │   └── remotes  
      │       │       └── origin  
      │       └── remotes  
      │           └── origin  
      │               ├── distro  
      │               │   ├── cib  
      │               │   │   └── libreoffice-6-0  
      │               │   ├── collabora  
      │               │   │   └── cp-6.0  
      │               │   └── lhm  
      │               │       └── libreoffice-5-2+backports  
      │               ├── HEAD  
      │               ├── libreoffice-6-2  
      │               ├── master  
      │               └── private  
      │                   └── mst  
      │                       └── sw_redlinehide_4a  
      ├── objects  
      │   ├── info  
      │   └── pack  
      │       ├── pack-b80087dc57e2b3315f449ca0f1aaa91987bf0c5e.idx  
      │       ├── pack-b80087dc57e2b3315f449ca0f1aaa91987bf0c5e.pack  
      │       ├── pack-eb4e6808029e712d8d9c2671accbbd98aaeb9a04.idx  
      │       └── pack-eb4e6808029e712d8d9c2671accbbd98aaeb9a04.pack  
      ├── ORIG_HEAD  
      ├── packed-refs  
      └── refs  
          ├── heads  
          │   ├── master  
          │   └── remotes  
          │       └── origin  
          ├── remotes  
          │   └── origin  
          │       ├── distro  
          │       │   ├── cib  
          │       │   │   └── libreoffice-6-0  
          │       │   ├── collabora  
          │       │   │   └── cp-6.0  
          │       │   └── lhm  
          │       │       └── libreoffice-5-2+backports  
          │       ├── HEAD  
          │       ├── libreoffice-6-2  
          │       ├── master  
          │       └── private  
          │           └── mst  
          │               └── sw_redlinehide_4a  
          └── tags  
              └── libreoffice-6-2-branch-point  
      
      32 directories, 45 files
      
      repositories (i.e. independent trees)
      ├──local
      │  └──master
      │
      └──origin1
      │  └──master
      └──origin2
         └──master
      
      $ cat .git/HEAD                        #         local:  HEAD -> master
      ref: refs/heads/master
      
      $ cat .git/refs/remotes/origin/HEAD    # remote origin:  HEAD -> master
      ref: refs/remotes/origin/master
      
      $ git branch -a
      * master
        remotes/origin/HEAD -> origin/master
        remotes/origin/aoo/aw080
        remotes/origin/aoo/trunk
        remotes/origin/distro/capgemini/cg-4.1
        remotes/origin/distro/cib/libreoffice-5-0
        remotes/origin/distro/cib/libreoffice-5-1
        remotes/origin/distro/cib/libreoffice-5-2
        ...
      
      $ cat refs/heads/master                   # local         master
      1ca409292272632f443733450313de5a82c54a9c
      
      $ cat refs/remotes/origin/master          # remote origin master
      1ca409292272632f443733450313de5a82c54a9c
      
      [local] master = [remote] origin master
      
      $ cat packed-refs 
      # pack-refs with: peeled fully-peeled 
      3c1d4742e649fe9c8aed8c2817fe3e1f3364f298 refs/remotes/origin/aoo/aw080
      e87c8b7922e9a73e0abb7f9a7a47c9ac3374a826 refs/remotes/origin/aoo/trunk
      b70fdffb041c12f124dcc0822b61bf3450e53137 refs/remotes/origin/distro/capgemini/cg-4.1
      5dbc3f1754809b9489faaf380b1a4bdbcfbb6205 refs/remotes/origin/distro/cib/libreoffice-5-0
      cfdbc96ca47d68d6785fd21829a8d61f49d6e591 refs/remotes/origin/distro/cib/libreoffice-5-1
      5189c8c47461ef09739086e55512fc6a10245273 refs/remotes/origin/distro/cib/libreoffice-5-2
      3bee5917569ca8e6ee3b086458f5b1a917b88ca1 refs/remotes/origin/distro/cib/libreoffice-5-3
      92fbe703f9ca480d3a2b8610d87e991c729edf77 refs/remotes/origin/distro/cib/libreoffice-5-4
      05c0a5df66cc69d75280f05b804cf82f3387d42b refs/remotes/origin/distro/cib/libreoffice-6-0
      7fe193e759b24b90852e6e327115b77114d7b119 refs/remotes/origin/distro/cib/libreoffice-6-1
      8187f7aa413e7ef7b377eea2b057d336bf256867 refs/remotes/origin/distro/collabora/cd-5.3
      7a6b608591e21ef61dc05cff9fc58da531035755 refs/remotes/origin/distro/collabora/cd-5.3-3.1
      ....