2014-02-24 129 views
0

使用git完成此操作的最佳方法是什麼?在一次提交中將master從一個存儲庫合併到另一個存儲庫的主文件

我正在創建一個私有存儲庫,並希望能夠定期合併來自另一個公共存儲庫的更改。但是,爲了保持我的私有存儲庫提交歷史記錄清潔,我不想引入公共回購的所有提交,但能夠在一次提交中解決任何和所有更改。

的什麼,我試圖做例子:

我初始化我的服務器上的存儲庫,myrepo.git

git init --bare

我克隆此本地,

git clone [email protected]:myrepo.git

然後繼續在master分支上進行初始提交。

然後我修改我的混帳配置,這樣我添加的公共倉庫作爲新remote

[remote "origin"] 
     url = [email protected]:myrepo.git 
     fetch = +refs/heads/*:refs/remotes/origin/* 
[remote "public"] 
     url = http://github.com/path/to/publicrepo.git 
     fetch = +refs/heads/*:refs/remotes/origin/* 

做一個git merge -X recursive -s ours public/master將是有意義的我要什麼,我試圖完成,但我得到的以下:

(master) $ git merge -X recursive -s ours public/master 
merge: public/master - not something we can merge 

不過,如果我執行git pull public master,將繼續拉動每一個承諾從public回購到mastermyrepo,結尾:

commit 421b15b37efacb84be80b95c8534087e67835017 
Merge: be1a905 831a27d 
Author: Me 
Date: Sun Feb 23 23:04:29 2014 -0500 

Merge branch 'master' of http://github.com/path/to/publicrepo into master 

這個公共回購有很多提交,它是根本不可行的壓扁他們。

如果可能,我希望看到的master提交歷史每次我解決myrepo合併對public衝突時間Merge branch 'master' of http://github.com/path/to/publicrepo into master一個提交上myrepo

是否可以這樣做,還是有一個更簡單的方法?

回答

3

我創建一個私人倉庫,並希望能夠定期合併來自其他公共倉庫的變化。

這很好,但它是從根本上不符合這樣的:

然而,爲了將自己的私人倉庫提交歷史乾淨,我不希望在所有提交帶給公衆回購,但是能夠在一次提交中解決任何和所有的變化。

您不能有一次提交,它會引入第二次回購的所有更改,並且仍然可以定期合併更改。 Git需要提交ID來匹配,以便知道什麼是合併和什麼不是,並在一個大的合併提交中這樣做,保證你將有沒有提交與公共回購相同的ID。

合併要求Git能夠倒回到兩個分支分叉的地方。如果你的分支從來沒有從一個父母下降,這是不可能發生的,這聽起來就像你試圖建立。只要接受你將不得不包含公共回購的完整履行歷史。我甚至不知道爲什麼你會認爲這是不可取的,這是Git如何意味着工作。

你可以做到這一點在外部使用簡單的補丁git,但我真的不知道你爲什麼想要。您將很容易就能看到哪些提交是由您撰寫的,哪些不提交,如果您希望向公共回購提供任何內容,則需要共享歷史記錄。

+0

謝謝,好點的一切。 – Scott

相關問題