图 5.32. 锁定对话框

出现一个对话框,允许你输入注释,这样别人可以知道你为什么锁定这个文件。注释是可选的,并且只用于基于Svnserve的库。当(且仅当)你需要窃取别人的锁的时候,勾选偷取此锁定复选框,然后点击。
如果你选择一个文件夹,使用 → 锁定对话框将显示所有子文件夹中的所有文件 。如果你真的要锁定整个目录,就这么做,但如果你这么做,可能会很不受你的合作者的欢迎。小心使用...
5.18.3. 释放锁定
为了确保你不会忘记释放锁,你不需要做别的事,在提交对话框中,总是会显示锁定的文件,并总是默认被选中。如果你继续提交,选中的文件中的锁就被移除了,就算你从没有修改过。如果你不希望释放某文件的锁,你可以取消选中它(如果你没有修改过)。如果你希望保持一个修改过的文件的锁,你需要在提交之前选中保持锁定复选框。
要手动释放锁定,选中工作复本中要释放的文件,选择命令 → 。不需要输入什么 TortoiseSVN会联系版本库并释放锁。你可以对一个文件夹来使用这个命令释放其中的所有锁定项。
5.18.4. 检查锁定状态
图 5.33. 检查修改对话框

要查看你和他人所拥有的锁,你可以使用 → 命令。本地的锁定令牌会立即显示出来,要查看别人拥用的锁定(或是检查你的锁是否被破坏或窃取)你需要点击。
从此处的右键菜单中,你可以获取锁或是释放锁,也可以破坏或是窃取别人的锁。
|
|
避免破坏和窃取锁定 |
|---|---|
|
如果你在破坏或是窃取某人的锁的时候没有告诉他,你可能会丢掉工作。如果你正在写一个不可合并的文件类型,并且你窃取了某人的锁,一旦你释放了锁,他们就可以随意检入他们的修改以覆盖你的。Subversion并不会丢弃数据,但你却失去了锁带来的对团队工作的保护。 |
5.18.5. 让非锁定的文件变成只读
正如上面提到的,最有效的使用锁的方式是对一个文件设置svn:needs-lock属性。参考第 5.15 节 “项目设置”如何设置属性。带有此属性的文件将总被按只读的方式检出和更新(除非你的工作复本拥有锁定)。

作为提醒的方式之一,TortoiseSVN使用一个特殊的图标表示。
如果你管理的策略要求每个文件都必须被锁定,那么你会发现使用Subversion的auto-props功能,在你每次加入新文件的时候,自动设置属性是很方便的。请阅读第 5.27 节 “TortoiseSVN的设置”。
5.18.6. 锁定钩子脚本
当你使用Suversion1.2或更新的版本建立新的版本库的时候,建立了四个钩子模板在版本库中的hooks目录下。这些钩子模板在取得/释放一个锁定之前和之后会被分别调用。
安装一个 post-lock和post-unlock钩子,在钩子中为锁定和解锁事件发送邮件,是个好主意 。有了这种脚本,你的所有用户都会在一个文件被锁定/解锁的时候被通知。在你的版本库文件夹下,你可以找到一个示例钩子脚本hooks/post-lock.tmpl。
你可能也使用hooks来拒绝破坏或是窃取锁定,或是限制只有管理员可以,或是当一个用户破坏或窃取锁定时通知原来的锁定拥有者。
更多内容请参考 第 4.3 节 “钩子脚本”
5.19. 创建并应用补丁
对开源工程(比如本工程)来说,每个人对仓库都有读访问权,并且任何人都可以对该工程做出修改。那么如何控制这些修改呢?如果任何人都可以提交自己的修改,那么这个工程可能永远都会处于不稳定状态,而且很有可能永远的瘫痪下去。在这种情况下,修改需要以补丁文件的形式先递交到有写访问权限的开发组。开发组可以先对该补丁文件进行审查,然后决定将其提交到仓库里或者是退还给作者。
补丁文件只是简单地用统一的差异描述文件显示出你的工作拷贝和基础版本的不同点。
5.19.1. 创建一个补丁文件
首先你需要做出修改并测试这个修改的内容。然后在父目录上使用 → 代替 → 。
图 5.34. 创建补丁的对话框

现在你可以选择要包含在补丁中的文件了,就像你要做一个完整的提交一样。这样会产生一个单一的文件,该文件包括一份自从最后一次从仓库更新后你对所选择文件做的全部修改的摘要。
在这一对话框中,纵列和在 检查修改对话框中的纵列同样是可以定制的。更多细节请阅读第 5.7.3 节 “本地与远程状态”
你可以创建包含对不同文件集合修改的相互独立的补丁。当然如果你创建了一个补丁文件,对于同一份文件的更多修改会创建另外一个补丁文件,第二份补丁文件包含了全部的修改。
你可以用一个自己选择的文件名来保存这个补丁文件,补丁文件可以有任意的扩展名,但是按人一般习惯,人们都是用.patch或者.diff作扩展名,你现在已经做好提交你的补丁文件的准备了。
5.19.2. 应用一个补丁文件
当你对你的工作拷贝打补丁的时候,你应当在与创建补丁文件时相同的目录层次上。如果你不能确定在那个目录层次上,就看一下补丁文件的第一行。例如,如果补丁第一个要处理的文件是doc/source/english/chapter1.xml 并且补丁文件的第一行是Index: english/chapter1.xml说明你必须要对english目录应用这个补丁文件。尽管如此,倘若你在正确的工作拷贝上工作,如果你选择了一个错误的目录层次,TSVN会察觉到这个错误,并给出正确的建议。
为了给你的工作拷贝打补丁,你至少需要对代码库的读权限。因为合并程序必须要参考修订版本中其他开发人员做的修改。
从那个目录的上下文菜单,点击 → 系统会弹出一个打开文件的对话框,让你选择要应用的补丁文件。默认情况下只显示.patch或者.diff文件,但是你可以选择"所有文件"。
如果补丁文件以.patch 或者 .diff 为扩展名的话,你可以选择直接右键点击该补丁文件,选择

![[小心]](/uploads/allimg/080318/10443822.png)