how do I remove an existing changelist from SVN
Solution 1:
Remove all the associated files from a changelist and it'll disappear.
Official way
See https://stackoverflow.com/a/15992735/253468
svn changelist --remove --recursive --cl my_changes .
Manual way
i.e. 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
Automation in 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
}
Explanation:
-
svn status
: output all the modified files -
sed
: find the changelist and take the output after the CL title until the next CL or the end ofsvn status
's output -
grep
: remove the CL titles from the buffer -
awk
: remove the file statuses, keep only the filenames (i.e. the second column) -
xargs
: put each line as an argument tosvn changelist
(may need tweaks if you have spaces or special characters in the filenames)
Example run
~/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
Solution 2:
If you want to delete just one changelist (e.g. my_changes) move to the top level folder of your working copy and run:
svn changelist --remove --recursive --cl my_changes .
Solution 3:
For those that are wondering, you can do this with a single command with svn. Simply navigate to the to level directory of files under your change list exist and run:
svn changelist --remove --recursive .
This will loop over all files under the current directory and attempt to disassociate them from the change list.