You probably already know that Subversion stores some kind of metadata for all files added to repository. It's called "properties" in Subversion vocabulary. This key-value map is responsible for registering ingored files masks, file attributes, internal file content type etc.
The property I'm going to present today is "mime-type". It describes file content in similar way to HTTP header "Content-type" telling svn client how to handle the file. Typical values are: "text/plain", "application/octet-stream". Especially first part of mime-type is important:
- text/*: line-by-line merges are used, diffs are generated
- any other prefix: no text merges prepared
If you do not set this properly right you may end up with messed binary file (end-of-line conversions) or non-mergable changes in text file (that is marked as binary by mistake).
Of course during adding a file to workspace one can forget to set those properties correctly. Here auto-props comes with help. Auto-props are applied when "svn add" command (from command line or from GUI) is issued. Configuration is placed inside "~/.subversion/config" file. Here's my config fragment from one of projects.
[auto-props] *.csv = svn:mime-type=text/plain *.java = svn:mime-type=text/plain *.sql = svn:mime-type=text/plain *.sql = svn:keywords=Author Date Id Revision URL *.jar = svn:mime-type=application/octet-stream
Besides mime-type svn:keywords is being set in the example. It controls which keywords are expanded in source files.