GIT: Have current commit hash and latest tag in file on commit

情到浓时终转凉″ 提交于 2019-11-30 03:26:37

问题


that's more of a know-how questions probably:

I'm versioning with git and send files for a PHP CMS to the test or production site using rsync. Now I'd like to keep track on what commit is currently deployed using a fool-proof and automated system, I was thinking about this:

Set up a git hook to add/update a text file with the latest tag and commit hash. Then I can easily look up the commit.

My problem is that at the time of pre-commit the script won't know the commit hash. Is there any straight-forward method to get that done (or another approach that comes to the same ends)?

Thanks for your input in advance!


回答1:


Alright, I think I got an ok-solution:

There is a git hook called post-commit and here is what I do:

  • I put the file holding the tag/hash on .gitignore (to avoid unnecessary changes on the next commit)
  • Let the post-commit hook update the version file.

Content of the hook file:

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

Now I'm sure that file is up-to-date after each commit, so I'm all set as long as I do a commit before deploying.

Notes: Nasty beginner's caveat: make the hook file executable, git ignores the file without warning if it isn't.

All about git hooks: http://git-scm.com/book/en/Customizing-Git-Git-Hooks

All about .gitignore: http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files

Cheers,

Martin




回答2:


This is an FAQ.

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

Search for export-subst in gitattributes(5), you need to use git-archive(1) to get the substitution done.

(%H gives you the hash. In order the get the tag you would still need a script that calls git-describe(1), I don't see a format for that)




回答3:


Since you're using rsync to deploy your code, then, do something like this:

$ git describe --long > VERSION.txt

Then, include the VERSION.txt in the rsync package.

The git describe string looks like this:

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

In the above:

  1. Latest tag is r1.0
  2. The 2 indicates that we are two commits past that tag
  3. The g stands for 'git' (ok, that's a little weird, but, oh well)
  4. The current hash is ca93d0a


来源:https://stackoverflow.com/questions/16364826/git-have-current-commit-hash-and-latest-tag-in-file-on-commit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!