svn(SubVersion) diff 결과물을 vim 의 diff 기능에 연동?

ssehoony의 이미지

svn diff 해서 나오는 결과물을 그냥 text 로 보기엔 한눈에 잘 들어오질 않네요.
vim의 diff 화면은 보기 좋게 출력되던데 어떻게 하면 svn diff 결과를 vim diff 쪽으로 연결할 수 있을까요?

혹은 다른 좋은 svn diff 결과를 볼 방법이 있나요?

eek의 이미지

작업환경이 win32계열이시다면 Tortoisesvn을 설치하시고
환경설정에서 파일비교설정을 vimdiff를 지정하시면 되구요 개인적으로 acroedit에있는 acrodiff를 권장하고싶지만^^;
그리고 쉴환경이시다면 그냥 버젼을 내려받기하고 vimdiff로 비교하는 방법밖에 없는걸로 알고있습니다.

Perl 만세~~~

ssehoony의 이미지

Tortoisesvn 의 diff 는 만족스러운데 아쉽게도 win32 환경이 아니라서

yui의 이미지

vim.org에서 script를 검색해보세요.
cvs는 cvscommand로 잘 됩니다.
:CVSVimDiff 와 같은 식으로 사용합니다.
subversion용으로도 누가 구현하지 않았을까요?

Prentice의 이미지

svn diff | gvim -d -

혹시 이걸 바라시는 것은..;

ssehoony의 이미지

Quote:
svn diff | vim -

위에 방법도 그냥 svn diff 보다는 훨 좋군요.
근데 제가 원하는 진정한 diff 는 vim -d [file1] [file2] 로 헀을 때
보여지는 Diff Mode 형식으로 볼 수 없을까? 입니다. :)
lifthrasiir의 이미지

svn diff --diff-cmd vim -x "-d" ...

제가 svn을 거의 안 써서 잘은 모르겠는데 이러면 어떨까 싶습니다.

- 토끼군

ktd2004의 이미지

제가 사용하는 스크립트입니다.
스트립트 이름은 그냥 svi 라고 해서 사용하고 있습니다.

=========================================
#!/bin/bash
# 이 파일을 수정하면 도스에서 사용하는 svi.sh 파일도 같이 수정해야 한다.

# 사용법에 대한 함수.
function usage()
{
echo "`basename $0` [-h|-r prev[:new]] filename"
echo " -h : help"
echo " -r prev[:new] : diff each revision"
}

# 만약 파라메터가 없으면 종료.
[ $# -eq 0 ] && usage && exit 1

# revision 정보를 얻어온다.
REVISION=""
while getopts :hr: optname ;do
case $optname in
h)
usage; exit 1;;
r)
REVISION="$OPTARG";;
*)
usage; exit 1;;
esac
done
shift $((OPTIND-1))

REVISION=`echo $REVISION | tr ":" " "`

# 읽어온 revision 정보로 부터 prev와 new를 분리해 낸다.
PREV_REV=""
NEW_REV="HEAD"

declare -i i
i=0
for rev in $REVISION;do
case $i in
0)
PREV_REV="$rev";;
1)
NEW_REV="$rev";;
*)
usage; exit 1;;
esac
i=$i+1
done

# 해당 파일이 존재하지 않으면 에러를 출력하고 종료한다.
[ ! -f "$1" ] && echo "[ERROR] "$1" is not exist" && exit 1

# 디렉토리구분자인 "\"를 '/'로 변환하도록 한다.
# 리눅스 쉘에서 tr을 사용할 때는 "\\"로 되지만 shell script안에서 사용할때는
# "\\\\"로 표현해야 한다.
# 그리고 또 중요한 것은 shell로 "\" 문자가 포함된 스트링이 전달되면 특수하게
# 인식될 수 있다. 따라서 따옴표로 묶어서 넘겨주어야 한다.
FILENAME=`echo "$1" | tr '\\\\' '/'`

DIRNAME=`dirname ${FILENAME}`
BASENAME=`basename ${FILENAME}`

# 적당한 prev_file을 찾아낸다.
if [ "$PREV_REV" = "" ];then
PREV_FILE="${DIRNAME}/.svn/text-base/${BASENAME}.svn-base"
else
svn cat -r $PREV_REV "${FILENAME}" > "${FILENAME}".$PREV_REV 2> /dev/null
RET=$?
if [ $RET -eq 0 ];then
PREV_FILE="${FILENAME}".$PREV_REV
DELETE_PREV_FILE=${PREV_FILE}
else
rm -f "${FILENAME}".$NEW_REV
PREV_FILE=""
fi
fi

# 적당한 new_file을 찾아낸다.
if [ "$NEW_REV" = "HEAD" ];then
NEW_FILE="${FILENAME}"
else
svn cat -r "$NEW_REV" "${FILENAME}" > "${FILENAME}".$NEW_REV 2> /dev/null
RET=$?
if [ $RET -eq 0 ];then
NEW_FILE="${FILENAME}".$NEW_REV
DELETE_NEW_FILE=${NEW_FILE}
else
rm -f "${FILENAME}".$NEW_REV
NEW_FILE=""
fi

fi

# 만약 두개의 파이 모두 존재하지 않는 다면 종료한다.
if [ "$PREV_FILE" = "" -a "$NEW_FILE" = "" ];then
usage; exit 1
fi

if [ "$OS" = "" ];then
PROG=vim
else
PROG=gvim
fi

# 이제 vi를 실행하자.
if [ ! -f ${PREV_FILE} ]; then
if [ ! -f ${NEW_FILE} ];then
usage; exit 1
else
${PROG} ${NEW_FILE}
fi
else
if [ ! -f ${NEW_FILE} ];then
[ -n "${DELETE_PREV_FILE}" ] && rm -f "${DELETE_PREV_FILE}"
echo "${PREV_FILE} is not found"
exit 1
else
${PROG} -d "${PREV_FILE}" "${NEW_FILE}"
fi
fi

# co으로 갱신받은 파일을 지우도록 한다.
[ -n "${DELETE_NEW_FILE}" ] && rm -f "${DELETE_NEW_FILE}"
[ -n "${DELETE_PREV_FILE}" ] && rm -f "${DELETE_PREV_FILE}"

ssehoony의 이미지

좋은 스크립트군요.
잘 사용하겠습니다. :D

pynoos의 이미지

yui wrote:
vim.org에서 script를 검색해보세요.
cvs는 cvscommand로 잘 됩니다.
:CVSVimDiff 와 같은 식으로 사용합니다.
subversion용으로도 누가 구현하지 않았을까요?

http://www.vim.org/scripts/script.php?script_id=922

svncommand.vim 이 있습니다. cvscommand 과 같이

편집중인 파일에서 \sv 를 차례로 누르시면 base revision과 vimdiff로 보여주지요.

pynoos의 이미지

svn diff a.c
를 하면 vimdiff로 바로 보이게 하려면.

$ more ~/bin/vimdiff.sh
#!/bin/sh
while test $# -gt 2; do shift; done
vimdiff $@

$cat ~/.subversion/config | grep diff-cmd
diff-cmd = vimdiff.sh

PATH에 ~/bin 을 넣어 두면 됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.