zoukankan      html  css  js  c++  java
  • SVN diff 笔记

    SVN diff命令在实际中经常使用,在此记录使用点滴。

    #对比工作文件与缓存在.svn的“原始”拷贝:
    svn diff
    #显示工作文件和服务器版本2的不同:
    svn diff -r 2
    #显示分支br1的版本2和版本3的不同:
    svn diff /home/wwl/svn_test/branches/br1/ -r 2:3
     
    #显示10.java文件在2版本和6版本的区别
    svn diff -r 2:6 10.java
    #对比分支br1和trunk区别(2个url)
    svn diff file:///home/wwl/svn_repos/branches/br1 file:///home/wwl/svn_repos/trunk 
     
    #直接使用svn diff 显示的不是很清晰,如果本机装了其他的图形diff工具(例如meld)命令行调用:
    svn diff --diff-cmd meld ...
    #svn在1.7版本支持了git方式显示diff
    svn diff --git ...
     
    diff输出详解:
     如图所示:
    Index:wwl.test 表示对比的是wwl.test文件
    =========我是分割线======================

    ---     wwl.test (revision 15)    ---表示对比old版本     
    +++  wwl.test (revision 16)        +++表示对比new版本

    @@ -7,7 +7,7 @@        -:表示old版本;+:表示new版本;7,7:表示从第七行开始的后七行(即7-13行)old和new的对比;如果行数比较多系统会自动分行;只会显示增删改行和相近行数,其他不会显示。

    -:表示old版本有new没有

    +:表示new版本有old没有

    没有标识的表示old和new版本此行一致

    下图为删除5,6两行后的diff输出:


    当使用一个外部的diff命令时,Subversion会生成一个非常复杂的命令行。第一个参数就是具体的--diff-cmd,然后就是具体的--extensions (尽管使用空白的 --符号时会忽略扩展),或者如果没有指定--extensions或者--extensions为空的话,就加上‘-u’参数。第三和第四个参数,Subversion会传递一个“-L”还有第一个文件的标签(例如,“"project_issues.html (revision 11209)”)。第五个和第六个就是另一个“-L”和第二个文件的标签。第七和第八个参数分别是第一个和第二个文件的名称(例如,“.svn/text-base/project_issues.html.svn-base”和“.svn/tmp/project_issues.html.tmp”)。

    如果你指定的diff命令不支持这些参数的话,你可能需要创建一个简单的封装脚本来忽略这些参数,然后将最后的你需要的文件的路径参数传递给diff命令。

    警告:Subversion并不希望外部的diff工具会改变它接收到的文件,否则可能会破坏当前工作拷贝。

     http://subversion.apache.org/faq.zh.html#diff-cmd

    因此比较2个文件时,只要知道这2个文件的路径及文件名就可以了,也就是上述diff内部命令中的第7个和第8个2个参数。


    #如果不想命令行每次都加上--diff-cmd参数,可以修改subversion目录下面的conf文件定义默认的diff-cmd。
    #推荐使用meld工具
    meld——————
    #meld默认在Ubuntu官方源中
    #安装:
    sudo apt-get install meld
    #在目录 ~/.subversion中新建脚本文件Mydiff_meld.sh,windows下面写.bat文件。
    touch Mydiff_meld.sh
    #其中脚本名称和路径可自行选择
    vi Mydiff_meld.sh
    复制代码
    1 #!/bin/sh
    2 #Configure your diff program here
    3 #DIFF="usr/bin/meld"
    4 DIFF="meld"
    5 OLD=${6}
    6 NEW=${7}
    7 $DIFF $OLD $NEW
    复制代码
    #增加Mydiff_meld.sh脚本的执行权限:
    chmod a+x Mydiff_meld.sh
    #在~/.subversion修改config文件,如果是windows7系统C:Users${username}AppDataRoamingSubversion
    #在# diff-cmd = diff_program (diff, gdiff, etc.) 下面增加:
    diff-cmd=/home/wwl/.subversion/Mydiff_meld.sh
    #如果脚本目录和名称不同自行使用绝对路径
     
    #调试命令:
    svn diff /home/wwl/svn_test/branches/br1/ -r 2:4
     #如果是修改的文件
     
    #如果是新增加的文件:
    #如果是删除的文件:
    #文件比较将会是一个一个进行的,关掉第一个文件比较的 窗口,才会显示第二个文件的比较窗口。
     
     
    公司目前使用kdiff3作为diff工具
    #安装:
    sudo apt-get install kdiff3
    #在目录 ~/.subversion中新建脚本文件Mydiff_kdiff3.sh,windows下面写.bat文件。
    touch Mydiff_kdiff3.sh
    #其中脚本名称和路径可自行选择
    vi Mydiff_kdiff3.sh
    复制代码
    1 #!/bin/sh
    2 #Configure your diff program here
    3 #DIFF="usr/bin/kdiff3"
    4 DIFF="kdiff3"
    5 OLD=${6}
    6 NEW=${7}
    7 YOUR=${8}
    8 $DIFF $OLD $NEW $YOUR
    复制代码
    #增加Mydiff_kdiff3.sh脚本的执行权限:
    chmod a+x Mydiff_kdiff3.sh
    #在~/.subversion修改config文件,如果是windows7系统C:Users${username}AppDataRoamingSubversion
    #在# diff-cmd = diff_program (diff, gdiff, etc.) 下面增加:
    diff-cmd=/home/wwl/.subversion/Mydiff_kdiff3.sh
    #在# diff3-cmd = diff3_program (diff3, gdiff3, etc.)下面增加:
    diff3-cmd=/home/wwl/.subversion/Mydiff_kdiff3.sh
    #如果脚本目录和名称不同自行使用绝对路径
     
    #windows下面的脚本如下Mydiff_kdiff3.bat:
    复制代码
    @ECHO OFF
    
    REM Configure your favorite kdiff3/merge program here.
    SET DIFF3="D:SoftwareKDiff3kdiff3.exe"
    

    REM 有效使用的只有OLD和NEW,YOURS只是凑数的 SET OLD=%6 SET NEW=%7 SET YOURS=%8 REM %DIFF3% %OLD% %NEW% %YOURS% %DIFF3% %OLD% %NEW% %YOURS%
    复制代码
     

    附录:
    svn help diff:
    diff (di): 显示两个版本或路径的差异。
    用法: 1. diff [-c M | -r N[:M]] [TARGET[@REV]...]
          2. diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]]
                   [PATH...]
           3. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]
     
      1、显示版本 REV 中 TARGET 在两个不同的版本之间的差异。TARGET 要么全是
         工作副本路径,要么全是 URL。如果 TARGET 是工作副本路径,N 默认为
         BASE,M 默认为工作副本;如果 TARGET 是 URL,N 必须指定, M 默认为 HEAD。
        “-c M” 等价于 “-r M-1:M”,“-c -M” 等价于 “-r M:M-1”。
     
      2、显示新旧版本中对应目标的差异。PATH 是相对于新旧目标的相对路径,
         它限制只输出这些路径上的差异。新旧目标可以是工作副本路径或地址 URL[@REV]。
         新目标默认与旧目标相同,OLDREV 默认为 N,NEWREV 默认为 M。
     
      3、“svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV]” 的简写。
     
         使用不加参数的 “svn diff” 显示工作副本中的本地修改。
     
    有效选项:
      -r [--revision] ARG : ARG (一些命令也接受ARG1:ARG2范围)
                                 版本参数可以是如下之一:
                                    NUMBER 版本号
                                    '{' DATE '}' 在指定时间以后的版本
                                    'HEAD' 版本库中的最新版本
                                    'BASE' 工作副本的基线版本
                                    'COMMITTED' 最后提交或基线之前
                                    'PREV' COMMITTED的前一版本
      -c [--change] ARG : 在ARG版本(如同 -r ARG-1:ARG)作的修改
                                 如果ARG为负数则等价于 -r ARG:ARG-1
      --old ARG : 使用 ARG 作为旧目标
      --new ARG : 使用 ARG 作为新目标
      -N [--non-recursive] : 过时;尝试 --depth=files 或 --depth=immediates
      --depth ARG : 限制操作深度是 ARG ('empty', 'files',
                                 'immediates', 或 'infinity')
      --diff-cmd ARG : 使用 ARG 作为比较命令
      --internal-diff : 覆盖配置文件中指定的 diff-cmd
      -x [--extensions] ARG : 缺省: “-u”。当 Subversion 调用外部比较程序时,ARG 直接传给它。但是当
                                 Subversion 使用缺省的内置比较实现,或者正
                                 显示追溯时, ARG 可以是:
                                    -u (--unified):
                                       输出三行统一上下文。
                                    -b (--ignore-space-change):
                                       忽略空白数量的修改。
                                    -w (--ignore-all-space):
                                       忽略所有的空白。
                                    --ignore-eol-style:
                                       忽略行尾样式的改变。 -p (--show-c-function):
                                       在比较输出中显示 C 函数名称。
      --no-diff-deleted : 不要输出删除文件造成的差异
      --show-copies-as-adds : 请不要将复制或移动的文件与其源文件比较
      --notice-ancestry : 比较差异时提示原始信息
      --summarize : 显示结果的概要
      --changelist [--cl] ARG : 只能对修改列表 ARG 的成员操作
      --force : 强制操作运行
      --xml : 输出为 XML
      --git : 使用 git 的扩展差异格式
     
    全局选项:
      --username ARG : 指定用户名称 ARG
      --password ARG : 指定密码 ARG
      --no-auth-cache : 不要缓存用户认证令牌
      --non-interactive : 不要交互提示
      --trust-server-cert : 不提示的接受未知的证书颁发机构发行的 SSL 服务器证书(只用于选项 “--non-interactive”)
      --config-dir ARG : 从目录 ARG 读取用户配置文件
      --config-option ARG : 以下属格式设置用户配置选项:
                                     FILE:SECTION:OPTION=[VALUE]
                                 例如:
                                     servers:global:http-library=serf
  • 相关阅读:
    [UE4]使用C++重写蓝图,SpawnObject根据类型动态创建UObject
    [UE4]在C++中使用中文变量和中文注释
    [UE4]The global shader cache file missing 运行错误解决办法
    [UE4]自定义结构体、类、数据表
    [UE4]使用UFUNCTION注意事项
    [UE4]一个好用的虚幻4插件,根据资源名称动态加载资源,GetCurrentLeveName(获得当前地图名称)
    [UE4]小地图UI放在哪里创建合适?
    [UE4]动态改变相机OrthWidh、关掉阴影
    [UE4]迁移小地图到其他工程
    [UE4]正交
  • 原文地址:https://www.cnblogs.com/hushaojun/p/4283272.html
Copyright © 2011-2022 走看看