我对git很新,不太确定怎么问这个。我的工作仍然使用CVS,我开始推动我们离开它,但是我们有一个自定义构建服务器,根据我们的任务跟踪器确定的每个java类的最新签入版本,使用某个标签标记cvs签入系统。然后它根据标签检出每个文件。它允许我们根据我们标记要发布的任务来检查项目的版本。我很好奇Git中是否有类似的东西,如果是这样,那将如何实现呢?谢谢你的指点。我已经阅读了专业git书,但仍然没有真正了解这是否可行。
答案 0 :(得分:3)
每个文件的标签:没有。按标签退房:是。
更具体地说,in git,tag只是指定特定提交的另一种方式。每个提交都有一个“真实名称”,其中一个是40个字符的SHA-1值,如676699a0e0cdfd97521f3524c763222f1c30a094
。这些真实的名字对人类没用,所以我们给它们提供有意义的名字,或者通过标记分支的尖端(例如,master
),然后通过它与分支尖端的距离来引用提交(例如, master~3
将是“从提示返回的第三个提交”),或者是一个更静态的名称。
分支机构名称移动 - 毕竟这是它们的全部意义;如果我们永远不能将提交添加到master
,然后将它们合并回develop
,那么拥有一个名为develop
的分支和另一个名为master
的分支将无法将我们带到任何地方。所以我们还需要“不动名”,这些都是“标签”。
要按标签结帐,请执行以下操作:
git checkout tagname
Git将查找相应的提交SHA-1并检查该特定提交,即将整个工作树恢复到提交时所处的状态(当然不计算未跟踪和忽略的文件)。
Git也会给你一个稍微可怕的消息,关于“超级HEAD”(听起来你已被断头台),但它只是告诉你,你不再“在一个分支上”,如果你做新的提交,他们将工作得很好,但也将不会“在一个分支”。因为提交被记录,即使不是“在一个分支上”,它们也是半永久性的(它们会在日志条目到期之前保持一段时间),但它们很难找到,因为它们也是分支名称(当然还有标签) !)是查找提交的简单方法。
顺便提一下,作为CVS用户,您可能想知道如何查看文件A
的标记版本“v1.3”并将其与文件B
的标记版本“v2.7”一起使用。你可以在git中执行此操作:首先检查所有标记为“所有文件”(假设所有文件都是v2.7),然后提取要恢复的文件:
git checkout v2.7
git checkout v1.3 -- fileA
除了fileA之外,你现在拥有“一切”的v2.7。但是,如果这种组合由于某种原因是有用的,那么git哲学不是“以特殊的方式来检查它”,而是“现在做出一个提交,并给它起一个名字”:
# test test test, yes, this is what we need for Customer X
git status # make sure we're ready to commit
git commit -m "special version for customer X"
git tag customerX
您现在有一个标记可用于命名“v2.7的所有内容,但文件A的v1.3除外”。这是一个提交,所以它是永久性的,只要它有一个名称(我们只给它一个,customerX
)。