Git 获取远程远程和远程分支
我想获取远程存储库的远程分支 比如说,在这种情况下-Git 获取远程远程和远程分支,git,branch,Git,Branch,我想获取远程存储库的远程分支 比如说,在这种情况下- $ cd alpha $ git remote beta $ git branch -a master remotes/alpha/master $ cd ../beta $ git remote gamma $ git branch -a master remotes/gamma/slave -我想通过beta将gamma的slave分支提取到alpha存储库中。这可能会将gamma添加为alpha的远程,并将gamma/slave用于新
$ cd alpha
$ git remote
beta
$ git branch -a
master
remotes/alpha/master
$ cd ../beta
$ git remote
gamma
$ git branch -a
master
remotes/gamma/slave
-我想通过beta
将gamma
的slave
分支提取到alpha
存储库中。这可能会将gamma
添加为alpha
的远程,并将gamma/slave
用于新分支的refspec。我不一定要创建本地跟踪分支。我也不一定有文件系统访问beta
或gamma
,这与示例中不同
这类事情可以通过
$git clone--mirror
来完成,但是在已经存在的回购协议中有没有办法做到这一点呢?看起来设置一个非默认的refspec会让我半途而废
例如,考虑这个设置:
- 初始化
gamma
$ (mkdir gamma; cd gamma; git init; touch README; git add README; git commit -m 'Initialized slave.'; git branch -m slave; echo) Initialized empty Git repository in /tmp/test-git/gamma/.git/ [master (root-commit) 0cebd50] Initialized slave. 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 README
- 初始化
并将beta
添加为远程:gamma
$ (mkdir beta; cd beta; git init; touch README; git add README; git commit -m 'Initialized master.'; git remote add gamma ../gamma; git fetch gamma echo; echo "In repo $(basename $PWD):"; git branch -a; echo) Initialized empty Git repository in /tmp/test-git/beta/.git/ [master (root-commit) f6512e1] Initialized master. 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 README 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 ../gamma * [new branch] slave -> gamma/slave In repo beta: * master remotes/gamma/slave
- 克隆
生成beta
:alpha
$ git clone beta alpha Initialized empty Git repository in /tmp/test-git/alpha/.git/ $ cd alpha; git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master
# Avoid errors from pulling into active branch.
$ git checkout origin/master | head -3 # intentionally acquire severed HEAD
Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
$ git fetch origin '+refs/*:refs/*' # pour steroids into open esophagus
From /tmp/test-git/beta
* [new branch] gamma/slave -> gamma/slave
$ git branch -a
* (no branch)
master
remotes/gamma/slave
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git remote
origin
因此,执行“$git fetch”+refs/:refs/”将引入分支本身,但不会更新构成其所属远程服务器的配置项
有趣的是,为远程分支设置跟踪分支将导致它开始跟踪自己的回购:
$ git branch --track slave gamma/slave
Branch slave set up to track local ref refs/remotes/gamma/slave.
$ git config -l | grep '^remote\|^branch'
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=/tmp/test-git/beta
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.slave.remote=.
branch.slave.merge=refs/remotes/gamma/slave
我想这真的不管用
$ git checkout slave
Switched to branch 'slave'
$ git fetch
From .
* remote branch gamma/slave -> FETCH_HEAD
$ git fetch
From .
* remote branch gamma/slave -> FETCH_HEAD
我也有点同样的情况;从上游获取一个回购协议,然后我在本地克隆了相同的回购协议。上游回购是巨大的,我在移动互联网上,所以我不想从上游获取所有分支。有几个问题是“如何获取所有远程分支?”有很多的升级投票,简单的答案通常是普通的克隆/获取可以做到这一点,但这似乎只是在使用“中央存储库”时才会出现。