svn - How do I ignore files in Subversion? -
how ignore files in subversion?
also, how find files not under version control?
(this answer has been updated match svn 1.8 , 1.9's behaviour)
you have 2 questions:
marking files ignored:
by "ignored file" mean file won't appear in lists "unversioned": svn client pretend file doesn't exist @ in filesystem.
ignored files specified "file pattern". syntax , format of file patterns explained in svn's online documentation: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "file patterns in subversion".
subversion, of version 1.8 (june 2013) , later, supports 3 different ways of specifying file patterns. here's summary examples:
1 - runtime configuration area - global-ignores option:
  - this client-side only setting, global-ignoreslist won't shared other users, , applies repos checkout onto computer.
- this setting defined in runtime configuration area file:  - windows (file-based) - c:\users\{you}\appdata\roaming\subversion\config
- windows (registry-based) - software\tigris.org\subversion\config\miscellany\global-ignoresin bothhklm,hkcu.
- linux/unix - ~/.subversion/config
 
- windows (file-based) - 
2 - svn:ignore property, set on directories (not files):
  - this stored within repo, other users have same ignore files. similar how .gitignoreworks.
- svn:ignoreapplied directories , non-recursive or inherited. file or immediate subdirectory of parent directory matches file pattern excluded.
- while svn 1.8 adds concept of "inherited properties", - svn:ignoreproperty ignored in non-immediate descendant directories:- cd ~/myreporoot # open existing repo. echo "foo" > "ignorethis.txt" # create file called "ignorethis.txt". svn status # check see if file ignored or not. > ? ./ignorethis.txt > 1 unversioned file # ...it not ignored. svn propset svn:ignore "ignorethis.txt" . # apply svn:ignore property "myreporoot" directory. svn status > 0 unversioned files # ...but file ignored! cd subdirectory # open subdirectory. echo "foo" > "ignorethis.txt" # create file named "ignorethis.txt". svn status > ? ./subdirectory/ignorethis.txt # ...and is not ignored! > 1 unversioned file- (so file - ./subdirectory/ignorethisnot ignored, though "- ignorethis.txt" applied on- .repo root).
- therefore, apply ignore list recursively must use - svn propset svn:ignore <filepattern> . --recursive.- this create copy of property on every subdirectory.
- if <filepattern>value different in child directory child's value overrides parents, there no "additive" effect.
- so if change <filepattern>on root., must change--recursiveoverwrite on child , descendant directories.
 
- i note command-line syntax counter-intuitive. - i started-off assuming ignore file in svn typing svn ignore pathtofiletoignore.txtnot how svn's ignore feature works.
 
- i started-off assuming ignore file in svn typing 
3- svn:global-ignores property. requires svn 1.8 (june 2013):
  - this similar svn:ignore, except makes use of svn 1.8's "inherited properties" feature.
- compare svn:ignore, file pattern automatically applied in every descendant directory (not immediate children).- this means unnecessary set svn:global-ignores--recursiveflag, inherited ignore file patterns automatically applied they're inherited.
 
- this means unnecessary set 
- running same set of commands in previous example, using - svn:global-ignoresinstead:- cd ~/myreporoot # open existing repo echo "foo" > "ignorethis.txt" # create file called "ignorethis.txt" svn status # check see if file ignored or not > ? ./ignorethis.txt > 1 unversioned file # ...it not ignored svn propset svn:global-ignores "ignorethis.txt" . svn status > 0 unversioned files # ...but file ignored! cd subdirectory # open subdirectory echo "foo" > "ignorethis.txt" # create file named "ignorethis.txt" svn status > 0 unversioned files # file ignored here too!
for tortoisesvn users:
this whole arrangement confusing me, because tortoisesvn's terminology (as used in windows explorer menu system) misleading me - unsure significance of ignore menu's "add recursively", "add *" , "add " options. hope post explains how ignore feature ties-in svn properties feature. said, suggest using command-line set ignored files feel how works instead of using gui, , using gui manipulate properties after you're comfortable command-line.
listing files ignored:
the command svn status hide ignored files (that is, files match rga global-ignores pattern, or match immediate parent directory's svn:ignore pattern or match ancesor directory's svn:global-ignores pattern.
use --no-ignore option see files listed. ignored files have status of i, pipe output grep show lines starting "i".
the command is:
svn status --no-ignore | grep "^i" for example:
svn status > ? foo                             # unversioned file > m modifiedfile.txt                # versioned file has been modified  svn status --no-ignore > ? foo                             # unversioned file > ignorethis.txt                  # file matching svn:ignore pattern > m modifiedfile.txt                # versioned file has been modified  svn status --no-ignore | grep "^i" > ignorethis.txt                  # file matching svn:ignore pattern ta-da!
Comments
Post a Comment