2015-10-13 65 views
4

我使用下面的代碼克隆從Java的git回購。我需要存儲克隆的最新修訂哈希。JGit克隆和獲取修訂散列

localRepo = new FileRepository(path); 
git = new Git(localRepo); 
Git.cloneRepository().setURI(url).setBranch("master") 
       .setDirectory(new File(path)).call(); 
git.close(); 

獲取修訂哈希的任何線索在這裏?

+0

你的意思是'master'分支的修訂哈希? –

+0

是的Rudiger。最新的克隆哈希,就像我們在詹金斯看到的一樣。 – Upen

+0

「最新的克隆哈希」沒有這樣的東西。一個倉庫可能有許多_refs_(分支,標籤等)都指向一個提交。要獲取ref的提交哈希,請參閱[centic](http://stackoverflow.com/users/411846/centic)給出的答案。通常你會想要獲得'HEAD'的提交哈希。如果您需要知道存儲庫中_youngest_提交的散列,請告訴我,並且我將彙集如何在已知文件中找到最新提交的答案。 –

回答

2

你可以得到一個Ref其中包含HEAD用以下ObjectId

 Ref head = repository.getRef("HEAD"); 
     System.out.println("Ref of HEAD: " + head + ": " + head.getName() + " - " + head.getObjectId().getName()); 

這會打印出這樣的事情

Ref of HEAD: SymbolicRef[HEAD -> refs/heads/master=f37549b02d33486714d81c753a0bf2142eddba16]: HEAD - f37549b02d33486714d81c753a0bf2142eddba16 

又見related snippetjgit-cookbook

而不是HEAD,你也可以使用像這樣的東西以獲取分支masterHEAD,即使當前檢出一個不同的分支。

+0

localRepo = new FileRepository(path); \t \t \t \t git = new Git(localRepo); 。 \t \t \t \t Git的克隆= Git.cloneRepository()setURI(URL).setBranch(分支) \t \t \t \t \t .setDirectory(新文件(路徑))()調用; \t \t \t \t Ref head = localRepo.getRef(「refs/heads/master」); Head爲null,顯示爲null。難道我做錯了什麼? – Upen

+0

現在運作。我構建存儲庫時犯了一個錯誤。 – Upen