2012-11-27 19 views
3

我們需要在我們的maven版本中使用git分支並提交散列。如何讓git維護一個包含選擇信息的git.properties文件

有沒有一種簡單的方法讓git自動維護一個帶有我們需要的信息的「git.properties」文件,以便它始終反映git的當前狀態?

我們希望這是一個與平臺無關的解決方案,如果在所有可能的

+0

你在git.properties文件中需要什麼?分支的提交散列? – Rawkode

+0

我需要由'git rev-parse --abbrev-ref HEAD'報告的分支名稱和由'git rev-parse HEAD'報告的當前散列爲兩行「git.branch = xxxx」和「 git.hash = YYYY」。 –

回答

0

還有一種就是,但你不希望它。您可以在git鉤子中維護這些信息,但這些信息的目的不是版本化的,所以您必須在每個存儲庫上設置它們。

然而,maven應該能夠調用一個進程,不是嗎?所以它應該能夠運行git並在需要時生成文件。

+0

問題是我在Maven構建過程中很早就需要這些信息,如果它已經存在,它會使事情變得更簡單。此外,我們只需要在單個存儲庫中的所有分支上使用它。 –

+0

然後你的問題的答案是一個git鉤子。你看過那些嗎? – Chronial

+0

無法讀取進程而不是文件的輸出?很難認真對待那種無法做到的工具。 –

1

注意(2016年,但實際上在2011年9月創建),有一個Maven插件專用於捕獲屬性文件中的Git信息。
這是ktoso/maven-git-commit-id-plugin之一。

<dependency> 
     <groupId>pl.project13.maven</groupId> 
     <artifactId>git-commit-id-plugin</artifactId> 
     <version>2.2.1</version> 
    </dependency> 

然後:

在你的情況,因爲你「需要這些信息在Maven這麼早建設過程」中,我以儘可能早地在觸發它增加了<phase>initialize</phase>默認的jar maven生命週期。

然後我在執行我的插件時使用它,以便打印Git相關的調試數據,這有助於瞭解該插件的確切版本。

  Properties prop = new Properties(); 
      ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
      InputStream stream = loader.getResourceAsStream("git.properties"); 
      if (stream != null) { 
       prop.load(stream); 
       String dirty = prop.getProperty("git.dirty"); 
       if (dirty.equals("false")) { 
        dirty = ""; 
       } else { 
        dirty = "(dirty)"; 
       } 
       ver = ver + prop.getProperty("git.build.version")+dirty; 
       ver = ver + " - " + prop.getProperty("git.commit.id.describe"); 
       ver = ver + " - " + prop.getProperty("git.build.time"); 
      } else { 
       throw new MojoFailureException("Unable to find MyProject git.properties"); 
      } 
相關問題