如何使svn diff忽略某些文件?

4
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我有一个生产系统和一个测试系统。该软件使用SVN进行版本控制。生产版本是特定的TRUNK修订版。

现在我想从测试系统中的文件创建与生产系统的差异。我可以使用以下方法完成:

# svn diff -r 12345

在测试框中,12345是实时系统的修订版本。这个工作按预期进行,但是项目也将其配置文件放在SVN下,自然实时系统与测试系统不共享配置,因此我需要将其排除在外。
我对svn不是很熟悉,看起来没有特定的开关可以排除文件/目录。
我想知道是否需要编写一个脚本来检查已更改的文件,过滤该列表,然后提供路径给svn diff
1个回答

1

我创建了一个小的shell脚本,能够列出至少自特定版本以来的所有修改以及本地修改:

$ ./svn-modified-since 10563

代码:

#!/bin/bash

LOCALBASE=$(svnversion -n|grep -oP "^\d+(?=M$)")

# echo "Local base revision: $LOCALBASE"

if [ ! $LOCALBASE ]
    then
        echo "Quit: No modifications in local copy found."
        exit
fi

TARGETBASE=$1

# echo "Target base revision: $TARGETBASE"

if [ ! $TARGETBASE ]
    then
        echo "Quit: No target base revision given."
        exit
fi

WORKPATH=$2

# files changed in working directory copy
FILES=`svn status $WORKPATH`

# files changed between working copy and foreign base revision
FILES="$FILES
`svn diff --summarize -r $TARGETBASE:$LOCALBASE $WORKPATH`"

echo "$FILES" | sort -u

示例输出:

M       common_functions.php
M       config.php
M       locale/fr/LC_MESSAGES/fr.mo
M       locale/fr/LC_MESSAGES/fr.po
M       common_functions.php
?       tmp/surrogates.php
...

我现在可以使用grep过滤输出,并将文件名作为参数与xargs一起使用:

# ./svn-modified-since 10563 | grep -v "^\?" | grep -o "([^ ]+)$" | grep -v "config.php" | xargs svn diff --force -r 10563 > my.diff

为了处理像LC_MESSAGES这样的二进制文件,我可以通过替换svn diff命令来使其工作:

svn diff --force --diff-cmd /usr/bin/diff -x "-au --binary" -r 10563

使用

patch -p0 -i my.diff 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接