2012-03-22 10 views
8

Mam plik w dół głęboko w moim drzewie git:Używanie symboli wieloznacznych ścieżka w dzienniku git

$ git ls-files | grep /Expression.java 
sm/src/main/java/cl/utilities/sm/Expression.java 

Chciałbym dostać dziennik swojej działalności bez konieczności wpisywania całej ścieżki. Zasadniczo chcę tego wyjścia:

$ git log --oneline -2 sm/src/main/java/cl/utilities/sm/Expression.java 
2718cdc cleaned up some warnings 
f30cf15 Added missing @Overrides 

... ale bez konieczności wpisywania sm/src/main/java/cl/utilities/sm. Próbowałem wiele rzeczy, ale żaden z nich nie pracował:

$ git log -- \*/Expression.java 
$ git log -- \*Expression.java 
$ git log -- \*\*/Expression.java 
$ git log -- '*/Expression.java' 
$ git log -- '**/Expression.java' 
+4

git log - \ */Expression.java powinny działać, dziwne –

+0

W moim Windows 7 poleceń powłoki git dziennika "*/Expression.java" działa, ale pojedyncze cudzysłowy nie działają. – yoyo

Odpowiedz

3

Użyj wieloznaczny, żadnych ucieczek lub cytaty wymagane:

git log -- */Expression.java 

Testowane na Windows 7 w powłoce cmd i git bash.

W zależności od powłoki, możesz potrzebować wyceny - jeśli pojedyncze cytaty nie działają, spróbuj podwójnego cudzysłowu.

+0

Potwierdzono, że działa to teraz dla mnie. Wygląda na to, że padłem ofiarą błędu występującego w kilku wersjach gita dostępnych w tym czasie. Poprawka, o której mowa w http://git-blame.blogspot.com/2012/01/git-1776-1784-and-179-rc2.html, to https://github.com/git/git/commit/5c8eeb8. Po raz pierwszy pojawił się w 1.7.7.6, wydany zaledwie kilka miesięcy przed zadaniem mojego pytania. –

3

użycie xargs:

find . -name 'Expression.java' | xargs git log --oneline -2 
+0

Zakłada się, że plik istnieje lokalnie. Co się stanie, jeśli chcesz zarejestrować plik, który został usunięty? – yoyo

0

Z git 2.8 (marzec 2016), symbole wieloznaczne są bardziej mocno wspierane zarówno jako pathspec, jak i refspec.

Zobacz commit aac4fac, commit df714f8, commit 1cc777d (10 lutego 2016) przez Jeff King (peff).
(Scalony przez Junio C Hamano -- gitster -- w commit e6a6a76, 24 lut 2016)

Oznacza to, że:

  • wilcard współpracuje z pathspecs:

    git log -- "*.t" 
    # or 
    git log "*.t" 
    
  • wieloznaczny współpracuje z refspecs (przy szukaniu dla wiadomości zatwierdzającej, zaczynającej się na przykład od "b":

    git log "HEAD^{/b.*}" -- 
    # or 
    git log "HEAD^{/b.*}