【问题标题】:Why does svn diff sometimes copy working files to a temp file?为什么 svn diff 有时会将工作文件复制到临时文件?
【发布时间】:2008-12-28 13:57:07
【问题描述】:

我使用带有 Subversion 的外部 diff 工具(超越比较规则!),其中一个很棒的功能是能够使用 diff 程序对文件进行一些小的编辑,因为我正在审查我所做的更改制作。

但是svn diff 在我的不同项目上的工作方式不同。总之,左边的文件是一个临时文件,包含存储在 Subversion(头)中的最新版本。但在某些情况下,右侧文件是实际的工作文件,而在其他情况下,它是工作文件的临时文件副本。在第一种情况下,我可以在 diff 程序中进行更改,它们会影响工作副本。在第二种情况下,我正在编辑一个临时文件,因此更改会丢失。

为什么 Subversion 有时会根据工作文件进行比较,但有时会根据工作文件的临时副本进行比较?如何让它始终使用工作文件?

【问题讨论】:

    标签: svn diff


    【解决方案1】:

    你对这些文件设置了 svn:keywords 吗?如果是,那么 Subversion 将首先创建一个临时文件,其中包含所有这些扩展关键字“未扩展”。这是为了避免所有关键字行显示为不同,即使它们没有更改。

    例如,如果您将工作副本中的文件与 BASE 进行比较,则 BASE 文件没有扩展关键字(并且还使用 LF 换行符存储),而工作副本中的文件具有扩展的所有关键字(并且可能是存储与 CRLF 换行符)。 如果您没有在本地修改该文件,“svn diff”会将所有行显示为不同(如果行尾不匹配),或者至少所有带有关键字的行都将显示为不同 - 这不是您想要的期待。

    【讨论】:

    • 这是 svn:keywords 属性!谢谢。
    • 终于弄明白了! svn:eol-style 属性也有同样的问题。
    • 有谁知道是否有办法禁用此功能?我宁愿让两三行关键字看起来不同,并且能够像 Ned 最初想要的那样在不同时进行编辑。
    【解决方案2】:

    也许有一些访问问题。尝试将文件设置为只读,如果 svn 现在打开一个临时文件,这是您问题的一个可能答案。在这种情况下,您使用的某些编辑器/IDE 可能会对文件进行写保护。

    【讨论】:

    • 好主意,但这似乎与写权限或保持文件打开的编辑器无关。
    【解决方案3】:

    This email talked about alternative solution. 使用 $5 而不是 $7 来避免为 $svn diff 创建临时文件。 通过 $5 后,使用 --diff-cmd 进行 $svn diff 时,它使用本地文件而不是 tmp 文件。

    我试过了。它确实将本地文件与 svn repo 中的远程文件进行比较。在更改为 5 美元(从 7 美元)之前。 Meld 总是在比较两个临时文件。

    示例

    发件人

    $svn diff --diff-cmd=svn-diff-meld  -r 12345 ./dirToCompare
    
    $ cat /usr/local/bin/svn-diff-meld
    #!/bin/sh
    # SVN Diff Wrapper for Meld
    
    left="$6"
    right="$7"
    meld "$left" "$right"
    

    收件人

    $svn diff --diff-cmd=svn-diff-meld  -r 12345 ./dirToCompare
    
    $ cat /usr/local/bin/svn-diff-meld
    #!/bin/sh
    # SVN Diff Wrapper for Meld
    
    left="$6"
    right="$5"
    meld "$left" "$right"
    

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 2017-05-27
      • 2021-12-01
      相关资源
      最近更新 更多