2012-06-21 72 views
1

我在Git上運行Git For Windows(以前稱爲msysgit)1.7.10.msysgit.1。Git擴展+ Git對於Windows:獲取不存在的分支本地不會創建新的本地分支

另一位用戶創建了一個新分支並將其推送到遠程存儲庫。我想將新的分支取到我的本地存儲庫。

This image顯示了我想要做的事情。主目前正在檢出,另一個用戶已經添加了一個新分支「brentfo」,他已經推送了遠程存儲庫。我想現在將這個新分支取到我的本地存儲庫。

我打開Git Extensions Pull對話框,如圖所示。我通過合併選項「不合並,僅獲取遠程更改」,選擇新的遠程分支「brentfo」從原點拉動。當我點擊該按鈕,拉我得到一個進度對話框:

c:\Program Files (x86)\Git\bin\git.exe fetch --progress "origin" +refs/heads/brentfo 
Done 
From //dnzchfile1/git-chch$/mRouteDotNET 
* branch   brentfo -> FETCH_HEAD 

進度對話框不顯示任何錯誤。看來該過程正常完成。

的FETCH_HEAD文件顯示以下內容:

eea033921fea43acf34a5baa380d1666181b56aa  branch 'master' of //server/gitrepo/mRouteDotNET 
5e0640e42d04a744aae2e95663a13c0747cacaf1 not-for-merge branch 'brentfo' of //server/gitrepo/mRouteDotNET 
934e6034c526b703ac69b26497e0131f9bb71c2c not-for-merge branch 'mRoutePCLib' of //server/gitrepo/mRouteDotNET 

當我看事後提交日誌,但是,似乎沒有任何已經發生了(提交日誌出現在拉對話框的圖像的背景下,以上)。新分支brentfo尚未在我的本地存儲庫中創建。當我拉下分支的下拉列表時,仍然只有兩個:master和mRoutePCLib。

如果在Pull對話框中沒有選擇任何遠程分支(即將其留空),我會得到相同的結果。在這種情況下,進度對話框顯示:

c:\Program Files (x86)\Git\bin\git.exe fetch --progress "origin" 
Done 

似乎有曾經是做與早期版本的Git擴展的創建遠程那些地方分支機構的錯誤。但是,看一下Git擴展項目change log,問題看起來像是在1.55版本中解決的。所以我猜測我做錯了什麼。

我知道我可以使用Git Bash控制檯來獲取遠程分支並從中創建一個新的本地分支。但是,似乎我應該可以通過GUI來做到這一點。

我希望沿着任行答案:

一)是的,你這樣做是錯誤的,這裏是你應該怎麼做(通過GUI);或

b)這是一個已知問題,您必須從命令行界面(Git Bash)執行該操作,直到bug修復。

乾杯 西蒙

回答

2

擷取只會帶來所有當前分支的變化(和本地跟蹤分支?有人幫我在這一個。)和所有遠程分支機構的知識。你真的不想提取所有你還沒有簽出的分支的所有提交。如果有數以千計的分支,那將是不好的。爲了檢出您目前還看不到的遠程分支機構,您可以獲取Checkout分支。

您已經獲取了遠程分支的存在。

現在你想要做

Git的擴展 - >結帳科

更改它從本地到遠程。在下拉菜單中選擇遠程分支。說好,它會問你是否想創建一個本地分支然後跟蹤它。確保點擊是。

我建議找一些方法來購買Smart Git 3.它遠遠勝過所有其他Windows Git產品。他們有一個免費的開源許可證版本。

+0

非常好,工作完美。謝謝。 –

+0

我懷疑這裏真正的問題是我對底層的git API沒有很好的理解,而不是Git擴展出現問題。對於我發現Git擴展非常好的大多數情況。已經使用了一個月左右,除子模塊之外,一切都一帆風順。即使有子模塊,我也會得到Git Extensions比命令行界面處理更好的印象(例如,您可以通過CLI刪除子模塊嗎?)。不過,似乎git相當於SCM的C++ - 如果你不知道自己在做什麼,容易搞砸了。 –

+0

@SimonTewsi大多數人擁有的最大障礙是1. Git不關心單個文件。你一直在本地爲你所做的一切工作。我花了一段時間才意識到Fetch,Pull和Checkout是如何相互關聯的。使用Git製作一團糟也很容易。但我還沒有找到一個無法修復的混亂。所有其他的都無法重寫歷史,並告訴所有其他開發人員他們必須重新克隆。重寫歷史記錄是絕對的最後手段,並要求所有其他參與者重新執行本地回購。 –

1

而且安德魯Finnell的回答是:

選擇Git的擴展後>結帳分支(從Windows資源管理器右鍵菜單)中,結帳科對話框將打開。

選擇遠程分支和遠程分支的名稱下拉並點擊結帳結帳遠程分支對話框將打開。

在結帳遠程分支對話框中,選擇名稱爲「{分支名}」復位當地分支機構,並確保合併被選中,然後單擊結帳

Checkout Remote Branch dialog

這將創建一個新的本地分支,使用來自遠程分支的更改進行更新,並在本地分支和遠程分支之間創建映射,以便可以在它們之間推送和拉取更改。

注意:請勿選擇「使用名稱{遠程名稱} _ {分支名稱}'」創建本地分支。這將創建一個本地分支,但它將以遠程倉庫的名稱作爲前綴(在上例中,本地分支將被命名爲「origin_DSIChanges」而不是「DSIChanges」)。

0

是的,你做錯了,這是你應該怎麼做(通過GUI); 您正在將遠程分支提交提取到本地分支,但您還需要將遠程分支與本地分支合併。請選擇「將遠程分支合併到當前分支」選項從不選擇「僅獲取不合並」。