Подтвердить что ты не робот

Как удалить существующий список изменений из 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? Я знаю, как удалить файлы из списка изменений, но не сам список изменений.

4b9b3361

Ответ 1

Удалите все связанные файлы из списка изменений и он исчезнет.

Официальный способ

См. fooobar.com/questions/180969/...

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

Автоматизация в Bash

# Remove all files from a specific CL
# Usage: svn_remove_cl my_changes
function svn_remove_cl() {
    svn status |\
    sed -n "/--- Changelist '$1':/,/--- Changelist.*/p" |\
    grep -v '^--- Changelist' |\
    awk '{print $2}' |\
    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

Ответ 2

Если вы хотите удалить только один список изменений (например, my_changes), перейдите в папку верхнего уровня вашей рабочей копии и запустите:

svn changelist --remove --recursive --cl my_changes .

Ответ 3

Для тех, кто задается вопросом, вы можете сделать это с помощью одной команды с svn. Просто перейдите к директории с файлами под вашим списком изменений и выполните:

svn changelist --remove --recursive .

Это будет охватывать все файлы в текущем каталоге и попытаться отключить их из списка изменений.