2009-10-16 11 views
13

Kiedy używam "svn diff" z linii poleceń, wypisuje ona linie, które się zmieniły, ale także 3 niezmienione linie przed i po kontekście. Wolę widzieć tylko zmienione linie bez kontekstu. Nie byłem w stanie określić żadnych opcji wiersza poleceń, które pozwolą mi sprawić, by zachowywał się w ten sposób. Standardowe 'diff' i 'cvs diff' robią to, co chcę domyślnie. Z pewnością "svn diff" może to zrobić, ale czegoś mi brakuje. Ktoś wie jak?Jak uzyskać BEZ kontekstu podczas używania svn diff

Odpowiedz

17

Po zapoznaniu się z przydatnym linkiem podanym powyżej, rozwiń, krótka odpowiedź brzmi, że svn został zbudowany -in diff nie może zrobić tego, co chcę. Możesz powiedzieć, aby używał standardowego zewnętrznego porównania i przekazywać arg do tego, aby powiedzieć, że nie chcesz żadnego kontekstu. I umieścić następującą alias w moim .bashrc i teraz wszystko działa dobrze, jeśli mogę użyć że zamiast:

alias svndiff='svn diff --diff-cmd=diff -x -U0' 
+2

'-x' jest parametrem rozszerzenia dla' svn diff', powoduje token następujący zaraz po, tutaj '-U0', aby przekazane do polecenia diff określonego przez '--diff-cmd', tutaj' diff'. – valid

2

This thread wydaje się dojść do wniosku, że należy użyć polecenia zewnętrznego diff w celu kontrolowania ilości kontekstu.

Wolę ujednoliconej dyferencjału, więc moje palce zawsze wpisać

svn diff -x -u 

co oznacza, że ​​komenda zewnętrzna (GNU diff) jest używana, tak myślę.

+0

Dzięki za przydatne łącze. Zaskakuje mnie, że wbudowane różnice nie mogą zrobić tego, co chcę. Wydaje mi się, że naruszam zasadę uniksowego posiadania najmniejszej wymaganej mocy wyjściowej. Użycie poleceń -x -u daje takie same wyniki, jak nie. 'svn help diff' powiedz mi, że są to wartości domyślne. Może w ogóle nie musisz wpisywać dodatkowych znaków? – DaveBurns

3

Możesz przesłać wyniki "svn diff" do grep i napisać wyrażenie regularne, aby uzyskać to, co chcesz. Na przykład, spróbuj tego:

svn diff | grep "^[+-\]" 

Powyższe polecenie dostaje wszystkie linie, które zaczynają się od „+” lub „-” lub „\”. (Potrzebujesz '\', jeśli chcesz zobaczyć różnice takie jak "\ Brak nowej linii na końcu pliku".)

+0

Działa to dobrze, jeśli chcesz tylko zmienione linie. Jednak nie wyświetla prawidłowych informacji o numerach linii. Na przykład. z 3 liniami kontekstu przed/po "@@ -21,7 +21,7 @@" mówi linia 24 została zmieniona. Bez kontekstu zobaczysz "@@ -24,1 +24,1 @@" – kamczak

4

Sugestia powyżej nadal produkuje formatu kontekstowego, ale z 0 linii kontekstu. To wciąż nie jest tradycyjny wynik porównania przed subwersją.

Co działa dla mnie jest: svn di --diff-cmd=diff -x --normal

Opcja --normal (w diff, że statki z OSX) daje tradycyjny format, który niektórzy ludzie wolą.

Powiązane problemy