2013-03-13 11 views
6

Adnotacja pozwala na zobaczenie ostatniej zmiany w tej linii, jeśli ta zmiana jest połączeniem, wtedy nie mam innego wyjścia, jak przeszukać historię zmian i znaleźć następnym razem został zmodyfikowany.Mercurial - Wyświetl wszystkie zestawy zmian, które modyfikują konkretną linię w pliku

Próbowałem zostały również hg grep -l '[contents of line]' ALE:

  • a) nie mogę dowiedzieć się, jak kierować konkretne pliki (tak to trwa wiecznie w umiarkowanie wielkości repo)
  • b) Wydaje zwrócić tylko ostatni numer wersji

Poniższy link jest niejasno podobny - How to find all changsets where a reference to a function was modified?

Odpowiedz

8

Zastosowanie TortoiseHg:

  1. Widok -> Manifest
  2. prawym przyciskiem myszy na pliku interesuje i kliknij "File History"
  3. kliknięcie "adnotacje o numerach wersji"

Górny panel pozwala szybko zobaczyć historię pliku w kategoriach zatwierdzeń, dolny panel pokazuje plik z adnotacjami w oparciu o wybraną wersję w górnym panelu.

+1

Może to dlatego, że jestem na późniejszej wersji TortoiseHg (3.2.3), ale nie widzę, w jaki sposób pomaga to odizolować zmiany jednej linii? (Nie mogę znaleźć opcji manifestu, ale zachowanie adnotacji plików z menu kontekstowego eksploratora/wtyczki wydaje się robić to, co sugeruje ta odpowiedź, czyli jak plik wygląda na różne wersje, wciąż musisz znaleźć wiersz pytanie w każdej wersji.) – downwitch

+1

za brakujący manifest - http://stackoverflow.com/questions/23457746/manifest-button-missing-in-tortoise-hg – Tom

1

myślę, że to requ jest trochę (dwuetapowego) programowania.

Poniższy skrypt powłoki działa całkiem dobrze dla mnie. Wyświetla zarówno poprawki, jak i pasujące wiersze. Jeśli chcesz tylko listę zmian, można dodać krok rozebrać tekst pasujący i pozostawić tylko przedrostek wersji i ewentualnie rurę przez „sort -u”:

#!/bin/bash 
# 
# script to grep for a pattern in all revisions of a file 
# Usage: scriptname 'pattern' filepath 
# 
function fatal() { 
    echo "[email protected]" 1>&2 
    exit 1 
} 

function usage() { 
    echo "[email protected]" 1>&2 
    fatal Usage: $0 pattern file 
} 

case "$1" in 
    '') usage 'missing pattern to search for' ;; 
    *) Pat="$1" ;; 
esac 

if [ "$2" != '' ]; then 
    File="$2" 
else 
    usage 'must pass file as 2nd argument' 
fi 

# -- generate list of revisions (change-sets) involving $File 
for rev in `hg log --template '{rev}\n' $File`; do 
    # -- grep the wanted pattern in that particular revision 
    hg grep "$Pat" -r $rev $File 
done 

Uwagi:

  • nie w pełni niezawodne (np cytaty we wzorcu)
  • nie sprawdzenia istnienia pliku wspierać zmienionymi/plików usuniętych także
+0

Chciałbym móc to zrobić w łatwiejszy sposób. Nie używam TortoiseHg – ganeshran

2

Korzystanie odpowiedź arielf bez dodatkowego skryptu:

UNIX:

  • polecenie:

    hg log --template '{rev}\n' <FILE> | 
        xargs -I @ hg grep <PATTERN> -r @ <FILE> 
    
  • można to wykorzystać, aby dodać alias do pliku konfiguracyjnego (.hgrc)

    [alias] 
    _grep_line_in_history = ! $HG log --template '{rev}\n' $2 | 
        xargs -I @ hg grep '$1' -r @ $2 
    

WINDOWS:

  • polecenie:

    FOR /F "usebackq" %i IN (`hg log --template "{rev}\n" <FILE>`) DO 
    @(echo %i & hg grep <PATTERN> -r %i <FILE>) 
    
  • ps:

    [alias] 
    _grep_line_in_history = ! FOR /F "usebackq" %i IN 
        (`%HG% log --template "{rev}\n" "$2"`) DO @(echo %i & %HG% grep "$1" -r %i "$2") 
    
Powiązane problemy