как удалить существующий список изменений из SVN
Я создал группу на практике...
$ svn changelist my_changes
... добавил в него файлы, а затем зафиксировал список изменений...
$ svn ci --changelist my_changes --keep-changelists
... Итак, теперь я "сохранил" свой список изменений, и он появляется каждый раз, когда я просматриваю статус.
$ svn status
... modified/added/deleted files listed here...
--- Changelist 'my_changes':
... files that are a part of this changelist listed here...
Я "сохранил" список изменений по какой-то причине, но он мне больше не нужен, поэтому я готов его удалить. Как удалить этот список изменений из SVN? Я знаю, как удалить файлы из списка изменений, но не сам список изменений.
3 ответов
удалите все связанные файлы из списка изменений, и он исчезнет.
официальным путем
см.https://stackoverflow.com/a/15992735/253468
svn changelist --remove --recursive --cl my_changes .
ручным способом
то есть svn changelist --remove file.name
D:\Programming>mkdir test
D:\Programming>cd test
D:\Programming\test>svnadmin create .
D:\Programming\test>svn co file:///D:\Programming\test co
Checked out revision 0.
D:\Programming\test>cd co
D:\Programming\test\co>echo "hello" > test.file
D:\Programming\test\co>svn add test.file
A test.file
D:\Programming\test\co>svn status
A test.file
D:\Programming\test\co>svn changelist mycl test.file
A [mycl] test.file
D:\Programming\test\co>svn status
--- Changelist 'mycl':
A test.file
D:\Programming\test\co>svn changelist --remove test.file
D [mycl] test.file
D:\Programming\test\co>svn status
A test.file
автоматизация в Баш
# Remove all files from a specific CL
# Usage: svn_remove_cl my_changes
function svn_remove_cl() {
svn status |\
sed -n "/--- Changelist '':/,/--- Changelist.*/p" |\
grep -v '^--- Changelist' |\
awk '{print }' |\
xargs svn changelist --remove
}
объяснение:
-
svn status
: вывод всех измененных файлов -
sed
: найдите список изменений и возьмите вывод после заголовка CL до следующего CL или до концаsvn status
С выход -
grep
: удалите заголовки CL из буфера -
awk
: удалите статусы файлов, сохраните только имена файлов (т. е. второй столбец) -
xargs
: поместите каждую строку в качестве аргумента вsvn changelist
(может нужно подкрутить, если у вас есть пробелы или специальные символы в именах файлов)
пример запуска
~/tmp/wc$ svn status
A d
--- Changelist 'cl_a':
A a
A e
A f
--- Changelist 'cl_x':
A b
A c
~/tmp/wc$ svn_remove_cl cl_x
Path 'b' is no longer a member of a changelist.
Path 'c' is no longer a member of a changelist.
~/tmp/wc$ svn status
A b
A c
A d
--- Changelist 'cl_a':
A a
A e
A f
Если вы хотите удалить только один список изменений (например, my_changes), перейдите в папку верхнего уровня вашей рабочей копии и запустите:
svn changelist --remove --recursive --cl my_changes .
для тех, кому интересно, вы можете сделать это с помощью одной команды с svn. Просто перейдите в каталог to level файлов в списке изменений и запустите:
svn changelist --remove --recursive .
это будет цикл по всем файлам в текущем каталоге и попытаться отделить их от списка изменений.