在Git中的裸存储库中从源站获取不会创建;“远程分支”;
首先,我知道。我想知道为什么当我的当前存储库是空的,并且我从远程存储库中获取时,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
远程(跟踪)分支代码>除了当我从原点提取时的
我试过这个实验:
当前目录中有三个目录: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
特殊情况下是否会出现克隆)。由于标签不经过重命名,这可能不是您想要的(但也可能是,您必须考虑这一点并自行决定)