如何为选定的提交(状态)保留第二个git远程存储库

时间:2013-05-11 11:25:11

标签: git repository git-remote

我想为项目保留两个单独的git远程存储库(同时拥有一个本地副本)。一个应该是开发存储库,一个应该是代表性的公共存储库。我希望公共存储库只包含选定的状态,即我只想提交没有小提交的中间历史记录的稳定版本。据我所知,如果我只是偶尔提交到公共存储库,它将自动更新提交的整个历史记录。有办法解决这个问题吗?

4 个答案:

答案 0 :(得分:3)

我的问题的答案是基于@Andomar的回答和@Michael Durrant推荐的博客文章。

可以使用不同的分支来释放(master),开发(development),修补程序(hotfix)等。每个分支都可以推送到不同的远程存储库 - 一个公开的(origin)或一个用于开发(dev)。

策略应该是将开发更改提交到development分支并将它们推送到dev远程存储库:

$git checkout dev
...do some changes...
$git commit -m "some development change"
$git push -u dev development

在达到新的发布点后,应使用development合并master--squash分支,其中包含在一次提交中对开发分支进行的所有提交,这会阻止发展史来自主分支。

$git checkout master
$git merge --squash development
$git commit -m "<new release message>"
$git push -u origin master

这将导致origin上的单个提交将包含自上一版本以来的所有开发更改,从而隐藏dev中包含的开发历史记录。

答案 1 :(得分:1)

典型的解决方案是为此目的创建两个分支,例如developmentmaster。您只能使用git push

将master转到公共存储库
git push (remote) master

要使(remote)默认仅跟踪master,请使用git remote

git remote set-branches (remote) master

答案 2 :(得分:1)

我建议使用

策略

http://nvie.com/posts/a-successful-git-branching-model/

基本上,您有一个正在进行中的开发分支和一个代表生产的主分支。

此外,您可以从开发中为各个功能,错误修复或杂务创建分支。

然后将这些分支合并到开发分支中,您可以在其中进行集成测试,然后将其合并到可以执行QA的发布分支。

准备好发布时,将发布合并到主服务器并推送到生产服务器。

当您需要进行热修复时,请执行发布分支。

答案 3 :(得分:0)

考虑“选定的历史记录”而不是“选定的提交”。 git push默认情况下选择加入分支,因此您可以选择仅将stable分支(例如)推送到特定的远程。但是,你不能推动分支而不推动导致它的所有历史记录 - 分支的头部提交由其父级,内容(又名“树”)和一些元数据(作者,提交者,消息等)定义。