如何';git远程添加';并跟踪同一文件系统中的分支
我在/a和/b中有2个本地git存档,它们是从remotes/origin克隆的 在/b上有一个新的分支z 如何从存档/a中跟踪和获取分支z 我试过这个:如何';git远程添加';并跟踪同一文件系统中的分支,git,Git,我在/a和/b中有2个本地git存档,它们是从remotes/origin克隆的 在/b上有一个新的分支z 如何从存档/a中跟踪和获取分支z 我试过这个: cd /a git remote add b /b 这将创建2个配置条目,但我没有在/a上获取某些内容或列出远程分支,这些分支将显示在/b上 尝试了不同的方法后,我发现以下方法有效: 1) git remote show b列出了b中的所有远程分支 2) 我可以使用以下语法获取: git-fetchfile:///a/ z 其他同样有效
cd /a
git remote add b /b
这将创建2个配置条目,但我没有在/a上获取某些内容或列出远程分支,这些分支将显示在/b上
尝试了不同的方法后,我发现以下方法有效: 1)
git remote show b
列出了b中的所有远程分支
2) 我可以使用以下语法获取:
git-fetchfile:///a/ z
其他同样有效的方法:
$ cd /b
$ git checkout -b z
Switched to a new branch 'z'
$ git pull b z
但这些命令仍然不起作用,我不明白为什么:
git branch -a
不在b中列出远程分支(仅显示原始分支)
不签出任何内容,但返回错误消息我认为您不能这样做 我想你需要把分支z推到b的原点,然后从a取回它
cd /b
git push origin z
最后一个命令将本地分支z推送到远程(因此推z->origin/z)
然后,您可以在回购协议a中对其进行本地跟踪:
cd /a
git checkout -b z origin/z
最后一个命令创建(并签出)一个跟踪原点/z的本地分支z,到目前为止,您只添加了b作为远程分支。您可以尝试
git branch-a
在获取远程分支后列出它们
以下是从b签出z分支的命令:
git remote add b /b # you've already done
git fetch b # get it so we can see it
git checkout -t b/z # check out a local tracking branch
-t
(或--track
)创建跟踪分支,否则您将处于分离头部状态
那么你应该看到:
/a$ git branch
master
* z
对于任何不清楚所涉及步骤的人,以下是我所做的: 创建原点
$ mkdir origin
$ cd origin/
/origin$ git init --bare
Initialized empty Git repository in /origin/
/origin$ cd ..
克隆“a”并添加一些内容
$ git clone origin/ a
Initialized empty Git repository in /a/.git/
warning: You appear to have cloned an empty repository.
$ cd a
/a$ echo hi there > hello
/a$ git add hello
/a$ git ci -m'first commit'
[master (root-commit) 0867b93] first commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 hello
/a$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 210 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /origin/
* [new branch] master -> master
克隆“b”并在新分支上添加更多内容
/a$ cd ..
$ git clone origin/ b
Initialized empty Git repository in /b/.git/
$ cd b
/b$ git checkout -b z
Switched to a new branch 'z'
/b$ echo new guy reporting in >> hello
/b$ git ci -am "new recruits"
[z 81044ee] new recruits
1 files changed, 1 insertions(+), 0 deletions(-)
将“b”作为遥控器添加到“a”
/b$ cd ../a
/a$ git remote add b ../b
/a$ git fetch b
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../b
* [new branch] master -> b/master
* [new branch] z -> b/z
/a$ git br
* master
/a$ git checkout -t b/z
Branch z set up to track remote branch z from b.
Switched to a new branch 'z'
/a$ git br
master
* z
我把上面的内容放在这里,这样你就可以自己测试了。我可能会感到困惑,但你似乎觉得git分支是类似subversion分支的目录(它们不是)。@coreyward:不,我认为麻省理工学院有两个独立的本地克隆“
git pull b z
”这是怎么回事?分支机构z不只是存在于回购协议b中吗?或者它实际上是从回购a中提取的?(我不希望这样,因为您没有将repo a作为远程添加到repo b。)Git从不强制您使用集中存储库(当然,权限和指导原则可能会限制您的选择)。每一份回购协议都和其他所有回购协议一样重要。因此,将b
作为远程添加到a
是完全可能的,麻省理工学院甚至在上面实现了这一点。唯一缺少的是正确的checkout命令——请参阅我的答案。如果您仍然拥有示例中的归档文件,是否可以发布git config-l
(在/a中时)的输出?我相信我按照了您的说明,但这里有两件事不起作用。1) git branch-a只列出了源文件中的远程分支,但没有列出我刚才remote添加的另一个归档文件中的分支。2) git checkout-t b/z导致错误消息:fatal:git checkout:更新路径与交换分支不兼容。您是否打算签出无法解析为提交的“b/z”?
@mit:抱歉,我错过了摘要中的一个步骤。我认为这个错误是因为您没有从repo a执行git fetch b
。这真的很有帮助,我现在可以构建一个扩展的工作流:)
/b$ cd ../a
/a$ git remote add b ../b
/a$ git fetch b
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../b
* [new branch] master -> b/master
* [new branch] z -> b/z
/a$ git br
* master
/a$ git checkout -t b/z
Branch z set up to track remote branch z from b.
Switched to a new branch 'z'
/a$ git br
master
* z