SVN cmd для обновления без восстановления файлов - PullRequest
0 голосов
/ 23 октября 2018

У меня есть пакет Windows, который периодически запускается для добавления / удаления файлов из SVN

. Я хочу, чтобы скрипт выполнял:

  1. Удаление всех файловкоторые были удалены в Windows (не SVN) из SVN
  2. Добавить все файлы (*.*), которые еще не контролируются версиями
  3. Commit все изменения
  4. Обновление папки, чтобы убедиться, что папка обновлена.

У меня есть следующий пакет:

:: Go to my folder (already checked out as SVN folder)
cd C:\MyFolder\

:: Delete/Remove all missing files
svn status || ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }

:: Add new files
svn add *.*

:: Commit all changes
svn commit *.* -m ^"Committed on %date% %time%"

:: Update the folder
svn up --accept mine-full

Что происходит после того, как я сам удалил файл new file.txt в проводнике Windows

  1. Команда удаления запускается, затем выводит список файлов, например ! new file.txt
  2. Команда добавления выполняется, который добавляет все новые файлы, если любое
  3. Commit
  4. Обновление затем восстанавливает файл new file.txt <- я не хочу, чтобы он восстанавливал удаленный файл. </li>

для Удалить / Удалить часть Я также попробовал эти две команды:

svn status || grep "^\!" || sed 's/^\! *//g' || xargs svn rm
svn status || grep "^\!" | sed 's/^\! *//g' | gawk '{print "\""$0"\"" }' | xargs svn rm  ::includes whitespaces in filenames

Вывод:

C:\MyFolder>svn status   || ? { $_ -match '!\s+(.*)' }   | { svn rm $Matches[1] }
!       new file.txt

C:\MyFolder>svn add *.*
svn: Skipping argument: E200025: '.svn' ends in a reserved name
svn: warning: W150002: 'C:\MyFolder\old.txt' is already under 
version control
svn: E200009: Could not add all targets because some targets are already 
versioned
svn: E200009: Illegal target for the requested operation

C:\MyFolder>svn commit *.* -m "Committed on 2018-10-23 12:15:57.90"
svn: Skipping argument: E200025: '.svn' ends in a reserved name

C:\MyFolder>svn up --accept mine-full
Updating '.':
Restored 'new file.txt'
At revision 21.
Press any key to continue . . .

Нижняя строка, папканеобходимо синхронизировать с SVN (резервное копирование), поэтому, если есть файлы, добавленные / удаленные, они также должны быть добавлены / удалены в SVN

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Наконец-то заставил его работать сам.Благодаря @ user3689460 в https://stackoverflow.com/a/23944546/1876355

Я добавил svn delete "missing.list", иначе он добавил файл missing.list в SVN

Вот мой последний пакетный скрипт, который работает:

:: Go to my folder (already checked out as SVN folder)
cd C:\MyFolder\

:: Delete/Remove all missing files
svn status | findstr /R "^!" > missing.list
for /F "tokens=* delims=! " %%A in (missing.list) do (svn delete "%%A")
del missing.list 2>NUL
svn delete "missing.list"

:: Commit Deletion of missing files
svn commit -m "Deleted files from MyFolder on %date% %time%"

:: Add new files
svn add *.*

:: Commit all changes and additions
svn commit *.* -m ^"Committed MyFolder on %date% %time%"

:: Update the folder
svn up --accept mine-full
0 голосов
/ 23 октября 2018

Может быть, вы можете использовать «вырезать», чтобы выполнить удаление, например так (который берет все, начиная с 9-го столбца предыдущего вывода):

svn status | grep "^\!" | cut -c 9- | xargs svn rm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...