2011-09-21 10 views

Odpowiedz

11

Git object model opisuje tag jako obiekt zawierający informacje o konkretnym obiekcie tj. commit (między innymi) więc nie jest możliwe w czystym gicie uzyskanie żądanych informacji (obiekt commit nie ma informacji o powiązanych tagach). Należy to zrobić "wstecz", podejmij obiekt znacznika, a następnie odwołaj się do konkretnego zatwierdzenia.

Jeśli więc chcesz uzyskać informacje o znacznikach określonych dla konkretnego zatwierdzenia, powinieneś je przetestować (znaczniki) i wybrać odpowiednie.

List<RevTag> list = git.tagList().call(); 
ObjectId commitId = ObjectId.fromString("hash"); 
Collection<ObjectId> commits = new LinkedList<ObjectId>(); 
for (RevTag tag : list) { 
    RevObject object = tag.getObject(); 
    if (object.getId().equals(commitId)) {; 
     commits.add(object.getId()); 
    } 
} 
+1

Więcej informacji na temat tego pytania można znaleźć [w tym temacie] (http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg01706.html) z listy mailingowej JGit. – Sonson123

+0

Nie powinieneś zbierać tagów zamiast zatwierdzeń? –

+1

i org.eclipse.jgit.api.Git.tagList(). Call() zwraca listę . –

4

Jeśli wiesz, że istnieje dokładnie jeden tagu dla popełnić, można użyć describe, w nowszych wersjach JGit (~ November 2013).

Git.wrap(repository).describe().setTarget(ObjectId.fromString("hash")).call() 

Można analizować wyniki, aby sprawdzić, czy tag istnieje, ale jeśli nie może być wiele znaczników, należy udać się roztworem Marcins.