Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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会创建远程(跟踪)分支‍‍‍除了当我从原点提取时的 我试过这个实验: 当前目录中有三个目录:origin、bare\u clone和remote。现在: $ cd ./origin $ git init $ cat > 1 ^Z $ git add 1 $ git commit -m "add 1 in initial commit" $ cd ../bare_clone $ git clone

首先,我知道。我想知道为什么当我的当前存储库是空的,并且我从远程存储库中获取时,git会创建
远程(跟踪)分支‍‍‍除了当我从
原点提取时的

我试过这个实验:

当前目录中有三个目录:
origin
bare\u clone
remote
。现在:

$ cd ./origin
$ git init
$ cat  > 1
^Z
$ git add 1
$ git commit -m "add 1 in initial commit"



$ cd ../bare_clone
$ git clone --bare ../origin

$ cd ../remote
$ git init
$ cat  > 1
^Z
$ git add 1
$ git git commit -m "add 1 in initial commit"
$ git branch test

$ cd ../bare_clone/origin.git/
$ git remote add remote_name ../../remote/
____________________________________________
$ git fetch remote_name
warning: no common commits
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../../remote
 * [new branch]      master     -> remote_name/master
 * [new branch]      test       -> remote_name/test
____________________________________________
$ git branch -a
* master
  remotes/remote_name/master
  remotes/remote_name/test
____________________________________________
$ cd ../../origin/
$ git branch origin_test_branch
____________________________________________
$ cd ../bare_clone/origin.git/
t$ git fetch origin
From path/to/bare_clone/../origin
 * branch            HEAD       -> FETCH_HEAD
____________________________________________
$ git branch -a
* master
  remotes/remote_name/master
  remotes/remote_name/test
您可以看到创建了两个远程分支,用于跟踪
远程\u name
存储库的分支,但没有远程分支用于跟踪
源代码的分支
源代码\u测试\u分支

A

--bare
克隆通常用作推送操作的接收者(而不是其他),因此,实际上并不期望它进行抓取

如果查看
--bare
克隆的
config
文件,您将看到:

$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = true
[remote "origin"]
    url = ...
请注意,
[远程“原点”]
部分中缺少
fetch=
行。这意味着在执行
git fetch
时,默认情况下不复制任何引用(因为复制的引用是在
fetch=
行中列出的引用)

将其与git clone--mirror比较,例如,

$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = true
[remote "origin"]
    url = ...
    fetch = +refs/*:refs/*
    mirror = true
这表示在获取操作中,使用从远程
源站
获取的引用覆盖所有引用。请注意,这会自动拾取
refs/tags/*
refs/notes/*
(因为它会获取每个
refs/*
引用)

您可能希望使用非裸克隆获得正常的“仅复制分支,并在复制时重命名分支”行为。如果是这样,则必须在创建裸存储库后添加适当的
fetch=
行:

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
但是,请注意,
git-fetch
在这样的获取过程中也可能会带来一些(但不是全部)标记(我不确定
git-fetch
特殊情况下是否会出现克隆)。由于标签不需要重命名,这可能不是您想要的(但也可能是这样,您必须考虑这一点并自行决定)。

A
--bare
clone通常用于推送操作(而不是其他操作)的接收者,因此实际上不需要执行抓取操作

如果查看
--bare
克隆的
config
文件,您将看到:

$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = true
[remote "origin"]
    url = ...
请注意,
[远程“原点”]
部分中缺少
fetch=
行。这意味着在执行
git fetch
时,默认情况下不复制任何引用(因为复制的引用是在
fetch=
行中列出的引用)

将其与git clone--mirror比较,例如,

$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = true
[remote "origin"]
    url = ...
    fetch = +refs/*:refs/*
    mirror = true
这表示在获取操作中,使用从远程
源站
获取的引用覆盖所有引用。请注意,这会自动拾取
refs/tags/*
refs/notes/*
(因为它会获取每个
refs/*
引用)

您可能希望使用非裸克隆获得正常的“仅复制分支,并在复制时重命名分支”行为。如果是这样,则必须在创建裸存储库后添加适当的
fetch=
行:

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
但是,请注意,
git-fetch
在这样的获取过程中也可能会带来一些(但不是全部)标记(我不确定
git-fetch
特殊情况下是否会出现克隆)。由于标签不经过重命名,这可能不是您想要的(但也可能是,您必须考虑这一点并自行决定)