我想为项目保留两个单独的git远程存储库(同时拥有一个本地副本)。一个应该是开发存储库,一个应该是代表性的公共存储库。我希望公共存储库只包含选定的状态,即我只想提交没有小提交的中间历史记录的稳定版本。据我所知,如果我只是偶尔提交到公共存储库,它将自动更新提交的整个历史记录。有办法解决这个问题吗?
答案 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)
典型的解决方案是为此目的创建两个分支,例如development
和master
。您只能使用git push
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
分支(例如)推送到特定的远程。但是,你不能推动分支而不推动导致它的所有历史记录 - 分支的头部提交由其父级,内容(又名“树”)和一些元数据(作者,提交者,消息等)定义。