Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时在Git中创建本地远程跟踪分支?_Git - Fatal编程技术网

何时在Git中创建本地远程跟踪分支?

何时在Git中创建本地远程跟踪分支?,git,Git,在本地Git存储库中,此文件夹包含克隆后的头文件: .git\refs\remotes\origin\ 当我从远程跟踪分支创建本地分支时,将在以下位置创建该分支: .git\refs\heads .git\refs\remotes\origin\ 当我将本地分支上的更改推送到远程存储库时,将在以下位置创建该分支的新副本: .git\refs\heads .git\refs\remotes\origin\ 远程跟踪分支最初被推送到远程存储库时是否首先在上面的文件夹中创建?您不应该关心分支

在本地Git存储库中,此文件夹包含克隆后的头文件:

.git\refs\remotes\origin\
当我从远程跟踪分支创建本地分支时,将在以下位置创建该分支:

.git\refs\heads
.git\refs\remotes\origin\
当我将本地分支上的更改推送到远程存储库时,将在以下位置创建该分支的新副本:

.git\refs\heads
.git\refs\remotes\origin\
远程跟踪分支最初被推送到远程存储库时是否首先在上面的文件夹中创建?

您不应该关心分支存储在哪里(因为您应该使用“公布的”接口,
git branch
git for each ref
,等等)。不过,when问题更有趣

远程跟踪分支只是
refs/remotes
名称空间中的引用。通常情况下,会增加一个级别,特别是远程设备本身的名称,因此对于名为
origin
的远程设备,分支将全部归入
refs/remotes/origin

git clone
命令在本地git配置文件(针对该存储库)中创建一个
remote
配置条目。假设您告诉
git clone
使用默认的
origin
名称,此配置条目将部分读取:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
这就是名称空间的来源:
remote.origin
配置条目中的
fetch
行,即来自:

$ git config --get-all remote.origin.fetch
实际的远程跟踪分支创建发生在几个地方

最明显的情况是
fetch
(或初始的
clone
步骤,其中包括
fetch
)或
git远程更新运行时。这些命令询问遥控器有关其引用的信息。与一个或多个
fetch
行匹配的那些将根据每个refspec的右侧进行复制和修改

这意味着,在
git clone
git fetch origin
git remote origin update
期间,如果远程设备具有
refs/heads/foo
(分支
foo
),您自己的本地存储库将获得相应的
refs/remotes/origin/foo
。如果以前没有,这将创建一个(本地)远程跟踪分支

(如果您运行
git fetch
,从而阻止它获取分支
foo
,则不会创建跟踪分支。例如,如果您运行
git fetch origin refs/heads/bar:refs/temp_bar
,则此提取只会带来
refs/heads/bar
。不同版本的git将创建或不创建upda此时te
refs/remotes/origin/bar
:1.8.4之前的版本不会,但较新的gits会。所有这些都假设正常的
获取
配置。)

git push
过程中会出现一个不太明显的情况。在这种情况下,当本地git成功地传递对远程的
refs/heads
名称空间的引用时,本地git还将使用与
git fetch
相同的refspec映射创建或更新远程跟踪分支,按下
refs/heads/new
,在远程
origin
上创建分支
foo
,也会创建一个(本地)远程跟踪分支
refs/remotes/origin/new(我用粗体表示,因为我认为这是我想问的问题的答案。)

如果您将
--prune
添加到
git fetch
git remote update
命令中,它还将在此时删除远程跟踪分支,如果它们现在在远程上丢失,它们可以分辨出来,因为它们从远程获取所有引用。(请记住,这与
git push
--prune
选项非常不同,后者用于删除远程上的分支,la
git push--delete
git push:dst

那么,当远程跟踪分支最初被推送到远程存储库时,它们是否首先在上述文件夹中创建?请澄清您的问题。