GIT:有当前提交散列和最新的标签在文件上提交

问题描述:

这更是一个诀窍可能问题:我GIT:有当前提交散列和最新的标签在文件上提交

使用Git版本控制和使用发送文件的PHP CMS到测试或生产现场rsync的。现在,我想跟踪什么承诺目前采用防呆和自动化系统的部署,我在想这个问题:

建立一个git钩来添加/更新了最新的标签的文本文件和提交哈希。然后我可以轻松查找提交。

我的问题是,在预先提交时脚本不会知道提交散列。有没有任何直接的方法来完成这个工作(或另一种方法达到相同的目的)?

感谢您的提前输入!

+0

我还以为你要处理的是在部署方面。编写一个脚本来完成部署,然后使该脚本在复制每个文件中的某个位置之前复制当前散列。 – Mason 2013-05-03 17:56:02

+0

有趣的是,在发布这个问题后,我得到了这个想法。尽管如此,让git处理版本文件会更好 - 这种方式对部署的处理方式无关紧要。 – 2013-05-03 17:59:49

+0

如果你尝试在git的版本控制下将版本信息存储在一个文件中,更新并提交,你将得到一个新的提交SHA1。 :)你必须在git之外完成它。 – Tuxdude 2013-05-03 18:14:13

这是一个常见问题解答。

https://git.wiki.kernel.org/index.php/Git_FAQ#Does_Git_have_keyword_expansion.3F

搜索gitattributes出口SUBST(5),你需要使用git-存档(1)来完成替换。

(%H为您提供的哈希值。为了在获取代码,你仍然需要调用的脚本 的git-描述(1),我没有看到一个格式)

+0

美丽!经过一些试验和错误,这里是我的.gitattribtues:'version.txt export-subst'。和我的version.txt:'$格式:%H $' – 2015-10-09 23:27:11

既然你使用rsync到deploy代码“重话,做这样的事情:

$ git describe --long > VERSION.txt 

然后,包括rsync的包VERSION.txt

git的描述字符串如下所示:

$ git describe --long 
r1.0-2-gca93d0a 

在上面:

  1. 最新标签是R1.0
  2. 的表明我们很两次提交通过该标签
  3. 代表“混帐”(好吧,这是一个有点古怪,但是,很好哦)
  4. 当前哈希是ca93d0a
+0

谢谢,看起来不错,在发布我的帖子后看到了你的回答 - 查看git处理它的答案。想想看,让rsync脚本处理它有其优点,因为它确保版本文件是最新的。如果工作副本中有未得到改变的变化,我甚至可以采用rsync脚本实际上禁止部署。 – 2013-05-04 11:28:27

+0

关于检查工作树的流浪者的好主意。如果它有用,你可以投我的答案吗?我需要几点才能达到下一个级别。 – 2013-05-05 13:47:37

好吧,我想我得到了一个确定的解决方案:

有所谓的后提交,并在此混帐挂钩是我做的:

  • 我把持有的.gitignore标签/散列文件(以避免下一次提交不必要的更改)
  • 让提交后挂钩更新版本文件。

内容钩子文件:

#!/bin/sh 
git describe --tags > version.txt 

现在,我敢肯定,该文件是跟上时代的每一个提交之后,所以我所有的设定,只要我做一个承诺之前部署。

注: 讨厌初学者的一点:使钩可执行文件,Git会忽略该文件没有,如果它不是警告。

所有关于git的钩子:http://git-scm.com/book/en/Customizing-Git-Git-Hooks

所有相关的.gitignore:http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files

干杯,

马丁