shrink_test_case: ensure that CVS files get closed.
[cvs2svn.git] / doc / text-transformations.txt
blob7b0f7f611f9ff9a05bbef84b59dbd5d9bb060f9a
1 This file collects information about how the various VCSs deal with
2 keyword expansion, EOL handling, and file permissions.
5 CVS/RCS
6 =======
8 There are several keyword expansion modes that can be set on files.
9 These options also affect whether EOLs are all converted to/from the
10 local convention.  The following keywords are recognized: Author,
11 CVSHeader (CVS only), Date, Header, Id, Locker, Name, RCSfile,
12 Revision, Source, State, and Log.  ("Log" is a special case because
13 its expansion is irreversible.)  Keyword names are case sensitive.
14 There is also a provision to define "Local keywords", which use a
15 user-defined name but expand as one of the standard keywords.
17 These modes are selected via a "-k" command-line option, so for
18 example the "kv" option is selected using the option "-kkv".
20 The available modes are:
22 * kv, kvl: Expand keywords, or expand them including locker name.
23   Also munge line endings.
25 * k: Collapse keywords (e.g. "$Revision: 1.2 $ -> "$Revision$"), except
26   for the $Log$ option, which is expanded.  Also munge line endings.
28 * o: Leave keywords (including the $Log$ keyword) in the form that
29   they were checked in.  Also munge line endings.
31 * v: Generate only keyword values instead of the full keyword string;
32   e.g., "$Revision$" -> "5.7".  (This is mostly useful for export.)
33   Also munge line endings.
35 * b: Leave keywords in the form that they were checked in, inhibit
36   munging of line endings between canonical LF to the local
37   convention, and prevent merging of file differences.
39 Whether or not a file is executable is determined from the executable
40 bit of the corresponding RCS file in the repository.
42 Please note that CVSNT handles file modes differently: it supports
43 additional modes, and it allows the file mode to differ from one file
44 revision to another.  This is the main reason that cvs2svn doesn't
45 work reliably with CVSNT repositories.
48 Subversion
49 ==========
51 * svn:executable: If this property is set, the file is marked as
52   executable upon checkout.
54 * svn:mime-type: Used to decide whether line-based merging is safe,
55   whether to show diff-based deltas between revisions, etc.
57 * svn:keywords: List the keywords that will be expanded in the file.
59 * svn:eol-style: Specifies how to manipulate EOL characters.  If this
60   property is set, then the file can be committed to Subversion using
61   somewhat more flexible EOL conventions.  In the Subversion
62   repository the text is normalized to a particular EOL style,
63   probably the "svnadmin dump" style listed below.  On checkout or
64   export, the LFs will be converted to the specified EOL style.
65   Possible values:
67   * LF, CRLF, CR:
69     On commit: text can contain any mixture of EOL styles.
71     svnadmin dump: file text contains the specified EOL format.
73     svnadmin load: should presumably be consistent with the "svnadmin
74     dump" format.
76   * native:
78     On commit: text can use any EOL style, but lines must be
79     consistent.
81     svnadmin dump: file text contains the canonical LF format.
83     svnadmin load: should presumably be consistent with the "svnadmin
84     dump" format.
87 Git
88 ===
90 * The executable status of a file is determined by a file mode
91   attribute in the fast-import file.
93 * Keywords: Not obvious what to do.  There is support for expanding an
94   $Id$ keyword via the gitattributes mechanism.  Others could only be
95   supported via custom-written filters.
97 * EOL style: Normally, git does not do any line-end conversion.
98   However, there is a way to use gitattributes to mark particular
99   files as text files, and to use the configuration settings of
100   core.autocrlf and core.safecrlf to affect conversions between LF and
101   CRLF formats.
103 * The "diff" gitattribute can be used to tell how to generate diffs
104   for a file (otherwise a heuristic is used).  This attribute can be
105   used to force a file to be treated as text/binary, or tell what
106   "diff driver" to use.