문제

SVN을 소스 제어 시스템으로 사용하고 메타 데이터 차이를 무시하면서 디렉토리를 비교하는 방법이 궁금합니다. 말할 방법이 있습니까? svn diff 실제 내용 만 비교하고 메타 데이터를 무시하려면?

파일 내용에 영향을 미치지 않는 SVN 속성 등과 같은 메타 데이터를 의미합니다. 파일 X는 트렁크 T와 비교하여 분기 B에 추가 특성을 가지고 있다고 가정합니다. 불행히도 파일 X의 실제 내용이 동일하더라도 'SVN Diff TB'에 나타납니다.

나는 다음과 같은 것을 찾습니다.

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize

업데이트: 나는 SVN 도구를 사용하는 대신 파일 시스템에서 직접 차별화하여 이것을 부분적으로 해결했습니다. 아래에서 내 답변을 참조하십시오 ...

도움이 되었습니까?

해결책 5

SVN 내장 도구를 사용하여이를 수행 할 방법이없는 것 같습니다. 내가 그것을 해결 한 방법 : 좋아하는 Diff 도구를 사용하여 나무를 모두 내보내고 파일 시스템에서 디포드로 diff. 그것은 어떻게 든 이것을 끝내는 유일한 방법입니다 :/

다른 팁

'FilterDiff -Clean'을 통해 SVN Diff 출력을 전달하여 속성 변경을 포함한 외부 라인을 제거 할 수 있습니다.

당신이 사용하는 경우 --summarize 옵션, 속성 변경은 첫 번째 열이 아닌 두 번째에 표시됩니다.

즉,

M  URL  -- indicates content change
 M URL  -- property change
MM URL  -- content and property change

grep가 조금 더 쉽습니다. 전체 차이를 원한다면 2 단계 프로세스를 가질 수 있다고 생각합니다. 먼저 요약을 사용하여 컨텐츠 변경 사항이있는 파일을 찾은 다음 차이가 있습니다.

Josephwatkins의 좋은 팁.

Grep-Junior-users의 명령은 다음과 같습니다.

svn diff A B --summarize | grep '^. '

Grep은 공간을 라인의 두 번째 캐릭터로 찾습니다.

SVN 도움말 문서를 검색하는 동안 이것을 찾았습니다

svn diff --patch-compatible

실행과 동일합니다

svn diff --show-copies-as-adds --ignore-properties

다음은이 모든 일을하는 단일 명령입니다. 개정 54833과 57215 사이의 현재 디렉토리의 모든 파일에 대해 모든 (비 프로퍼티) 차이를 찾으려면 다음을 수행해야합니다.

svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215

NB : 파일이 추가되거나 삭제되지 않은 수정 된 파일만이 다릅니다.

사용 svn diff --ignore-properties. 이는 컨텐츠의 차이 만 수행하는 Subversion의 내장 방법입니다. 항목의 속성에 대한 변경 사항을 무시합니다.

온라인에서 찾을 수 없었던 후에는 스크립트를 작성했습니다.

스크립트는 스크립트 상단에 입력 된 정규식 배열을 기반으로 데이터를 제거합니다. 현재 특성 변경을 필터링하기 위해 설정되었지만 일련의 정규 표현식과 일치하는 변경 사항을 제거 할 수 있습니다.

출력 만 파이프하십시오 svn diff 스크립트에 스크립트를 설정 한 후. 항상 같은 필터를 실행하기 때문에 매개 변수 대신 스크립트에 필터를 넣습니다.

나는 그것을 GPLV2로 출시했다.

clean_svn_diff.bash

확실하지 않지만 간단한 'SVN 차이 | grep -iv "무시하는 것" '은 해결 방법이 될 것입니다.

당신은 설정할 수 있습니다 SVN : 무시합니다 파일 및 디렉토리의 속성 SVN Diff가 무시할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top