2012-08-24 51 views
1

svnversion文檔:如何在git中模擬svnversion命令?

[[email protected] common_cpp]$ svnversion --help 
usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]] 

爲工作拷貝路徑
WC_PATH緊湊的 '版本號'。例如:

$ svnversion . /repos/svn/trunk 
4168 

版本號將是單號,如果工作副本是 單一版本,未經切換,並與 的TRAIL_URL參數相匹配的URL。如果工作副本凌亂, 版本號將更加複雜:

4123:4168  mixed revision working copy 
    4168M   modified working copy 
    4123S   switched working copy 
    4123P   partial working copy, from a sparse checkout 
    4123:4168MS mixed revision, modified, switched working copy 
+0

人們說SVN很簡單.. :( – 2012-08-24 01:58:33

+0

有Git中沒有直接等同,因爲Git的有「改性」(即演出和未分級)不同的概念,是指其提交不同,沒有一個「切換」等概念爲了能夠給你一些有用的東西,你能解釋一下你想要的命令嗎? –

+0

我需要在二進制文件中存儲關於編譯中使用的代碼版本和狀態的信息進程 –

回答

3

該解決方案像svnversion一樣檢測工作目錄中的更改。

def get_version(self, path): 
      curdir = self.get_cur_dir() 
      os.chdir(path) 
      version = self.execute_command("git log --pretty=format:%H -n1")[self.OUT].strip() #get the last revision and it's comment 
      status = self.execute_command("git status")[self.OUT].strip() #get the status of the working copy 
      if "modified" in status or "added" in status or "deleted" in status: 
        version += self.modified 
      os.chdir(curdir) 
      return version 


    def execute_command(self, cmd_list): 
      proc = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, shell=True) 
      (out, err) = proc.communicate() 
      rc = proc.returncode 
      return rc, out, err 
1

我不是SVN超familar,但我可以告訴,SVN識別簡單的數字形式的修訂: 1,2,3 ...因爲Git使用SSH散列來標識修訂版(在Git世界中稱爲「提交」),所以Git不能很好地翻譯。然而,讓這仍然是使用git log很簡單:

git log --pretty="format:%h" -n1 HEAD 

打印在回購當前簽出的提交(這是HEAD是什麼)。或者,您可以使用master(或任何其他分支)代替HEAD以獲取該分支的最後一個提交,而不是代表您的工作目錄的提交。此外,如果您需要完整的SHA1,請使用%H替換上面的%h。您還可以閱讀git-log聯機幫助頁,瞭解關於--pretty格式的更多信息。

此外,您可以在.gitconfig中添加一個別名,以便在任何地方執行此操作。添加以下行來~/.gitconfig(如果離開過[alias].gitconfig已經然而該節):

[alias] 
    rev = "git log --pretty='format:%h'" 

現在,你在一個Git回購是任何時候,你想看到的當前版本,只需鍵入git rev

+0

謝謝,但我在修改,在Git中它不是很有用獲取修訂計數。把你的腳本,我寧願做:git log --pretty = oneline | head -n 1 | sed's/\ s。* //' –

+0

這是否有效?使用'git log --pretty =「格式獲取當前提交/修訂有點簡潔:%h」-n1 HEAD'。我會相應地更新我的答案。 –

+0

是的,它的確如此。儘管如此,你的解決方案更好,但我會使用:git log --pretty =「format:%H」-n1因爲你想要當前的完整哈希。 –