如何查找在Subversion中复制文件的路径

时间:2019-01-30 22:28:04

标签: svn diff

在Subversion中,如果我使用svn move foo.py bar.py移动文件,那么svn status会帮助我显示文件从何处移出

$ svn move foo.py bar.py
$ svn status
A  +    bar.py
    > moved from foo.py

如果我进行复制,则输出不会显示新文件的复制来源:

$ svn copy foo.py bar.py
$ svn status
A  +    bar.py

有什么方法可以找到从哪里复制bar.py。如果我修改bar.pysvn diff会显示相对于原始foo.py的更改,但是不幸的是,标头错误地将原始文件路径显示为bar.py,而某些版本没有已存在于仓库中。

Index: bar.py
===================================================================
--- bar.py   (revision 14283)
+++ bar.py   (working copy)
@@ -1,15 +1,14 @@

....

我需要产生差异以发送到我的代码审查工具,但由于bar.py在差异所要求的版本库中不存在onPlayerError,所以它感到不高兴。

2 个答案:

答案 0 :(得分:0)

svn log命令具有一个verbose选项。这还将打印从中复制文件的路径。 http://svnbook.red-bean.com/en/1.8/svn.ref.svn.c.log.html

答案 1 :(得分:0)

如果我正确理解您的代码查看工具,则仅吸收差异。您需要工具了解两个操作,即复制和编辑。简单的svn diff仅报告编辑内容,而不报告副本。

以下是解决问题的三种可能方法。我无法测试您的工具,因此无法判断是否可以使用,但是值得一试:

  1. 使用:svn diff --show-copies-as-adds。这会将文件的先前版本显示为不存在。比较(file4是svn复制和编辑的文件):

    [843] >>> svn diff
    Index: file4
    ===================================================================
    --- file4   (revision 5)
    +++ file4   (working copy)
    @@ -1 +1,2 @@
     some text
    +more more
    

    使用

    [844] >>> svn diff --show-copies-as-adds
    Index: file4
    ===================================================================
    --- file4   (nonexistent)
    +++ file4   (working copy)
    @@ -0,0 +1,2 @@
    +some text
    +more more
    
  2. 提交,然后svn diff -r PREV(之后您始终可以回滚提交)。您将得到相同的结果:

    [845] >>> svn ci -m "copied and edited"
    Adding         file4
    Transmitting file data .done
    Committing transaction...
    Committed revision 6.
    
    [846] >>> svn up
    Updating '.':
    At revision 6.
    
    [847] >>> svn diff -r PREV
    Index: file4
    ===================================================================
    --- file4   (nonexistent)
    +++ file4   (revision 6)
    @@ -0,0 +1,2 @@
    +some text
    +more more
    
  3. 分两步将您的工作流程分开。在编辑之前,首先提交文件的副本。然后进行编辑。