Jak sprawdzić, co zostanie zaktualizowane z repozytorium przed wydaniem polecenia „svn update”?

115

Dokonałem zmian w wielu plikach w repozytorium SVN z Eclipse.

Następnie przechodzę do katalogu witryny na komputerze z systemem Linux, w którym chcę zaktualizować te zmiany z repozytorium do katalogu tam.

Chcę powiedzieć „svn update project100”, co spowoduje aktualizację katalogów pod „project100” o wszystkie moje dodane i zmienione pliki itp.

JEDNAK nie chcę koniecznie aktualizować zmian, których nie wprowadziłem. Pomyślałem więc, że mógłbym powiedzieć „svn status project100”, ale kiedy to zrobię, otrzymuję zupełnie inną listę zmian, które zostaną wprowadzone, żadnej z moich nie ma na liście, co jest dziwne.

Dlatego, aby mieć pewność, że tylko moje zmiany są aktualizowane w katalogu WWW, jestem zmuszony przejść do każdego katalogu, w którym wiem, że jest zmiana, którą wprowadziłem i jawnie aktualizować tylko te pliki, np. „Svn update newfile1.php” itp. co jest żmudne.

Czy ktoś może rzucić trochę światła na standardową procedurę działania, a mianowicie, jak uzyskać dokładną listę wszystkich zmian, które mają zostać wprowadzone, zanim wykonam polecenie „svn update”? Myślałem, że to polecenie „statusu”.

Edward Tanguay
źródło

Odpowiedzi:

167

Próbować:

svn status --show-updates

lub (to samo, ale krócej):

svn status -u
Dave Webb
źródło
9
lub krócej: svn st -u
Kenyakorn Ketsombut
Co oznaczają X na wyjściu?
Igor Ganapolsky
1
Użyj również: svn status -q -u... Pokazuje tylko zmiany aktualizacji i zmiany lokalne, które odnoszą się do plików należących do repozytorium. Nie otrzymujesz znaków zapytania (?) Z plików, które nie są repozytorium.
będzie
56

W zależności od tego, co chcesz wiedzieć między kopią roboczą a najnowszym repozytorium serwera svn, bez aktualizowania lokalnej kopii roboczej, oto co możesz zrobić:

jeśli chcesz wiedzieć, co zostało zmienione w repozytorium serwera svn, uruchom komendę:

$ svn st -u

jeśli chcesz wiedzieć, czy ten sam plik został zmodyfikowany zarówno w Twojej lokalnej kopii roboczej, jak iw repozytorium serwera svn, uruchom polecenie:

$ svn st -u | grep -E '^M {7}\*'

jeśli chcesz uzyskać listę plików zmienionych między konkretną wersją a HEAD, uruchom polecenie:

$ svn diff -r revisionNumber:HEAD --summarize

jeśli chcesz otrzymać listę plików zmienionych pomiędzy poszczególnymi wersjami, uruchom polecenie:

$ svn diff -r revisionNumber:anotherRevisionNumber --summarize

jeśli chcesz zobaczyć, co zostanie zaktualizowane (bez faktycznej aktualizacji), uruchom polecenie:

$ svn merge --dry-run -r BASE:HEAD .

jeśli chcesz wiedzieć jaka zawartość konkretnego pliku została zmieniona w repozytorium serwera svn w porównaniu z twoją kopią roboczą, uruchom komendę:

$ svn diff -r BASE:HEAD ./pathToYour/file

jeśli chcesz wiedzieć jaka zawartość wszystkich plików została zmieniona w repozytorium serwera svn w porównaniu z twoją kopią roboczą, uruchom polecenie:

$ svn diff -r BASE:HEAD .
TianCaiBenBen
źródło
43

Możesz zobaczyć, co zostanie zaktualizowane (bez faktycznej aktualizacji), wydając:

svn merge --dry-run -r BASE:HEAD .

Więcej szczegółów tutaj .

Ben Hoffstein
źródło
Powyższe nie zadziałało, musiałem biecsvn merge --dry-run --revision BASE:HEAD .
Znarkus
3
Pobieranie „svn: E195020: Nie można scalić z kopią roboczą o mieszanej wersji [16032: 16061]; spróbuj najpierw zaktualizować”
Hubert Grzeskowiak
Świetna odpowiedź - szkoda, że ​​nie działa na mieszanych kopiach roboczych wersji. To mnie nauczy
Gerard ONeill
2
@HubertGrzeskowiak - Uwielbiam ironię q: how do I ... without doing an update?a: first, do an update, then ...:) :) :)
Jesse Chisholm
17

To jest to, czego szukałem. Najpierw sprawdziłem Google, ale w svn helpkońcu przeszedłem do mnie :)

svn diff -r BASE:HEAD .
Jeff
źródło
14

To samo, ale krócej krócej :):

svn st -u
Kenzo
źródło
0

Możesz użyć 'svn diff', aby zobaczyć różnicę między twoją kopią roboczą a repozytorium.

Andrzej
źródło
9
Źle. Będą one zawierać tylko różnice między tobą a ostatnią synchronizacją z repozytorium. W międzyczasie nie zobaczysz żadnych różnic, które inne osoby zapisały w repozytorium. PO chce wiedzieć, jakie są te zmiany, bez wprowadzania ich w drodze ansvn update
dland
@Andrew miał na celu zasugerowanie, aby OP uruchomił 'svn diff -r HEAD URL', aby zobaczyć różnicę między pobranymi plikami a tym, co jest wpisane jako wersja HEAD lub najlepsza w repozytorium.
Mac
0

Teoretycznie możesz dokonać wszystkich zmian w gałęzi, którą stworzyłeś na własny użytek. Byłbyś wtedy dość pewien, że tylko ty się do tego zobowiązałeś.

Rozwój funkcji IMHO powinien odbywać się w ten sposób.

Następnie możesz zaktualizować tę maszynę docelową z tej gałęzi zamiast z linii głównej.

Rory Becker
źródło