2009-08-04 1 views
19

파일이나 폴더에 속성이 설정된 시점을 확인하는 가장 쉬운 방법은 무엇입니까? 기본적으로 속성에서 작동하는 "svn blame"과 동일한 기능을 찾고 있습니다.SVN에서 파일/폴더 속성의 기록을 어떻게 가져 옵니까?

log 부속 명령을 사용하면 특성이 수정되었을 때를 포함하여 파일이나 폴더의 전체 히스토리를 얻을 수 있습니다. 그러나 속성 수정과 다른 유형의 수정을 구별하지는 않습니다. 물론 특정 속성의 기록에 대해서는 알려주지 않습니다.

status 명령은 속성과 다른 수정 유형을 구분하지만 작업 복사본에서만 작동합니다.

자체는 파일이 아닌 디렉터리 만 지원하며 속성이 아닌 콘텐츠에서 작동합니다.

아이디어가 있으십니까?

답변

8

제가 생각할 수있는 가장 좋은 방법은 svn propget 명령을 사용하여 텍스트 파일에 현재 속성 값을 덤핑하는 작은 스크립트 또는 응용 프로그램을 작성한 다음 속성을 다른 텍스트 파일로 덤프하는 리비전을 다시 걷는 것입니다. 둘을 비교합니다. 변경 사항을 감지하자마자 수정 번호 (실제로 변경된 이후 개정 번호)와이를 커밋 한 사용자를 인쇄합니다. 여기

는 SVN 덤프 예를 들어 명령입니다 : 특정 폴더의 속성이 변경되었을 때의 목록을 얻을 수

svn propget -r 80 svn:ignore dictionary 
+0

:

는 여기에 몇 가지 샘플 출력입니다. 아 ~. –

+0

이것에 대한 좋은 점은 그 개정이 반드시 재산을 변경 한 사람이 아니라는 것을 저지른 사람입니다. –

+0

@anonfunc, 다른 사람들이 어떻게 재산을 바꿀 수 있었는지 나는 이해할 수 없다? 새로운 속성 값을 포함하는 첫 번째 수정은 항상 변경을 커밋 한 수정이라고 생각합니다. –

1
#!/bin/bash 
# This is not a great solution, but it works for gathering the data 

CURRENT_REVISION=95300 
OLDEST_REVISION=93000 
URL="file:///home/svn/repo/project/dir/target.c" 
PROPERTY_NAME="svn:externals" 

for i in `seq $OLDEST_REVISION $CURRENT_REVISION` 
do 
    svn -r$i propget "$PROPERTY_NAME" "$URL" | sed -e "s/^/$i\t/" 
done 
7

방법 중 하나를 : 수정 (80)에 사전 디렉토리 속성을 무시 :

r963 | someuser | 2013-08-26 20:32:37 +0200 (Mon, 26 Aug 2013) | 4 lines 
Changed paths: 
    M /trunk/datacenter 
-- 
r908 | someotheruser | 2013-08-15 12:15:03 +0200 (Thu, 15 Aug 2013) | 1 line 
Changed paths: 
    M /trunk/datacenter 
-- 
r413 | someuser | 2013-04-26 09:02:08 +0200 (Fri, 26 Apr 2013) | 1 line 
Changed paths: 
    M /trunk/datacenter 
,691,363 : 다음과 같은 출력을 제공

svn log -v . |grep " M /trunk/datacenter$" -B2 

$ svn diff -c963 

하단에 :

... 

Property changes on: . 
___________________________________________________________________ 
Modified: svn:ignore 
## -22,3 +22,5 ## 

.idea 
.classpath 
+ 
+dev-config.groovy 

단점 :

  • 안돼 당신이있어 어떤 속성이 지정하는210

    그런 다음 변경을 확인하려면 각 버전을 볼 수 있습니다 에 흥미가있다

  • 지루한

참고 : 확실하지 -B2 라인 "M/트렁크/데이터 센터"로 첫 번째 줄을

+0

우수 답변, 오래 전에 이걸 상향. Subversion이 이러한 종류의 세부 정보를 로그에 필터링 할 고유의 방법을 제공하지 않는다고보기는 어렵습니다. – javabrett

0

svn-extensions 도구 상자 지금 svn-prop-annotate이 있고 (전문성)을 svn-mergeinfo-annotate 명령하지 않을 수 있습니다, 모든 경우에 충분하다. 그들은 성능이 떨어지며 (각각의 변경에 대해 svn logsvn diff을 실행하기 때문에) 특정 작업 스타일에 대한 종속성과 연관성이있을 수 있지만 필사적이라면 시도해보십시오.나는이 작업을 수행 할 준비가 방법이 없다는 답변으로 더 나은 옵션의 부족을거야

$ svn-mergeinfo-annotate --author karkat -l 5 
67645 ingo.karka Merged /branches/1.50/foobar:r67488 
67423 ingo.karka Merged /branches/1.50/foobar:r67315,67331 
67339 ingo.karka Merged /branches/1.50/foobar:r67279 
53320 ingo.karka Merged /branches/foo-1.01:r53317 
관련 문제