2008-10-01 17 views
18

Mam pewne lokalne zmiany w projekcie typu open source, który wykorzystuje Subversion jako jego źródło. (Nie mam dostępu do zatwierdzania w oryginalnym repozytorium projektu.)Różnica między subversion, w tym nowe pliki

Moja zmiana dodaje plik, ale ten plik nie jest zawarty w wynikach polecenia "svn diff". (Warto zauważyć, że nowy plik jest plikiem binarnym, a nie zwykłym tekstem.)

Jak mogę utworzyć patch, który zawiera nowe pliki?


$ svn st 
    A  tests/foo.zip 
$ svn diff 
$ 
+4

Jestem bardzo zainteresowany w odpowiedzi na to pytanie, gdy plik jest * nie * binarny. – Glyph

+0

@Glyph: zajrzyj tutaj: http://stackoverflow.com/q/4248768/427532 –

Odpowiedz

6

Fakt, że plik jest binarny, jest dokładnie tym, dlaczego nie jest wyświetlany. Obawiam się. Polecenie diff w Subversion zawiera tylko tekstowe łaty/łatki (nawet jeśli wewnętrznie Subversion może skutecznie radzić sobie z różnicami w plikach binarnych między wersjami).

+1

arg! kolejny powód, dla którego nie lubię subwersji. łatki git obsługują pliki binarne płynnie, jeśli ktoś potrzebuje alternatywy –

0

Jeśli budujesz poprawkę, można użyć zwykły stary „diff” z opcją --new-pliku, który traktuje brakujący plik jako pusty.

Zwróć uwagę, że składnia tej opcji może w rzeczywistości różnić się w zależności od wersji zwykłego pliku różnicowego, którego używasz.

12

Istnieje opcja --force dla polecenia diff, ale tworzy niepoprawny plik poprawki dla plików binarnych na moim komputerze. Używanie go z opcją --diff-cmd działa dla mnie jednak:

svn diff --force --diff-cmd /usr/bin/diff -x -au 

Myślę, że to daje dokładnie to, co chciałeś.

26

Doświadczyłem podobnego zachowania do Pozsara. A jego odpowiedź działała dla mnie lepiej niż normalna svn diff - siła. Jednakże, jeśli działasz na maszynie DOS (np. Przez Cygwin), być może będziesz musiał nieco zmodyfikować swoją odpowiedź. Poniższy diff + łata łatanie pracował mój tekst + pliki binarne w Cygwin pomocą --binary Arg

svn diff --force --diff-cmd /usr/bin/diff -x "-au --binary" OLD-URL NEW-URL > mybinarydiff.diff 

patch -p0 --binary -i mybinarydiff.diff 
Powiązane problemy