2011-04-21 68 views
2

我们正在寻找我们的网络部署过程中使用Git的清洁方式。我们想要做的就是能够拥有一个名为release的分支,并且基本上每当我们部署时,它都会部署来自该分支的代码。这看起来很容易,因为我们必须做的是将更改合并到发布分支中,并为该版本创建另一个分支(这将与当时的发布分支匹配)(因此分支称为1.1.1)。问题是关于在需要回滚的情况下我们能做些什么。所以说我们有分支1.1.0和1.1.1。我们发布了1.1.2版本,这些更改被合并到发行版分支中,并创建了另一个名为1.1.2的分支。我们需要注意一个需要用于回滚到版本1.1.1的makor错误。有没有干净的方式只是发布分支点1.1.1切换条分公司指向的Git

这似乎是理想的解决方案是有一些办法有什么(是否是一个分支,标签,等等),我们没有实际上推送任何东西,我们只是用它来指向另一个分支。这种方式当新版本出来时,我们为该版本创建一个分支,并且只是指向该分支的发行版。如果我们需要回滚,我们只需将版本切换为指向最后一个知道工作分支。是这样的可能。

回答

1

只需创建一个名为currently_live或类似的标签,并将其指向特定的提交,以便您现在可以全部部署。

这将是从理想地将有一个主分支和独立的版本分支的分支政策完全独立的。

使用git tag -f ...当你需要,你可以移动的标签。

+0

当我更新标签前进时这样做很好,但当我尝试更新后退时,推送失败,因为它是“非快进”。无论如何,让这个工作倒退? – ryanzec 2011-04-21 16:00:54

+0

加推-f似乎解决了这个问题。这样做时有什么我应该警惕的吗? – ryanzec 2011-04-21 16:03:07

0

我会恢复的变更作为一个新的提交(git revert),并称之为“1.1.3”。这可以避免混淆,为什么有人可以及时向后旅行:)

1

在GIT中的分支是只是一个指向代码的特定版本。因此,您可以拥有release分支,并将任何给定版本的代码推送到该分支。现在,Git通常会确保您推送到分支的任何新内容都是该分支上已有内容的孩子,以防止意外丢失历史记录。但是,如果您使用的是像release这样的可以降级的分支,则可以在推送时通过将+添加到refspec来覆盖该分支。

假设您有标签v1.1.1v1.1.2,并且您希望将您的版本降级到v1.1.1。我还假设您的部署远程名为deploy,并且它有一个名为release的分支,该分支将在您的部署过程中检出。你可以这样写:

git push deploy +v1.1.1:release 
0

使用git-更新裁判

git update-ref -m "new release" --no-deref releasebranch ref:origin/maint 

它也允许一个“裁判”的文件是一个象征性的指向另一个参考文件通过与四开始字节标题序列“ref:”。