目录
版本控制可以成为复杂的主题,和科学一样充满艺术性,为解决事情能提供了无数的方法。贯穿这本书,你已经阅读许多Subversion命令行子命令,以及可以改变运行方式的选项,在本章我们要查看一些自定义Subversion工作的方法—设置Subversion运行配置,使用外置帮助程序,Subversion与操作系统配置的地区交互等等。
Subversion provides many optional behaviors that can be controlled by the user. Many of these options are of the kind that a user would wish to apply to all Subversion operations. So, rather than forcing users to remember command-line arguments for specifying these options, and to use them for every operation they perform, Subversion uses configuration files, segregated into a Subversion configuration area.
Subversion配置区是一个双层结构,保存了可选项的名称和值。通常,Subversion配置区是一个保存配置文件的特殊目录(第一层结构),目录中保存了一些标准INI格式的文本文件(文件中的“section”形成第二层结构)。这些文件可以简单用你喜欢的文本编辑器编辑(如Emacs或vi),而且保存了客户端可以读取的指示,用来指导用户的一些行为选项。
The first time that the svn
command-line client is executed, it creates a per-user
configuration area. On Unix-like systems, this area appears
as a directory named .subversion in the
user's home directory. On Win32 systems, Subversion creates a
folder named Subversion, typically inside
the Application Data area of the user's
profile directory (which, by the way, is usually a hidden
directory). However, on this platform the exact location
differs from system to system, and is dictated by the Windows
registry.
[46]
We will refer to the per-user configuration area using its Unix
name, .subversion.
In addition to the per-user configuration area, Subversion
also recognizes the existence of a system-wide configuration
area. This gives system administrators the ability to
establish defaults for all users on a given machine. Note
that the system-wide configuration area does not alone dictate
mandatory policy—the settings in the per-user
configuration area override those in the system-wide one, and
command-line arguments supplied to the svn
program have the final word on behavior. On Unix-like
platforms, the system-wide configuration area is
expected to be the /etc/subversion
directory; on Windows machines, it looks for a
Subversion directory inside the common
Application Data location (again, as
specified by the Windows Registry). Unlike the per-user
case, the svn program does not attempt
to create the system-wide configuration area.
The per-user configuration area currently contains three
files—two configuration files (config and
servers), and a README.txt
file which describes the INI format. At the time of their
creation, the files contain default values for each of the
supported Subversion options, mostly commented out and grouped
with textual descriptions about how the values for the key
affect Subversion's behavior. To change a certain behavior,
you need only to load the appropriate configuration file into
a text editor, and modify the desired option's value. If at
any time you wish to have the default configuration settings
restored, you can simply remove (or rename) your configuration
directory and then run some innocuous svn
command, such as svn --version. A new
configuration directory with the default contents will be
created.
The per-user configuration area also contains a cache of
authentication data. The auth directory
holds a set of subdirectories that contain pieces of cached
information used by Subversion's various supported
authentication methods. This directory is created in such a
way that only the user herself has permission to read its
contents.
除了基于INI文件的配置区,运行在Windows平台的Subversion客户端也可以使用Windows注册表来保存配置数据。注册表中保存的选项名称和值的含义与INI文件中相同,“file/section”在注册表中表现为注册表键树的层级,使得双层结构得以保留下来。
Subversion looks for system-wide configuration values
under the
HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion
key. For example, the global-ignores option,
which is in the miscellany section of the
config file, would be found at
HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Config\Miscellany\global-ignores.
Per-user configuration values should be stored under
HKEY_CURRENT_USER\Software\Tigris.org\Subversion.
Registry-based configuration options are parsed before their file-based counterparts, so are overridden by values found in the configuration files. In other words, Subversion looks for configuration information in the following locations on a Windows system; lower-numbered locations take precedence over higher-numbered locations:
命令行选项
用户INI配置文件
用户注册表值
系统INI配置文件
系统注册表值
Also, the Windows Registry doesn't really support the
notion of something being “commented out”.
However, Subversion will ignore any option key whose name
begins with a hash (#) character. This
allows you to effectively comment out a Subversion option
without deleting the entire key from the Registry, obviously
simplifying the process of restoring that option.
The svn command-line client never
attempts to write to the Windows Registry, and will not
attempt to create a default configuration area there. You can
create the keys you need using the REGEDIT
program. Alternatively, you can create a
.reg file, and then double-click on that
file from the Explorer shell, which will cause the data to be
merged into your registry.
例 7.1. 注册表条目(.reg)样本文件。
REGEDIT4 [HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Servers\groups] [HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Servers\global] "#http-proxy-host"="" "#http-proxy-port"="" "#http-proxy-username"="" "#http-proxy-password"="" "#http-proxy-exceptions"="" "#http-timeout"="0" "#http-compression"="yes" "#neon-debug-mask"="" "#ssl-authority-files"="" "#ssl-trust-default-ca"="" "#ssl-client-cert-file"="" "#ssl-client-cert-password"="" [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\auth] "#store-passwords"="yes" "#store-auth-creds"="yes" [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\helpers] "#editor-cmd"="notepad" "#diff-cmd"="" "#diff3-cmd"="" "#diff3-has-program-arg"="" [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\tunnels] [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany] "#global-ignores"="*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store" "#log-encoding"="" "#use-commit-times"="" "#no-unlock"="" "#enable-auto-props"="" [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\auto-props]
The previous example shows the contents of a
.reg file which contains some of the most
commonly used configuration options and their default values.
Note the presence of both system-wide (for network
proxy-related options) and per-user settings (editor programs
and password storage, among others). Also note that all the
options are effectively commented out. You need only to
remove the hash (#) character from the
beginning of the option names, and set the values as you
desire.
本节我们会详细讨论Subversion目前支持的运行配置选项。
The servers file contains
Subversion configuration options related to the network
layers. There are two special section names in this
file—groups and
global. The groups
section is essentially a cross-reference table. The keys in
this section are the names of other sections in the file;
their values are globs—textual
tokens which possibly contain wildcard
characters—that are compared against the hostnames of
the machine to which Subversion requests are sent.
[groups] beanie-babies = *.red-bean.com collabnet = svn.collab.net [beanie-babies] … [collabnet] …
When Subversion is used over a network, it attempts to
match the name of the server it is trying to reach with a
group name under the groups section. If
a match is made, Subversion then looks for a section in the
servers file whose name is the matched
group's name. From that section it reads the actual network
configuration settings.
The global section contains the
settings that are meant for all of the servers not matched
by one of the globs under the groups
section. The options available in this section are
exactly the same as those valid for the other server
sections in the file (except, of course, the special
groups section), and are as
follows:
http-proxy-exceptions
这里指定了一组逗号分割的列表,其内容是无须代理服务器可以直接访问的版本库主机名模式,模式语法与Unix的shell中的文件名相同,其中任何匹配的版本库主机不会通过代理访问。
http-proxy-host
代理服务器的详细主机名,是HTTP为基础的Subversion请求必须通过的,缺省值为空,意味着Subversion不会尝试通过代理服务器进行HTTP请求,而会尝试直接连接目标机器。
http-proxy-port
代理服务器的详细端口,缺省值为空。
http-proxy-username
代理服务器的用户名,缺省值为空。
http-proxy-password
代理服务器的密码,缺省为空。
http-timeout
This specifies the amount of time, in seconds, to
wait for a server response. If you experience
problems with a slow network connection causing
Subversion operations to time out, you should increase
the value of this option. The default value is
0, which instructs the underlying
HTTP library, Neon, to use its default timeout
setting.
http-compression
This specifies whether or not Subversion should
attempt to compress network requests made to DAV-ready
servers. The default value is yes
(though compression will only occur if that capability
is compiled into the network layer). Set this to
no to disable compression, such as
when debugging network transmissions.
http-library
Subversion provides a pair of repository access
modules which understand its WebDAV network protocol.
The original one which shipped with Subversion 1.0 is
libsvn_ra_neon (though back then it
was called libsvn_ra_dav). Newer
Subversion versions also provide
libsvn_ra_serf, which uses a
different underlying implementation and aims to
support some of the newer HTTP concepts.
At this point, libsvn_ra_serf
is still considered experimental, though it appears to
work in the common cases quite well. To encourage
experimentation, Subversion provides the
http-library runtime configuration
option to allow users to specify (generally, or in a
per-server-group fashion) which WebDAV access module
they'd prefer to use—neon or
serf.
http-auth-types
This option is a semicolon-delimited list of
authentication types supported by the Neon-based
WebDAV repository access modules. Valid members of
this list are basic,
digest, and
negotiate.
neon-debug-mask
This is an integer mask that the underlying HTTP
library, Neon, uses for choosing what type of
debugging output to yield. The default value is
0, which will silence all debugging
output. For more information about how Subversion
makes use of Neon, see 第 8 章 嵌入 Subversion.
ssl-authority-files
这是一个分号分割的路径和文件列表,这些文件包含了Subversion客户端在用HTTPS访问时可以接受的认证授权(或者CA)证书。
ssl-trust-default-ca
Set this variable to yes if you
want Subversion to automatically trust the set of
default CAs that ship with OpenSSL.
ssl-client-cert-file
如果一个主机(或是一些主机)需要一个SSL客户端证书,你会收到一个提示说需要证书的路径。通过设置这个路径你的Subversion客户端可以自动找到你的证书而不会打扰你。没有标准的存放位置;Subversion会从任何你指定的路径得到这个文件。
ssl-client-cert-password
If your SSL client certificate file is encrypted
by a passphrase, Subversion will prompt you for the
passphrase whenever the certificate is used. If you
find this annoying (and don't mind storing the
password in the servers file),
then you can set this variable to the certificate's
passphrase. You won't be prompted anymore.
The config file contains the rest
of the currently available Subversion run-time options,
those not related to networking. There are only a few
options in use as of this writing, but they are again grouped into
sections in expectation of future additions.
The auth section contains settings
related to Subversion's authentication and authorization
against the repository. It contains:
store-passwords
This instructs Subversion to cache, or not to
cache, passwords that are supplied by the user in
response to server authentication challenges. The
default value is yes. Set this to
no to disable this on-disk password
caching. You can override this option for a single
instance of the svn command using
the --no-auth-cache command-line
parameter (for those subcommands that support it).
For more information, see “客户端凭证缓存”一节.
store-auth-creds
This setting is the same as
store-passwords, except that it
enables or disables disk-caching of
all authentication information:
usernames, passwords, server certificates, and any
other types of cacheable credentials.
The helpers section controls which
external applications Subversion uses to accomplish its
tasks. Valid options in this section are:
editor-cmd
This specifies the program Subversion will use to query the user for certain types of textual metadata or when interactively resolving conflicts. See “Using External Editors”一节 for more details on using external text editors with Subversion.
diff-cmd
This specifies the absolute path of a differencing program, used when Subversion generates “diff” output (such as when using the svn diff command). By default Subversion uses an internal differencing library—setting this option will cause it to perform this task using an external program. See “Using External Differencing and Merge Tools”一节 for more details on using such programs.
diff3-cmd
这指定了一个三向的比较程序,Subversion使用这个程序来合并用户和从版本库接受的修改,缺省Subversion会使用一个内置的比较库—设置这个参数会导致它会使用外部程序执行这个任务,此类程序的更多信息见“Using External Differencing and Merge Tools”一节。
diff3-has-program-arg
This flag should be set to true
if the program specified by the
diff3-cmd option accepts a
--diff-program command-line
parameter.
merge-tool-cmd
This specifies the program that Subversion will use to perform three-way merge operations on your versioned files. See “Using External Differencing and Merge Tools”一节 for more details on using such programs.
The tunnels section allows you to
define new tunnel schemes for use with
svnserve and svn://
client connections. For more details, see “SSH 隧道”一节.
The miscellany section is where
everything that doesn't belong elsewhere winds up.
[47]
In this section, you can find:
global-ignores
When running the svn status
command, Subversion lists unversioned files and
directories along with the versioned ones, annotating
them with a ? character (see “查看你的修改概况”一节). Sometimes, it can
be annoying to see uninteresting, unversioned
items—for example, object files that result from
a program's compilation—in this display. The
global-ignores option is a list of
whitespace-delimited globs which describe the names of
files and directories that Subversion should not
display unless they are versioned. The default value
is *.o *.lo *.la #*# .*.rej *.rej .*~ *~
.#* .DS_Store.
As well as svn status, the
svn add and svn import
commands also ignore files that match the list
when they are scanning a directory. You can override this
behaviour for a single instance of any of these commands
by explicitly specifying the file name, or by using
the --no-ignore command-line flag.
For information on more fine-grained control of ignored items, see “忽略未版本控制的条目”一节.
enable-auto-props
This instructs Subversion to automatically set
properties on newly added or imported files. The
default value is no, so set this to
yes to enable Auto-props.
The auto-props section of this file
specifies which properties are to be set on which files.
log-encoding
这个变量设置提交日志缺省的字符集,是--encoding选项(见“svn Options”一节)的永久形式,Subversion版本库保存了一些UTF-8的日志信息,并且假定你的日志信息是用操作系统的本地编码,如果你提交的信息使用别的编码方式,你一定要指定不同的编码。
use-commit-times
Normally your working copy files have timestamps that reflect the last time they were touched by any process, whether that be your own editor or by some svn subcommand. This is generally convenient for people developing software, because build systems often look at timestamps as a way of deciding which files need to be recompiled.
In other situations, however, it's sometimes nice
for the working copy files to have timestamps that
reflect the last time they were changed in the
repository. The svn export command
always places these “last-commit
timestamps” on trees that it produces. By
setting this config variable to
yes, the svn
checkout, svn update,
svn switch, and svn
revert commands will also set last-commit
timestamps on files that they touch.
mime-types-file
This option, new to Subversion 1.5, specifies the
path of a MIME types mapping file, such as the
mime.types file provided by the
Apache HTTP Server. Subversion uses this file to
assign MIME types to newly added or imported files.
See “自动设置属性”一节 and
“文件内容类型”一节 for more about Subversion's detection and use of
file content types.
preserved-conflict-file-exts
The value of this option is a space-delimited list of file extensions which Subversion should preserve when generating conflict file names. By default, the list is empty. This option is new to Subversion 1.5.
When Subversion detects conflicting file content
changes, it defers resolution of that conflict to the
user. To assist in the resolution, Subversion keeps
pristine copies of the various competing versions of
the file in the working copy. By default, those
conflict files have names constructed by appending to
the original file name a custom extension such as
.mine or
.
(where REVREV is a revision
number). A mild annoyance with this naming scheme is
that on operating systems where a file's extension
determines the default application used to open and
edit that file, appending a custom extension prevents
the file from being easily opened by its native
application. For example, if the file
ReleaseNotes.pdf was conflicted,
the conflict files might be named
ReleaseNotes.pdf.mine or
ReleaseNotes.pdf.r4231. While
your system might be configured to use Adobe's Acrobat
Reader to open files whose extensions are
.pdf, there probably isn't an
application configured on your system to open all
files whose extensions are
.r4321.
You can fix this annoyance by using this
configuration option, though. For files with one of
the specified extensions, Subversion will append to
the conflict file names the custom extension just as
before, but then also re-append the file's original
extension. Using the previous example, and assuming
that pdf is one of the extensions
configured in this list thereof, the conflict files
generated for ReleaseNotes.pdf
would instead be named
ReleaseNotes.pdf.mine.pdf and
ReleaseNotes.pdf.r4231.pdf.
Because each of these files end in
.pdf, the correct default
application will be used to view them.
interactive-conflicts
This is a boolean option which specifies whether
or not Subversion should try to resolve conflicts
interactively. If its value is yes
(which is the default value), Subversion will prompt
the user for how to handle conflicts in the manner
demonstrated in “解决冲突(合并别人的修改)”一节. Otherwise, it will simply flag the conflict and
continue its operation, postponing resolution to a later
time.
no-unlock
This boolean option corresponds to the
--no-unlock option to svn
commit, which tells Subversion not to release
locks on files you've just committed. If this runtime
option is set to yes, Subversion will
never release locks automatically, leaving you to run
svn unlock explicitly. It defaults to
no.
The auto-props section controls
the Subversion client's ability to automatically set
properties on files when they are added or imported.
It contains any number of key-value pairs in the
format PATTERN = PROPNAME=PROPVALUE
where PATTERN is a file pattern
that matches a set of filenames and the rest of the
line is the property and its value. Multiple matches
on a file will result in multiple propsets for that
file; however, there is no guarantee that auto-props
will be applied in the order in which they are listed
in the config file, so you can't have one rule
“override” another. You can find several
examples of auto-props usage in the
config file. Lastly, don't
forget to set enable-auto-props to
yes in the miscellany
section if you want to enable auto-props.