SVN8.COM - SVN中文技术网

投递文章 投稿指南 SVN中文技术网公告:技术交流诚聘优秀版主最新公告
搜索: 您的位置主页>SVN使用>TortoiseSVN日常使用指南

TortoiseSVN日常使用指南

SVN技术网 www.svn8.com 2008-03-18 10:37:20   来源:   作者:  评论:0 点击:

如果其他用户可能提交,那么要小心使用最新版本。如果有人在你最近更新之后提交了,它指代的版本可能就不是你想的那样了。

  • 点击合并按钮完成合并。

  • 现在合并结束。察看合并,看看它是否如预期那样工作,是个好想法。合并通常很复杂,如果分支与最新版本差别很大,合并经常会出现冲突。

    当你已经测试了修改,准备提交时,日志信息应当总是包含这次合并的版本信息。如果你以后需要执行合并,就需要知道已经合并了什么,因为你不想多次合并同一修改。不幸的是,合并信息不会存储在Subversion版本库中。阅读Subversion Book中的手工跟踪合并以获得更多信息。

    分支管理很重要。如果你要保持这个分支与最新版本同步,你应当经常合并,这样分支和最新版本的差别就不会太大。当然,你仍旧应该遵循上面的说明,避免重复合并修改。

    [重要]

    重要

    Subversion不能进行文件与文件夹的合并,反之亦然 - 只能文件夹对文件夹,文件对文件。如果选择了文件,打开合并对话框,那么你必须在对话框中给出文件的路径。如果你选择了文件夹,打开合并对话框,那么你必须给出文件夹的对话框。

    5.17.2. 合并两个不同的目录树

    这个用例覆盖了这种情况,当你象Subversion手册里讨论的那样,创建了一个新特性分支。所有最新版本的修改都要每周一次合并到新特性分支,等新特性完成后,你向将它合并到最新版本。因为你已经保持了新特性分支和最新版本同步,所以除了你在分支做的修改,其它部分在分支和最新版本应该是相同的。于是在这种情况下,你应当用比较分支和最新版本的方法来合并。

    为了将新特性从分支合并到最新版本,你需要进入最新版本的工作副本。在右键菜单选择 TortoiseSVN合并...

    1. 开始:域输入trunk文件夹的全路径。这听起来好象是错误的,但是切记 trunk 是你想增加分支修改的开始点。也可以点击 ...浏览版本库。

    2. 因为你在比较两个不同的树,确认没有选择使用 "开始:" 路径检查框。

    3. 结束:域输入关注的分支中文件夹的全路径。

    4. 开始版本结束版本 域,输入两个树被同步的最后一个版本号。如果你确信没有其他人提交,两个都可是输入 HEAD。如果在同步时可能有人提交的话,使用清楚的版本号以便面丢失最新提交。

      你也可以使用显示日志选择版本。注意这种情况下,你不能选择版本范围,所以此时你选择的版本会实际出现在版本域。

    5. 点击合并按钮完成合并。

    这种情况下,因为新特性已经集成到最新版本,你不再需要这个新特性分支。新特性分支变成多余的,如果需要可以从版本库删除它。

    5.17.3. 预览合并结果

    如果你不信任合并操作,可以在允许它修改你的工作副本之前预览效果。有三个额外的按钮可以帮着你预览。

    统一差异创建差异文件(切记合并基于差异),显示你的工作目录哪些行将要被修改。因为这是统一差异(补丁)文件,所以离开上下文,它经常很难读。但是对于小的修改,由于它将所有修改在一起显示,因此很有用。

    差异显示修改文件列表。双击任一文件启动差异察看器。不像统一差异,它显示具有前后关系的详细修改信息。象统一差异那样,你看到的是开始版本:结束版本:之间的差异。它不显示应用此改变之后,你的工作版本如何改变。

    演习运行执行合并操作,但是根本 修改工作副本。它显示在真实的合并中要修改的文件列表,还告诉你哪里会出现冲突。

    5.17.4. 忽略祖先

    大部分时候,你要合并文件的历史,于是相对于公共祖先合并。有时你需要合并或许是有关系的文件,但是不在你的版本库中。例如,你已经将一个第三方库的版本1和2导入到两个单独目录。尽管它们逻辑相关,因为Subversion只看到你导入的文件,所以它不知道这些关系。如果你试图合并这两个树的修改,将会看但完全的删除和增加。让Subversion只使用路径差异,不关心历史差异,选中忽略祖先检查框。你可以在 Subversion 手册的关心或忽略祖先中阅读此主题的更多信息。

  • 5.18. 锁

    使用之前在第 2.2.3 节 “拷贝-修改-合并 方案”中描述的“复制-修改-合并” 的方法,Subversion通常不需要锁就可以很好的工作。但是,在某些情况下你可能需要制定某种锁定策略。

    • 例如,你使用图形文件等“不能合并”的文件。如果两个人修改同一个这样的文件,合并是不可能的,所以你丢失其中一个的修改。

    • 你的公司过去经常使用VCS锁定,这是个管理决定,“锁定是最好的”。

    首先,你需要确保你的Subversion服务器更新到至少1.2版本。早期的版本不支持锁定。如果你使用file:///进行访问,那么当然只要更新你的客户端就可以了。

    5.18.1. 锁定在Subverion中是如何工作的

    默认情况下,所有的东西都没有锁定,只要有提交权限的人都可以在任何时候提交任何的文件。其他人会定时更新他们的工作复本,在库中的改变的东西都会与本地合并。

    如果你对一个文件 取得锁定,那么只有你可以提交这个文件。其他用户的提交都会被拒绝,直到你释放了这个锁。一个被锁定的文件不能在库中进行任何形式的合并。所以它不能除锁的拥用者之外的人删除或更名。

    但是,其他用户不必知道你已经增加了锁定,除非他们定期地检查锁定的状态。这其实没什么意义,因为他们发现提交失败的时候就可以知道锁定了。为了更容易管理锁,而设置了一个新的Subversion属性 svn:needs-lock。当一个文件的这个属性被设置(成任意值)的时候,每当该文件检出或更新时,本地的复本都被设成只读,除非该工作复本就是拥有锁的那个用户的。这么做是为了能警告你,你不应该修改这个文件,除非你申请到了锁定。受控只读的文件在TortoiseSVN中用一个特殊的图标来表示你需要在编辑前取得锁定。

    锁除了按所有者记录外,还在工作复本中记录。如果你有多个工作复本(在家,在单位),那么在这些工作复本中,只允许对其中一份拥有锁。

    如果你的合作者之一请求一个锁,但却外出旅游去了,你怎么办?Subversion提供了一种强制锁。释放别人拥有的锁被称为破坏锁定,强制获得别人拥有的锁称为窃取锁定。当然,如果你想要与你的合作者保持良好的关系,轻易不要这么做。

    锁在库中进行记录,一个锁定令牌建立在你的本地工作复本中。如果有矛盾,比如某人破坏了锁下,那么本地的锁定令牌将不可用。库中的记录将是最权威的参考。

    5.18.2. 取得锁定

    选择工作复本中你想要获取锁定的文件,然后选择命令TortoiseSVN

  • 技术交流 录入:SVN中文技术网[www.svn8.com]
    Tags:  
    责任编辑:
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册) 密码: 匿名:
    评论总数:0 [ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - RSS订阅 - 网站地图 - 返回顶部