Как узнать, что будет обновлено из репозитория, до выполнения команды svn update?

Я внес изменения в многочисленные файлы в репозиторий SVN из Eclipse.

Затем я перехожу в каталог веб-сайта в окне Linux, где я хочу обновить эти изменения из репозитория в каталог там.

Я хочу сказать «svn update project100», который обновит каталоги в «project100» со всеми моими добавленными и измененными файлами и т. Д.

ОДНАКО, я не хочу обязательно обновлять изменения, которых я не делал. Итак, я подумал, что могу сказать «svn status project100», но когда я это сделаю, я получаю совершенно другой список изменений, которые будут внесены, ни одного из моих нет в списке, что странно.

Следовательно, чтобы быть уверенным, что в веб-каталог обновляются только мои изменения, я вынужден перейти в каждый каталог, где, как я знаю, есть внесенные мной изменения, и явно обновляю только эти файлы, например "svn update newfile1.php" и т. д., что утомительно.

Может ли кто-нибудь пролить свет на стандартную рабочую процедуру здесь, а именно на то, как мне получить точный список всех изменений, которые будут сделаны, прежде чем я выполню команду «svn update»? Я думал, это команда "статус".


svn
person Edward Tanguay    schedule 08.10.2008    source источник


Ответы (7)


Пытаться:

svn status --show-updates

или (то же, но короче):

svn status -u
person Dave Webb    schedule 08.10.2008
comment
или короче: svn st -u - person Kenyakorn Ketsombut; 11.11.2013
comment
Что означает X в выводе? - person IgorGanapolsky; 10.11.2016
comment
Также используйте: svn status -q -u ... Показывает только изменения обновления и локальные изменения, относящиеся к файлам, принадлежащим репозиторию. Вы не получаете вопросительных знаков (?) От файлов, не являющихся репозиториями. - person will; 23.08.2019

В зависимости от того, что вы хотите знать между вашей рабочей копией и последним репозиторием svn server, без обновления вашей локальной рабочей копии, вы можете сделать следующее:

если вы хотите узнать, что было изменено в репозитории svn server, выполните команду:

$ svn st -u

если вы хотите узнать, был ли изменен один и тот же файл как в вашей локальной рабочей копии, так и в репозитории svn server, выполните команду:

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

если вы хотите получить список файлов, измененных между определенной ревизией и HEAD, выполните команду:

$ svn diff -r revisionNumber:HEAD --summarize

если вы хотите получить список файлов, измененных между конкретными ревизиями, выполните команду:

$ svn diff -r revisionNumber:anotherRevisionNumber --summarize

если вы хотите увидеть, что будет обновлено (без фактического обновления), выполните команду:

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

если вы хотите узнать, какое содержимое конкретного файла было изменено в репозитории svn server по сравнению с вашей рабочей копией, выполните команду:

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

если вы хотите узнать, какое содержимое всех файлов было изменено в репозитории svn server по сравнению с вашей рабочей копией, выполните команду:

$ svn diff -r BASE:HEAD .
person TianCaiBenBen    schedule 08.11.2012

Вы можете увидеть, что будет обновлено (без фактического обновления), выполнив:

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

Подробнее см. здесь.

person Ben Hoffstein    schedule 08.10.2008
comment
Выше у меня не сработало, пришлось запустить svn merge --dry-run --revision BASE:HEAD . - person Znarkus; 10.03.2011
comment
Получение svn: E195020: Невозможно выполнить слияние в рабочую копию смешанной ревизии [16032: 16061]; попробуйте сначала обновить - person Hubert Grzeskowiak; 23.10.2014
comment
Отличный ответ - жаль, что он не работает с рабочими копиями смешанной ревизии .. Это меня научит - person Gerard ONeill; 23.06.2015
comment
@HubertGrzeskowiak - мне нравится ирония q: how do I ... without doing an update? a: first, do an update, then ... :) :) :) - person Jesse Chisholm; 01.02.2016

Это то, что я искал. Сначала проверил Google, но svn help в конце концов достал меня :)

svn diff -r BASE:HEAD .
person Jeff    schedule 14.02.2011

То же, но короче покороче :):

svn st -u
person Kenzo    schedule 23.08.2011

Вы можете использовать svn diff, чтобы увидеть разницу между вашей рабочей копией и репозиторием.

person Andrew    schedule 08.10.2008
comment
Неправильный. Это будет лишь список различий между вами и последней синхронизацией с репозиторием. Тем временем вы не увидите никаких различий, которые другие люди внесли в репозиторий. OP хочет знать, что это за изменения, не применяя их через svn update - person dland; 01.12.2010
comment
@Andrew имел в виду предложить, чтобы OP запускал 'svn diff -r HEAD URL', чтобы увидеть разницу между извлеченными файлами и тем, что было зарегистрировано как HEAD или верхняя версия в репозитории. - person Mac; 20.05.2017

Теоретически вы можете внести все свои изменения в ветку, которую вы создали для себя. Тогда вы будете достаточно уверены, что вы единственный, кто совершил это.

ИМХО разработка фичи должна происходить так.

Затем вы можете обновить эту целевую машину из этой ветки, а не из магистрали.

person Rory Becker    schedule 08.10.2008