2011-03-01 128 views
18

我在/ a和in/b中有兩個本地git存檔,它們是從遙控/來源克隆的。如何在同一個文件系統中'git remote add'並跟蹤分支

有一個新的分支上的z/B

如何追蹤並從檔案取回分支Z /一個?

我嘗試這樣做:

cd /a 
git remote add b /b 

這將創建2配置項,但我沒能取東西或列出在/遠程分支,將顯示上/ B


樹枝

嘗試不同的事情後,我發現,工作原理如下:

1)git remote show b列出了所有在b

遠程分支

2)我可以使用此語法獲取:

git fetch file:///a/ z


其他的事情,也在努力工作:

$ cd /b 
$ git checkout -b z 
Switched to a new branch 'z' 
$ git pull b z 

但這些命令仍然不工作,我不明白爲什麼:

git branch -a 

沒有列出遠程分支B(onlz起源的那些顯示)

git checkout -t b/z 

不籤任何東西,但返回一條錯誤消息

+1

我可能只是感到困惑,但它看起來像你在印象git分支是像顛覆分支(他們不是)的目錄。 – coreyward 2011-03-01 02:22:44

+1

@coreyward:不,我認爲mit有兩個單獨的本地克隆 – idbrii 2011-03-01 02:39:24

+0

「'git pull b z'」這是幹什麼的?分支z只存在於repo b中嗎?或者它實際上是從回購拉動? (我不希望它,因爲你沒有添加repo a作爲遠程repo b。) – idbrii 2011-03-01 18:30:01

回答

19

到目前爲止,您只添加了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 

我把上面的commands into a script這樣你就可以自己測試一下。

+0

如果你仍然有你的例子中的檔案,你可以發佈'git config -l'的輸出(當在/ a中)嗎? – mit 2011-03-01 02:55:24

+0

我相信我遵循了你的指示,但有兩件事在這裏不起作用。 1)git分支-a只列出遠程分支的起源,但不在其他我只是'遠程添加'的存檔中。 2)git checkout -t b/z導致錯誤信息:'致命的:git checkout:更新路徑與開關分支不兼容。您是否打算結賬'b/z',無法解析爲提交? – mit 2011-03-01 03:06:47

+0

@mit:對不起,我錯過了摘要中的一個步驟。我認爲這個錯誤是因爲你沒有從repo a中完成'git fetch b'。 – idbrii 2011-03-01 18:52:06

0

我不認爲你可以做到這一點。

我認爲你需要推動分支z來源於b並從a中獲取它。

cd /b 
git push origin z 

最後一個命令推動當地分支機構Z到遠程(所以推ž - >產地/ Z)

那麼您可以在回購本地跟蹤它:

cd /a 
git checkout -b z origin/z 

最後一個命令創建(並簽出)本地分支z跟蹤原點/ z

+0

Git _never_迫使你使用集中式存儲庫(當然,權限和指導方針可能會限制你的選擇)。每個回購與其他回購一樣重要。因此,將'b'作爲'a'的遠程設備是絕對有可能的,甚至可以在上面完成。唯一缺少的是正確的結帳命令 - 請參閱我的答案。 – idbrii 2011-03-01 02:43:01

+0

@pydave。不錯。我每天都會學到一些東西:) – Ben 2011-03-01 03:11:11

相關問題