Как заставить svn diff игнорировать некоторые файлы? - PullRequest
4 голосов
/ 25 июля 2011

У меня есть живая и тестовая система.Программное обеспечение использует SVN для контроля версий.Живая версия - это специальная версия TRUNK.

Теперь я хотел бы создать diff из файлов в тестовой системе и в реальной системе.Я могу сделать это с помощью

# svn diff -r 12345

На тестовой коробке, где 12345 - ревизия действующей системы.Это работает как задумано, однако проект также поместил свой конфигурационный файл в SVN, и, естественно, живая система не делит конфигурацию с тестовой системой, поэтому мне нужно исключить ее.

Я не очень хорошос svn, и похоже, что нет переключателя, который бы специально исключал файлы / dirs.

Мне интересно, нужно ли мне сначала написать скрипт для проверки заданий на наличие измененных файлов, отфильтровать этот список и затем предоставитьПУТИ к svn diff.

1 Ответ

1 голос
/ 26 июля 2011

Я создал небольшой сценарий оболочки, который может перечислять как минимум все модификации, начиная с конкретной ревизии, плюс локальные модификации:

$ ./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 
...