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

115

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

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

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

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

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

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

Эдвард Тангуай
источник

Ответы:

167

Пытаться:

svn status --show-updates

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

svn status -u
Дэйв Уэбб
источник
9
или короче: svn st -u
Kenyakorn Ketsombut
Что делать X «S среднее на выходе?
Игорь Ганапольский
1
Также используйте: svn status -q -u... Показывает только изменения обновления и локальные изменения, относящиеся к файлам, принадлежащим репозиторию. Вы не получаете вопросительных знаков (?) От файлов, не являющихся репозиториями.
будет
56

В зависимости от того, что вы хотите знать между своей рабочей копией и последним репозиторием 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 .
TianCaiBenBen
источник
43

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

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

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

Бен Хоффштейн
источник
Выше у меня не получилось, пришлось бежатьsvn merge --dry-run --revision BASE:HEAD .
Знаркус
3
Получение «svn: E195020: Невозможно выполнить слияние в рабочую копию смешанной ревизии [16032: 16061]; сначала попробуйте обновить»
Хуберт Гжесковяк
Отличный ответ - жаль, что он не работает с рабочими копиями смешанной ревизии .. Это меня научит
Джерард Ойилл
2
@HubertGrzeskowiak - Мне нравится ирония, q: how do I ... without doing an update?a: first, do an update, then ...:) :) :)
Джесси Чизхолм
17

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

svn diff -r BASE:HEAD .
Джефф
источник
14

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

svn st -u
Kenzo
источник
0

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

Андрей
источник
9
Неправильно. В них будут перечислены только различия между вами и последней синхронизацией с репозиторием. Тем временем вы не увидите никаких различий, которые другие люди внесли в репозиторий. ОП хочет знать , что эти изменения, не применяя их черезsvn update
dland
@Andrew имел в виду предложить, чтобы OP запускал 'svn diff -r HEAD URL', чтобы увидеть разницу между извлеченными файлами и тем, что зарегистрировано как HEAD или верхняя версия в репозитории.
Mac
0

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

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

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

Рори Беккер
источник