Ubuntu wordmark official

Image via Wikipedia

Subversion is awesome, but it's command line interface is "non-intuitive".  Here are some short-cuts I created to remember the commands.  The most useful are:

  • svn_add_all [folder]                - svn add any files not under version control
  • svn_revert_all [folder]             - revert any changes to folder recursively
  • svn_ignore [folder] [pattern]    - add the pattern to the folder's ignore list

Add this to your ~/.bashrc file (or ~/.bash_aliases in Ubuntu):

#   svn_add_all [folder]            - recursive add folder's unversioned files (respect svn:ignore and spaces in filenames)
#   svn_trim_all [folder]           - recursive svn-deletes missing files (deleted by user, but not svn-deleted)
#   svn_revert_all [folder]         - recursive revert any change in folder
#   svn_ignore [folder] [pattern]   - add pattern to folders svn:ignore property.  Use 's around wildcards.  E.g. '*' or '.*'
#   svn_ignore_edit [folder]        - edit svn:ignore property
svn_add_all () { svn status "$1" | grep '^?' | cut -b 8- | xargs -I {} svn add "{}"; }
svn_trim_all () { svn status "$1" | grep '^!' | cut -b 8- | xargs -I {} svn rm "{}"; }
svn_revert_all () { svn revert "$1" -R; }
svn_ignore () { FILE="$RANDOM.ignore"; svn propget svn:ignore "$1" > $FILE; echo "$2" >> $FILE;
                sed -i '/^$/d' $FILE; # remove blank lines
                svn propset svn:ignore "$1" -F $FILE; rm $FILE; }
svn_edit_ignore () { svn propedit svn:ignore "$1"; }

Note that these are bash functions instead of aliases.  Bash functions are more flexible with parameters.