在一次提交中将master从一个存储库合并到另一个存储库的master

时间:2014-02-24 04:31:51

标签: git

使用git实现此目的的最佳方法是什么?

我正在创建一个私有存储库,并希望能够定期合并来自另一个公共存储库的更改。但是,为了保持我的私有存储库提交历史记录清洁,我不想从公共存储库中引入所有提交,但只能在一次提交中解决所有更改。

我正在尝试做的例子:

我在服务器myrepo.git

上初始化存储库

git init --bare

我在本地克隆,

git clone user@server:myrepo.git

继续在master分支上进行初始提交。

然后我修改了我的git配置,以便将公共存储库添加为新的remote

[remote "origin"]
        url = user@server: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个回复中的每个提交提取到master上的myrepo,结尾为:

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

这个公共仓库有很多提交,压制它们根本不可行。

如果可能,我希望每当我解决Merge branch 'master' of http://github.com/path/to/publicrepo into master中与master的合并冲突时,myrepo的{​​{1}}提交历史记录中都会public提交一次}。

是否可以这样做,或者是否有更简单的方法?

1 个答案:

答案 0 :(得分:3)

  

我正在创建一个私有存储库,并希望能够定期合并来自另一个公共存储库的更改。

这很好,但它与此根本不相容:

  

但是,为了保持我的私有存储库提交历史记录清洁,我不想从公共存储库引入所有提交,但只能在一次提交中解决所有更改。

您不能有一个提交引入第二个repo的所有更改,并且仍然能够定期合并更改。 Git需要匹配提交ID以便知道合并的内容和不合并的内容,并且在一个大的合并提交中执行此操作可以保证您将拥有与公共仓库共同的 no 提交ID。

合并要求Git能够回绕到两个分支分叉的位置。如果你的分支从不从单个父母那里下来就不会发生这种情况,这听起来就像你正试图设置的那样。只是接受你将不得不包括公共回购提交的整个历史记录。我甚至不确定你为什么认为这是不受欢迎的,这就是Git 意味着的工作方式。

你可以在外部使用简单的补丁进行git,但同样,我真的不确定你为什么要这样做。您可以轻松地查看哪些提交是由您创作的,哪些不是,如果您希望向公共回购贡献任何内容,则需要共享历史记录。