답변:
작업 사본이 아닌 저장소 자체에 액세스 한 경우 현재 저장소를 덤프하고 문서 폴더에 대한 정보 만 포함하도록 필터링 한 후 다른 저장소로로드 할 수 있어야합니다.
다음과 같이 될 것입니다 :
svnadmin dump /svn/old_repos > ./repository.dump
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./repository.dump > ./docs_only.dump
svnadmin load /svn/new_repos < ./docs_only.dump
저장소에 액세스하지 않으면 개정 히스토리를 유지할 수 없으며 파일을 새 저장소에 복사하고 커미트하도록 설정해야합니다.
"C:\Program Files (x86)\VisualSVN Server\bin\svnadmin" dump c:\Repositories\MyRepository > c:\Temp\MyReository.dump
svndumpfilter에는 심각한 결함이 있습니다. 파일 또는 경로가 필터링중인 경로에서 필터링중인 경로로 복사 된 경우 svndumpfilter는 기록을 채울 수 없으며 작업이 실패합니다.
이 문제가 발생하면 svndumpfilter2 를 사용할 수 있습니다 .
이것은 SVN 문서에서 설명합니다. ... 에서 리포지토리 유지 관리 섹션을 확인하십시오 svndumpfilter
. 여기에는 중앙 리포지토리에서 프로젝트를 덤프하여 새로운 별도 리포지토리로 옮기는 방법이 구체적으로 설명되어 있습니다.
나는 당신이 그것을 원격으로 할 수 있다고 믿지 않습니다 (즉, 로컬 사본없이). 그러나 이것은 작동해야합니다 : svn export
원래 서버의 폴더와 svn add
새 저장소로 의 폴더 .
처럼:
$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit
편집 : D' oh, 이것은 역사를 떨어 뜨립니다. 사무엘이 묘사svnadmin
한대로 사용하십시오 .
나중에 참조 할 수 있도록 :
SVN 문서는 다음과 같이 명확하게보고합니다.
최상위 레벨 디렉토리를 제거하기 위해 덤프 파일을 수동으로 편집하려는 경우 편집기가 줄 끝 문자를 기본 형식 (예 : \ r \ n에서 \ n)으로 자동 변환하도록 설정되어 있지 않은지 확인하십시오. 콘텐츠가 메타 데이터에 동의하지 않기 때문입니다. 이것은 덤프 파일을 쓸모 없게 만듭니다.
sed 또는 Vim을 사용하여 최상위 디렉토리를 대체하십시오. 그러나이 디렉토리 이름은 프로젝트 파일에도 포함되어 있습니다 !!!! 이로 인해 SVN로드 체크섬 오류가 발생합니다.
따라서이 작업을 수행 할 때는 경로 이름 만 sed로 문자열을 바꾸지 마십시오.
“노드 경로 : old_path”를“노드 경로 : new_path”로 대체하십시오. 자세한 내용은 SVN 서적 5 장“리포지토리 관리”를 참조하십시오.
허용 된 답변을 사용하려고했지만 거대한 저장소가 있었고 작은 디렉토리를 내보내고 싶었고 전체 저장소를 덤프 할 여유가 없었습니다.
따라서 디렉토리가 변경된 곳의 개정판 만 내보냈습니다 (내 보낸 디렉토리가 저장소의 다른 위치에 대한 참조가있는 경우 작동하지 않을 수 있음).
svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",$1);print $1}' > revisions.txt
#tac for revisions in reverse (oldest revision first)
tac revisions.txt | while read line; do svnadmin dump /svn/old_repo -r$line >> ./docs_revisions.dump ; done
#You don't have to filter if you commited only files in your directory docs in your exported revisions
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./docs_revisions.dump > ./docs_only.dump
svnadmin load /svn/new_repos < ./docs_only.dump
리포지토리 URL ( URL_to_docs
), 서버의 위치 ( /svn/old_repo
) 및 리포지토리 ( path/to/docs
)의 문서 경로를 바꿔야합니다.
docs_only.dump
새 저장소에서 문서 디렉토리의 위치를 변경하려는 경우 쉽게 편집 할 수 있습니다 .