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