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,我在/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 其他同样有效

我在/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 /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