Git 是';远程';外部存储库的镜像或引用?

Git 是';远程';外部存储库的镜像或引用?,git,Git,根据惯例,“起源”,“主控” 我的本地存储库有一个“主”分支 “原始/主控”是镜像还是参考 git中有两种类型的远程存储库吗? 当我执行git fetch时,会更新“源代码/主代码”。 当我执行git pull时,会更新“源/主”和本地“主” 我读到git fetch更新refs/remotes// 但我不清楚 实际上,我有两个远程存储库用于本地回购? 第一个是GitHub中的示例,另一个是my“origin” “源文件”只是参考文件还是真实的存储库(镜像) 当我执行git fetch时,我正在

根据惯例,“起源”“主控”
我的本地存储库有一个“主”分支

“原始/主控”是镜像还是参考

git中有两种类型的远程存储库吗?
当我执行
git fetch
时,会更新“源代码/主代码”
当我执行
git pull
时,会更新“源/主”和本地“主”

我读到
git fetch
更新refs/remotes//
但我不清楚

实际上,我有两个远程存储库用于本地回购?
第一个是GitHub中的示例,另一个是my“origin”

“源文件”只是参考文件还是真实的存储库(镜像)

当我执行
git fetch
时,我正在将最新的更改从远程存储库下载到我的本地存储库,但不是为“master”,那么在哪里

在此图片中,有3个存储库(本地、远程/源和远程)
这是真的吗?
“主”是分支机构的名称。 “来源”是远程存储库的名称

当您执行
git推送时
,您正在将本地主机(或另一个)分支发送到远程存储库(例如Github)。 当您执行
git fetch
时,您正在将最新的更改从远程存储库(默认的远程repo称为“origin”)下载到本地存储库,但没有将这些更改合并到本地“master”分支。

“master”是分支的名称。 “来源”是远程存储库的名称

当您执行
git推送时
,您正在将本地主机(或另一个)分支发送到远程存储库(例如Github)。 当您执行
git fetch
时,您正在将最新的更改从远程存储库(默认的远程repo称为“origin”)下载到本地存储库,但没有将这些更改合并到本地“master”分支

将公约称为“起源”、“主”。 我的本地存储库是我的“主人”

不是真的

origin
是远程回购的本地视图的简写名称。
本地存储库(也称为
.git
目录)的名称为
(dot)。
master
是可能存在于本地、远程或两者上的分支的名称。因为它是第一个分支的默认名称,所以它通常无处不在,但这不是必须的

通常,克隆远程回购时,
origin
会自动设置为指向该源远程存储库。但是,您可以将该名称更改为任何名称,也可以添加指示不同存储库的新名称。这通常被称为“使用多个遥控器”。如果您不感兴趣并且使用默认值,那么您就有一个远程目标,它的友好名称是
origin
,它是fetch/pull/etc操作的默认目标

git中有两种类型的远程存储库吗

是的,但不是你的意思。“远程存储库类型”中的“类型”可能是指“访问类型”(http/s、ssh等)或“存储库类型”(裸存储库、非裸存储库)。这就提供了许多远程回购的组合,但大部分都是无关紧要的,完全不是你所想的。根据您的想法,除了一个本地repo(
.git
dir)和远程(任何其他repo,无论是在公司服务器上、在github上、在不同目录的硬盘上,等等)之外,没有“存储库类型”

我也知道,git fetch会更新refs/remotes/下的远程跟踪分支,但我不清楚

远程跟踪分支是远程存储库的本地视图

您的本地回购有分支机构,即“主回购”
位于GitHub上的名为“origin”的远程repo可以有自己的“master”,它的版本可能与您的不同。 您的本地repo可能有一个名为
origin/master
的特殊自动分支,它可以记住远程GitHub repo上最后看到的“master”状态

当我执行git获取时,“源”将被更新

“更新源代码”非常不精确,甚至可能被理解为向远程存储库发送提交,这就是“推送”

当您提取时,git会联系存储库(不一定是远程的!),读取分支的状态,并用这些信息更新您的本地分支

例如:

# contact 'origin'
# read state of 'master' on `origin` *)
# update nothing on your local branches
git fetch origin master

# contact 'origin'
# read state of 'master' on `origin` *)
# update your local 'blaster' to match current remote master
git fetch origin master:blaster

# contact '.' (your THIS LOCAL repo)
# read state of 'blaster' on `.`
# update your local 'master' to match current local blaster
git fetch . blaster:master
# read state of 'master' on local
# contact 'origin'
# create/update the-target-branch**) on 'origin' to match local master
git push origin master

# read state of 'master' on local
# contact 'origin'
# create/update branch called 'blaster' on `origin` to match local master
# update tracking branch 'origin/blaster' to remember its new state
git push origin master:blaster

# read empty state
# contact 'origin'
# update branch called 'blaster' on `origin` to match .. empty
git push origin :blaster
# ^ this actually DELETES the branch 'blaster' from remote origin
# ^ and also deletes local tracking branches 'origin/blaster' if it existed
*)无论何时联系任何非本地回购协议,并了解到一些新的状态,git都可能会以跟踪分支的形式记住该新状态,如原始/主分支。请注意,这与
原始主机
主机
不同。通常,
master
是不明确的或隐含的本地,
origin master
表示“远程侧的master”(即将连接到远程侧以检查最新状态),而
origin/master
表示“远程侧的master”的最后已知状态(无需连接,只需使用之前检查中已知的内容)

当我进行git推送时,“源”和“主”都会更新

与前面的陈述类似,这有点不精确

当您进行推送时,分支的状态将从本地repo读取,并发送到目标远程存储库,其中的分支将使用该信息进行更新。在一个非常基本的术语中,它可以被认为是fetch的直接相反。fetch从某物读取,更新本地。push读取本地,更新某物

由于推送而更新的唯一内容是您指向的要更新的远程端。好的,还有跟踪该远程端的跟踪分支—记住它已更新

例如:

# contact 'origin'
# read state of 'master' on `origin` *)
# update nothing on your local branches
git fetch origin master

# contact 'origin'
# read state of 'master' on `origin` *)
# update your local 'blaster' to match current remote master
git fetch origin master:blaster

# contact '.' (your THIS LOCAL repo)
# read state of 'blaster' on `.`
# update your local 'master' to match current local blaster
git fetch . blaster:master
# read state of 'master' on local
# contact 'origin'
# create/update the-target-branch**) on 'origin' to match local master
git push origin master

# read state of 'master' on local
# contact 'origin'
# create/update branch called 'blaster' on `origin` to match local master
# update tracking branch 'origin/blaster' to remember its new state
git push origin master:blaster

# read empty state
# contact 'origin'
# update branch called 'blaster' on `origin` to match .. empty
git push origin :blaster
# ^ this actually DELETES the branch 'blaster' from remote origin
# ^ and also deletes local tracking branches 'origin/blaster' if it existed
事实上,我有两个