2011-03-20 47 views
4

我想從遠程git存儲庫合併幾個子目錄到我的存儲庫。遠程和本地存儲庫都包含整個內核存儲庫,我只對無線相關文件感興趣。 我試圖按照"How to use the subtree merge strategy"下的說明操作,但由於大多數文件都存在於本地存儲庫和遠程存儲庫中,因此命令 git read-tree --prefix=dir-B/ -u Bproject/master命令失敗。我不能在同一命令行中使用-m選項和--prefix如何合併/從遠程存儲庫中提取

這種合併實際上應該根據遠程存儲庫中的文件來更新(合併/拉出)所有相關的無線目錄/文件,其中應該通過偏好遠程文件來解決衝突。

爲了使我的問題一般 - 說你有存儲庫A和B.都有文件夾wireless_dir:A/wireless_dir,B/wireless_dir。我正在處理存儲庫B,並希望從A/wireless_dir中更新B/wireless_dir中的所有文件,在發生合併衝突時首選更改A/wireless_dir。

+0

這是Linux內核嗎?是不是使用子模塊來做這樣的組件 - 意味着它們已經是獨立的存儲庫? – Cascabel 2011-03-20 18:56:52

回答

1

從Jeformi的評論看來,看起來你已經有了這樣一種情況,即文件夾是一個單獨的存儲庫,如果是這種情況,你所要做的就是git pull

不過,如果你正在尋找的提交有來自你不希望其他文件夾中的文件,Git的讓你「unsqaush」在周圍方式這裏所說的承諾:redhatmagazine

步驟要做到這一點(更符合你的情況)是:

1)記下你的HEAD當前所處的位置,讓我們把它叫做<OLD_HEAD>。這可以從日誌通過使用獲得並期待在最近提交的SHA1:

git log 

2)拉的變化,從回購一到你的分支(這將包括任何你可能不希望):

git pull <repo A> <branch_name> 

3)現在是它的時間來使用<OLD_HEAD>(在非庸俗的方式)......這是由復位

git reset --mixed <OLD_HEAD> 

4)的一切,你做了你而做回到<OLD_HEAD>並且您的索引也是如此,但是在工作目錄中,現在您已經查看了您一直在尋找的repo A的更改以及wireless_dir文件夾之外的潛在文件。要以交互方式在你的工作目錄中的這些文件合併到您的索引的使用(僅限於從wireless_dir的文件,如果這就是你想要的):

git add --patch <filename> 

5)最後:

git commit -m 「Selectively merged my files」 

注:如果您不希望有機會搞砸你的分支,在嘗試上述之前建立一個新的分支。

+0

@Karl仍然沒有足夠的代表評論其他答案,但是你所描述的是我已經明確的步驟回答的,除了你不必手動複製樹之外的文件夾。 – Hazok 2011-04-06 04:18:39

+0

Argh,在評論中沒有空白符的換行符...... @Karl again;)這是關於依賴關係的一個好處,但做一個櫻桃選擇並不能保證拉扯依賴關係,特別是如果提交沒有很好地組織。此外,由於提問者詢問如何拉入特定的wireless_dir文件夾而無需拉入其他任何東西,那麼我的猜測是他在wireless_dir文件夾之外做了一些更改,以避免在從wireless_dir提取更改時不想修改它,挑剔的挑戰可能會融入到他的變化中。 – Hazok 2011-04-06 04:22:45

0

做到這一點是要合併整個分支最簡單的方法,複製你的git目錄以外的文件夾,撤銷或中止合併,然後將文件夾中複製回來。

但是,你要如果任何更改具有該文件夾之外的依賴項,則會出現問題。你可能想要cherry-pick所有提交的文件夾(從git log subdir)提交的依賴關係。

相關問題