我想为一个项目保留两个单独的 git 远程存储库(同时拥有一个本地副本)。一个应该是开发存储库,一个应该是具有代表性的公共存储库。我希望公共存储库只包含选定的状态,即我只想提交稳定版本,而没有中间的小提交历史。据我所知,如果我只是不时提交到公共存储库,Git 会自动更新整个提交历史。有没有解决的办法?
4 回答
我的问题的答案基于@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
.
典型的解决方案是为此目的创建两个分支,例如development
和master
。您只能使用以下命令将 master 推送到公共存储库git push
:
git push (remote) master
要默认(remote)
只进行跟踪master
,请使用git remote:
git remote set-branches (remote) master
我建议使用以下策略
http://nvie.com/posts/a-successful-git-branching-model/
基本上,您有一个用于进行中的开发分支和一个代表生产的主分支。
此外,您从开发中为个别功能、错误修复或杂务创建分支。
然后将这些分支合并到可以进行集成测试的开发分支,然后合并到可以进行 QA 的发布分支。
准备好发布时,您将发布合并到主服务器并推送到生产服务器。
当您需要进行热修复时,您可以在发布分支上进行。
考虑“选定的历史记录”而不是“选定的提交”。git push
默认情况下选择加入分支,因此您可以选择仅将stable
分支(例如)推送到特定的远程。但是,您不能在不推送所有历史记录的情况下推送分支 - 分支的头部提交由其父级、内容(也称为“树”)和一些元数据(作者、提交者、消息等)定义.