Ответ 1
Со стандартными инструментами SVN нет такой вещи - она упоминала в часто задаваемые вопросы как плохую вещь.
Испорченный TortoiseSVN, теперь я использую командную строку в Linux для взаимодействия с репозиторием SVN.
В TortoiseSVN я бы просто внес изменения, и он покажет мне список того, что было добавлено, что было удалено и что было изменено. Я бы проверил все поля и нажал OK.
В командной строке мне кажется, что я должен делать svn add
, когда я добавляю файлы и svn rm
, когда я удаляю файлы, и когда все это делается, я набираю svn commit
, и он фиксирует добавленные, удаленные и измененный.
Есть ли команда, которую я могу использовать, просто компилирует файлы/папки, которые я удалил, файлы/папки, которые я добавил, и файлы, которые я изменил за один раз?
Со стандартными инструментами SVN нет такой вещи - она упоминала в часто задаваемые вопросы как плохую вещь.
В Windows будет работать следующий пакетный файл:
for /f "tokens=2*" %%i in ('svn status %1 ^| find "?"') do svn add "%%i"
for /f "tokens=2*" %%i in ('svn status %1 ^| find "!"') do svn delete "%%i"
svn commit -m "Automatic commit" %1
Просто сохраните три строки выше в файле с именем "autocommit.bat". Если вы запустите его из рабочего каталога, вам не нужно указывать параметр. Если вы находитесь в другом каталоге, вы можете называть его как autocommit.bat c:\MyProjectFolder
.
Надер Ширази имел правильную команду в размещенном script. Здесь версия для одной строки для Linux:
svn add $(svn st | sed -n 's/^[A?] *\(.*\)/\1/p')
Я давно хотел эту функциональность и рад, что искал здесь!
Нет SVN-команды, но я уверен, что есть script или два, которые могут сканировать файлы с неверсированными/отсутствующими и выдавать соответствующие команды...
Я нашел его здесь: http://gael-varoquaux.info/computers/svnautocommit/index.html
Добавление полного script
#!/bin/bash
#------------------------------- Subroutines ---------------------------------
usage(){
echo " Usage: $(basename $0) PATH"
echo ""
echo "Automatically commits the changes of svn working copy located in PATH."
echo "The new files are automatically added and the files that have been removed"
echo "are removed."
echo ""
echo "By Gael Varoquaux"
}
#------------------------------- Process the options -------------------------
if [ $# -eq 1 ]
then
workingdir="$1"
else
usage
exit 1
fi
if ! cd $workingdir
then
echo $workingdir is not a accessible path.
usage
exit 1
fi
#------------------------------- Find out what has changed -------------------
# A warning if this fails :
echo "SVN autocommit failed" > $HOME/local/motd
svnstatus=$(svn status $workingdir)
added=$(printf "$svnstatus" | sed -n 's/^[A?] *\(.*\)/\1/p')
removed=$(printf "$svnstatus" | sed -n 's/^! *\(.*\)/\1/p')
if [ "x$added" != "x" ]
then
echo adding "$added" to repository
svn add $added
fi
if [ "x$removed" != "x" ]
then
echo removing "$removed" to repository
svn remove $removed
fi
svn commit -m "autocommit" && rm $HOME/local/motd
Версия Python, похоже, не существует.
Вы можете изменить script, чтобы принять параметр для комментариев, но это начало. Вы также можете изменить его, чтобы быть простым способом для добавления/удаления для вас, и выполнить фиксацию вручную.
Чтобы добавить:
svn status | grep "^\?" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn add
Чтобы удалить:
svn status | grep "^\!" | sed -e 's/! *//' | sed -e 's/ /\\ /g' | xargs svn remove
Это отлично работает для меня.
Если вы хотите сделать это с помощью PowerShell, вот простая функция, которая использует svn status
:
svn status | ? { $_ -match '^\?\s+(.*)' } | % { svn add $Matches[1] }
Кредиты отправляются в ответ на команду SVN с вопросом о переполнении стека, чтобы удалить все локально отсутствующие файлы. Я скорректировал его работу для новых файлов.
В файле PowerShell я сделал это так:
# Delete missing files
svn status | ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }
# Added new files
svn status | ? { $_ -match '^\?\s+(.*)' } | % { svn add $Matches[1] }
# Commit repository
svn commit -m "This commit is done by a PowerShell bat"
Короче говоря, нет. Вы должны svn add
и svn delete
каждый элемент.
Если вы не привязаны к SVN, некоторые другие системы управления версиями предлагают эту функцию; например, Mercurials hg addremove
.
В то время как сжатые команды с использованием аргументов строки являются мощными, они могут пропустить (или не дать) включить имена файлов с пробелами. Следующая команда из ответ на аналогичный вопрос, который будет содержать все файлы.
svn add --force * --auto-props --parents --depth infinity -q
Автоматически добавлять новые файлы:
svn st | sed -rn '/^\?/s/^.{8}(.+)$/\1/p' | xargs -r svn add
Автоматически удалять удаленные файлы:
svn st | sed -rn '/^!/s/^.{8}(.+)$/\1/p' | xargs -r svn rm
Это в основном сжатая версия ответа lucas, которая объединяет grep
и два вызова sed
в один.
-r
использует расширенные регулярные выражения-n
не проходит через вход?
или !
(/^\?/
и /^!/
, соответственно)s/^.{8}//
s/(.+)$/\1/p
Смотрите также: http://www.grymoire.com/Unix/sed.html
Параметр -r
(или --no-run-if-empty
) для xargs
(версия GNU) прекращает обработку, когда нет ввода из sed
, поэтому исключая ошибку SVN Not enough arguments provided
.