2014-02-24 96 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

相关问题