Subversion: фиксировать только измененные файлы - PullRequest
2 голосов
/ 13 ноября 2008

Я хочу зафиксировать большое количество XML-файлов, которые были изменены. Однако в каталоге, который я хочу рекурсивно искать, есть много папок / файлов, которые были добавлены локально, и я не хочу их фиксировать.

Есть ли способ сделать это в командной строке?

Обновление: я должен был включить информацию о версии SVN: svn, версия 1.4.6 (r28521), скомпилировано 11 марта 2008, 08: 26: 35

P.S. Я был бы заинтересован в ответах, которые включают в себя, как заставить коммит, например. даже если файлы были заблокированы.

Ответы [ 3 ]

4 голосов
/ 13 ноября 2008

Вы пытались использовать свойство svn: ignore для локальных файлов / папок? Но если вы не добавите их svn, они не будут совершены ...

обычно --force позволяет вам украсть блокировку файла.

3 голосов
/ 14 ноября 2008

Вы не указали, какая командная строка, поэтому предполагается, что UNIX или cygwin.

Несколько вариантов:

  1. find . -name '*.xml' -print0 | xargs -0 svn ci
  2. svn status | egrep '^M.*\.xml$' | sed -e 's/^. *//' > tmp.txt && svn ci --targets tmp.txt
  3. svn status > tmp.txt && $EDITOR tmp.txt && sed -e 's/^. *//' < tmp.txt > tmp2.txt && svn ci --targets tmp2.txt

ПРИМЕЧАНИЕ. Я не проверял команды.

Первый будет фиксировать все файлы XML (включая те, которые вы недавно добавили - не проблема, если вы не добавили новые файлы XML).

Второй фиксирует все измененные xml-файлы.

Третий вариант позволит вам изменить список файлов перед фиксацией. Просто удалите все строки, которые вы не хотите фиксировать. Возможно, вам будет удобнее выполнять каждую команду отдельно, а не связывать их все вместе, как я (разделено на &&).

Что касается блокировки, то был еще один комментарий, который, казалось, охватывал большую часть его.

2 голосов
/ 13 ноября 2008

РЕДАКТИРОВАТЬ : я переписываю этот ответ на основе информации, которую вы обновили в своих вопросах.

Во-первых, для принудительной разблокировки файлов недостаточно просто выполнить принудительную фиксацию. Вы используете --force с командой unlock, и вы должны использовать ее по точному 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
...