2010-06-08 16 views
12

현재 내 웹 호스트에있는 SVN 서버에 파일을 커밋하고 거기에서 SSH를 가져와 내 htdocs의 작업 디렉토리로 내 보냅니다.SVN 만 변경된 파일 만 내 보냅니다.

내 응용 프로그램이 커질수록 전체 내보내기는 시간 낭비입니다. 어떻게 변경된 파일 만 내보낼 수 있습니까?

svn export -r xxxx:HEAD http://svn/ 

해결책이 있습니까? 아마도 도움이 될 수 있습니까? 어떻게 개정판을 자동으로받을 수 있습니까?

+0

이것에 대한 BASH 해결책은 다음과 같습니다. http://stackoverflow.com/questions/4783362/exporting-only-changed-files-from-subversion-maintaining-directory-structure – AnOldMan

답변

1

내가 언급 한 것과 같은 문제인지 잘 모르겠지만 웹 응용 프로그램 파일을 커밋 할 때 svn2ftp.py SVN 후크를 사용하여 자동으로 FTP 수정 된 파일을 스테이징 서버. 설치가 매우 쉬웠고 결코 문제가 없었습니다.

2

SVN 체크 아웃을 로컬 리포지토리에 넣은 다음 변경된 파일을 웹 루트로 rsync합니다. 또는 webroot로 체크 아웃하고 모든 .svn 디렉토리에 대한 액세스를 거부하십시오.

+1

왜 그렇게 확신합니까? 다른 가능성은 없습니까? 사실 여기에는 많은 답변이 제시됩니다. Bash 스크립트, Perl 스크립트, svn2web 등의 도구 사용하기. 가능한 모든 옵션을 제시 했으므로 확실한 이유는 무엇입니까? – trejder

+0

+1 다른 방법이 있습니다. 나는 대답을 바꾸었다. – Daniel

+0

Greate! :] 좋은 하루 되세요! :] – trejder

2

없음 순수 SVN 솔루션은 내가 알고임을 존재하지만, 다음을 시도 할 수 있습니다 : 작업 디렉토리에서

svn update | egrep "^(A|U)[ ]+(.*)" | cut -b 2 | xargs -i cp -R "{}" /path/to/public_html 

, 당신이 업데이 트를 얻을 출력 구문 분석 - svn update을.

AU으로 표시된 모든 파일은 egrep "^(A|U)[ ]+(.*)"입니다.

A 또는 U을 제거하면 파일 이름이 cut -b 2이됩니다.

마지막 업데이트 이후에 변경된 파일 복사 - xargs -i cp -R "{}" /path/to/public_html.

(아직 서투른 셸푸에 대해, 아직 배우기).

편집 : 사용 cut 대신 tr가 (고정)

+1

+1 좋은 명령 줄. 나는 그것으로부터 작은 bash 스크립트를 만들 것이다. 다시 "퍼티" "원격 명령"기능을 사용하여 원격으로 호출 할 수 있으므로 바탕 화면의 아이콘을 클릭하여 업데이트 할 수 있습니다. – Daniel

+0

@ hudolejev : 솔루션을 혼합 할 수있는 기회가 있으므로 FTP를 통해 로컬 경로 대신 원격 서버로 파일을 변경하는 것만으로 내보낼 수 있습니까? 개발 서버에서 고객 시스템에서 실행되는 FTP 서버로 저장소의 최신 버전을 얻으려면이 기능이 필요합니다. 사전에 감사드립니다 ... – trejder

+0

업로드의 경우 마지막 부분을'xargs -i wput "{}"ftp : // server.url /'로 변경하거나 SCP :'xargs -i scp -r "{}"server.url :/path/to/whatever'. 그냥 추측하지 마세요. – hudolejev

6

이 거북이 SVN의 사용으로 작동합니다. 그것 없이는 할 수 있을지 확신하지 못합니다.

내가 수천 개의 파일 중 일부를 변경 한 것과 비슷한 문제가있었습니다 (상속 된 문제입니다 ...). 수천 개의 파일 중 10 개가 넘었으므로 전체 디렉토리를 업로드하거나 의존하지 않았습니다. winscp를 사용하여 날짜를 올바르게 일치시킵니다 (이 서버는 미국에 있고 메신저는 AUS에 있기 때문에).

그래서 Tortoise SVN에서 "로그보기"를 통해 SVN으로 체크인했습니다. 그런 다음 가장 최근의 개정판을 마우스 오른쪽 단추로 클릭하고 (사용자가 살 수있는 모든 개정판이 될 수 있음) "이전 개정판과 비교"를 선택했습니다. 그런 다음 나타나는 모든 파일 (CTRL-A)을 선택하고 "선택 항목 내보내기"를 마우스 오른쪽 단추로 클릭하면 올바른 폴더 구조의 모든 업데이트 된 파일이 저장되고 업로드 준비가되었습니다.

0

svn2ftp 0.3 - bash 스크립트. 무료로, svn 저장소에서 FTP로 파일을 내보낼 수 있습니다. (cheking revisions) 파일 : start.sh - 스크립트, settings.properties - svn, ftp, 프로젝트 속성.

+0

입력하신 URL은 더 이상 존재하지 않습니다. 누구든지이 스크립트를 찾을 수있는 지식이 있습니까? svn2web와 비슷한 도구가 있기 때문에 svn2ftp에 대해 정확히 묻습니다.이 도구는 제가 시도했지만 결과에 만족하지 않았습니다. – trejder

1

나는 그것이 내가 가진 문제와 비슷하다고 생각한다. 종종 나는 최근에 변경된 파일 만 웹 서버에 ftp해야했습니다. Rsync는 웹 서버에서 사용할 수 없었기 때문에 사용할 수 없었습니다.
내 작품에서 사용하는 또 다른 해결책이 있습니다.내 로컬 서버에 설치 한 Trac과 함께 SVN을 사용합니다. 다른 Trac 중 두 버전 사이의 변경 사항을 표시하거나 특정 변경 집합에 도입 할 가능성이 있습니다. Trac을 사용한 적이 없다면, Trac 프로젝트의 홈페이지를 방문하여 저장소를 검색하십시오. 공개적으로 사용할 수 있습니다.
예를 들어,이 게시물을 작성한 순간의 최신 안정 릴리스 (0.12)를 확장했습니다. 내가 볼 수있는 최신 개정은 10792입니다. 개정 번호를 눌러이 분기의 개정 로그를 표시 할 수 있습니다. 이제 당신이 할 수있는 두 가지 :

  • 중 선택이 DIFF 열에서 수정 및보기 목사에게 열을
  • 그들 사이의 차이를 참조하거나 에 작은 기어 아이콘을 클릭 버튼을 변경 을 클릭 변경 집합을 특정 수정본 (this page 참조)과 관련 있습니다.

두 경우 모두 수정 된 파일 목록과 이전 파일과 새 파일 간의 형식이 잘 지정된 변경 사항이 표시됩니다. 페이지 하단에는 통합 차이우편 번호의 두 가지 형식의 링크를 다운로드 할 수있는 링크가 있습니다. 마지막 파일은 수정 된 파일 만 포함 된 zip 아카이브입니다. 이제 아카이브를 압축 해제하고 수정 된 파일을 웹 서버에 쉽게 ftp 할 수 있습니다. 대형 프로젝트에서는 시간을 절약 할 수 있습니다.
Trac에 익숙하지 않은 분은 프로젝트 웹 페이지에있는 Trac의 설명서를 참조하십시오. 또는 책을 얻을 수있는 사람이 있다면 Managing Software Development with Trac and Subversion 정말 유용하다고 생각했습니다.

7

것은 나는 다음과 같은 배쉬 스크립트를 사용하고 있습니다 :

는 hudolejev의 솔루션과 유사
for i in $(svn diff --summarize -r 1:2 http://repo_path | awk '{ print $2 }'); do p=$(echo $i | sed -e 's{http://repo_path/{{'); mkdir -p $(dirname $p); svn export $i $p; done 

, 그것은 변경 (1, 2)이 경우의 변화를 출력하고, 파일과 폴더를 통해 반복합니다.

+0

hudolejev와 동일한 질문 : 솔루션을 혼합 할 수있는 기회가 있으므로 FTP를 통해 로컬 경로 대신 원격 서버로 파일을 변경하는 것만으로 내보낼 수 있습니까? 개발 서버에서 고객 시스템에서 실행되는 FTP 서버로 저장소의 최신 버전을 얻으려면이 기능이 필요합니다. 사전에 감사드립니다 ... – trejder

+0

좋아요, 이제는 제가 가지고있는 레포에서 작동하는 일반 스크립트로 편집해야하고 수정 번호를 매개 변수로 사용하며 갈 수 있습니다! –

0

Tertoise와 작업 할 때 @ User123342234의 해결책과 동일한 이점을 원하지만 공유/원격 저장소에 변경 사항을 적용하기 전에 변경 사항을 커밋하지 않으려는 경우 유용합니다. Tortoise (거의 알려지지 않은 기능)를 사용하여 local svn repository을 만들면 같은 결과를 얻을 수 있습니다. 그런 다음 원격 지점을 내보내 로컬 저장소로 가져올 수 있습니다. 그런 다음 로컬 저장소의 작업 사본을 통해 원격 저장소의 로컬 수정 된 작업 사본을 내보내고 커밋하십시오. 이제 로컬 저장소에서 "로그보기"를 사용하여 공유/원격 저장소에 먼저 커밋하지 않고도 변경 내용을 내보낼 수 있습니다. 반드시 하찮은 것은 아니지만 최소한 한 번만 인스턴스하면 도움이되었습니다.

관련 문제