Я хочу зафиксировать большое количество измененных XML-файлов. Однако в каталоге, который я хочу рекурсивно искать, есть много папок / файлов, которые были добавлены локально, и я не хочу их фиксировать.
Есть ли способ сделать это в командной строке?
Обновление: я должен был включить информацию о версии SVN: svn, версия 1.4.6 (r28521), скомпилирована 11 марта 2008 г., 08:26:35
P.S. Мне были бы интересны ответы, в том числе о том, как принудительно выполнить фиксацию, например даже если файлы заблокированы.
Вы пробовали использовать свойство svn: ignore для локальных файлов / папок? Но если вы их не добавите svn, они не будут зафиксированы ...
обычно --force позволяет украсть блокировку файла.
--force выдает ошибку, говоря, что она не распознана для команды svn commit. 'svn help commit' упоминает только параметр принудительного ведения журнала, который, как я полагаю, мне не нужен.
РЕДАКТИРОВАТЬ: Я переписываю этот ответ на основе некоторой информации, которую вы обновили в своих вопросах.
Во-первых, для принудительной разблокировки файлов недостаточно просто выполнить фиксацию. Вы используете --force с командой разблокировки, и вы должны использовать ее с точным URL-адресом, который вы хотите разблокировать. К сожалению, это единственный способ сделать это, если у вас нет доступа к репозиторию. Если у вас есть доступ к репозиторию напрямую, вы можете использовать команду svnadmin, как показано здесь:
svnadmin lslocks /path/to/repository
Это отобразит заблокированные файлы. Отпереть:
svnadmin rmlocks /path/to/repository /project/path/to/locked/file
Если у вас нет прямого доступа к репозиторию, вы снимаете блокировки по очереди следующим образом:
svn --force unlock svn://url.to.repository/project/path/to/locked/file
Когда вы будете готовы к регистрации, вы можете напрямую перечислить файлы, которые вы хотите зарегистрировать, вместо того, чтобы просто делать каталог по умолчанию. Это позволит вам регистрировать только измененные файлы XML, игнорируя изменения, дополнения в структуре каталогов или что-то еще, что вы не хотите регистрировать (также добавлен пример разблокировки):
svn --force unlock svn;//url.to.repository/project/janes_subdir/jane.xml
svn ci -m "Whatever Log" foo.xml junk.xml my_subdir/*.xml janes_subdir/jane.xml
Обычно я бы не стал, но держатели собрали вещи и уехали домой на ночь. :-)
Ну ладно, тогда в этом есть смысл :)
Вы не указали, какую командную строку, предполагая UNIX или cygwin.
Несколько вариантов:
find . -name '*.xml' -print0 | xargs -0 svn ci
svn status | egrep '^M.*\.xml$' | sed -e 's/^. *//' > tmp.txt && svn ci --targets tmp.txt
svn status > tmp.txt && $EDITOR tmp.txt && sed -e 's/^. *//' < tmp.txt > tmp2.txt && svn ci --targets tmp2.txt
ПРИМЕЧАНИЕ: я не тестировал команды.
Первый зафиксирует все файлы XML (включая те, которые вы недавно добавили - это не проблема, если вы не добавили новые файлы xml).
Второй фиксирует все измененные xml-файлы.
Третий позволит вам изменить список файлов перед фиксацией. Просто удалите все строки, которые вы не хотите фиксировать. Возможно, вам будет удобнее выполнять каждую команду отдельно, чем связывать их все вместе, как я (разделить на &&).
Что касается блокировки, был еще один комментарий, который, казалось, охватил большую часть этого.
Это помогло мне решить аналогичную проблему («фиксировать только недавно добавленные файлы»). Спасибо! Утилиты командной строки Unix спешат на помощь.
Я обновил свой ответ с учетом ваших изменений в вопросе. Я надеюсь, что теперь это более полезно, но если это происходит часто, я бы порекомендовал обновить (по крайней мере, клиентов) до 1.5, чтобы вы могли использовать набор изменений :)