3

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

4

4 回答 4

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

到达新的发布点后developmentmaster应该使用 合并分支--squash,它将对开发分支的所有提交打包到一个提交中,从而防止开发历史记录出现在主分支上。

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

这将导致一次提交,origin其中将包含自上次发布以来的所有开发更改,从而隐藏dev.

于 2013-05-11T15:50:25.910 回答
1

典型的解决方案是为此目的创建两个分支,例如developmentmaster。您只能使用以下命令将 master 推送到公共存储库git push

git push (remote) master

要默认(remote)只进行跟踪master,请使用git remote

git remote set-branches (remote) master
于 2013-05-11T11:37:31.707 回答
1

我建议使用以下策略

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

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

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

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

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

当您需要进行热修复时,您可以在发布分支上进行。

于 2013-05-11T12:09:39.067 回答
0

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

于 2013-05-11T11:30:46.500 回答