2011-08-03 109 views
2

我们正在将我们的源代码控制从VSS移到Git(并非常高兴)。我试图确定Git中的最佳策略,以跟踪我们的代码的哪些版本部署在我们环境中的哪些框上。到目前为止,我们只专注于我们的GitHub主分支,专门代表仅在生产中使用的产品。除非配置管理团队记录已成功应用于生产的内容,否则不会在此分支上发生任何提交。Git分支和环境部署跟踪

人们是否也为其所有环境创建独立的分支或使用标签?我已经看到了分支模型的提出,但似乎需要大量不必要的,潜在的痛苦,合并。

我认为标签将是一个很好的解决方案,但人们如何实现这一点?假设我有三个名为QA1,QA2,QA3的QA环境。如果我刚刚从分支原产地/ hotfix42部署代码到框QA2,我是否可以使用标签命名法,如“QA2-060911_511pm”,告诉我哪个版本的代码在什么时间部署到哪个框?但如果我这样做了,我的标签数据库随着时间的推移将会增长到数百甚至数千。因此,如果我想查找部署到QA2的当前版本,将如何查询所有标签以查找最新版本?或....我是否总是添加一个名为QA2_Current的额外标签?但随着部署的发生,持续不断地移除该标签并添加到其他版本中?

是否有任何其他机制添加元数据提交?例如,我可以添加一个env变量到我的提交,然后搜索env = QA2的提交吗?

感谢

+1

至于在提交你可以使用元数据你的问题“混帐笔记”注释提交,而无需修改提交自己和git日志将默认显示它。 – holygeek

回答

1

经验是您使用的东西,永远不会改变标签(如1.0.0版本永远指向同一个commit)的事情上做变化(如“最新的规则,并使用分支“版本)。

因此,我建议将部署到QA2的当前版本指定为git branch QA2,并根据需要在该命令中添加-f。如果您只是将其用作“可移动标签”,则无需进行复杂的合并。

如果您需要保留过去部署的历史序列,您可能想要进行合并而不是仅移动分支的时间。在短时间内,您可以使用[email protected]{1}[email protected]{2}等,但最终会被git gc擦除。

另外,请记住,在git中合并比您可能习惯的痛苦小几个数量级。您可能想先试用这些模型,然后再解雇他们太难。

0

要回答你关于寻找最新的标签问题,如果你是在Unix上你可以运行此列出的提交日期排序的标签:

git tag | xargs [email protected] git log --format=format:"%ci %h @%n" -1 @ | sort 

请注意,您还可以启动与管道任何其他的refs/sha哈希列表。 但是,如果你想列出地方分支机构,由于先导星,你必须做一些事情,如:

git branch | sed 's/^\*//' | xargs [email protected] git log --format=format:"%ci %h @%n" -1 @ | sort