2013-05-03 56 views
8

這更是一個訣竅可能問題:我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

回答

2

這是一個常見問題解答。

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

3

既然你使用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

9

好吧,我想我得到了一個確定的解決方案:

有所謂的後提交,並在此混帳掛鉤是我做的:

  • 我把持有的.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

乾杯,

馬丁