2011-02-04 3 views
3

참고로 CentOS 5.5를 서버에서 실행하고 있습니다.Git-Svn 복제본을 cron을 통해 어떻게 동기화합니까?

저는 여러 다른 개발자들과 함께 분산 프로젝트 작업을하고 있으며 Git을 사용하여 저장소를 관리하고 있습니다. 모든 것이 Gitorious에서 라이브로 진행되며 아름답게 작동합니다. 그러나 Git 내에서 "공급 업체 지점"과 같은 종류의 외부 Subversion 저장소와 동기화 된 상태를 유지하려면 저장소에 지점이 있어야합니다. 이유는 : 우리는이 기존의 오픈 소스 프로젝트 (WordPress)를 기반으로 여러 가지를 구축하고 작업 카피가 자신의 repo에 게시 한 버그 수정을 상속 받기를 원합니다.

라이브 Subversion repo와 동기화하여 보관할 수있는 "wordpress"라는 별도의 지점을 갖도록 설정했습니다.

git checkout wordpress 
git svn rebase 
git gc 
git push origin wordpress 

이 명령은 것입니다 : 그것은처럼 간단 이렇게하려면 우리는 워드 프레스 분기에

  • 다시 동기화 라이브의 SVN의 repo으로 분기있어 확인

    1. 가비지 수집 실행 (그렇지 않으면 저장소가 점진적으로 커질 수 있습니다.)
    2. 업데이트 된 분기를 Gitorious의 호스트 저장소에 푸시

    WordPress 트렁크 업데이트 때마다이 네 가지 명령을 실행하기는 쉽지만 짜증나는 번거 로움이 있습니다. 이걸 크론 작업으로 설정하고 싶지만 어떻게 될지 모르겠습니다!

    나는 wordpress.sh라는 스크립트를 작성하고 해당 서버에있는 /etc/ 폴더에 배치했습니다

    #!/bin/bash 
    cd /var/www/git/wordpress 
    git checkout wordpress 
    git svn rebase 
    git gc 
    git push origin wordpress 
    

    스크립트는 잘 실행됩니다. 내 서버에 SSH를 넣고 루트로 로그인 한 다음 . /etc/wordpress.sh을 입력하면 모든 것이 올바르게 작동합니다. 그러나 cron이 나에게 도움이되도록 어떻게 설정할 수 있습니까?

    CentOS의 Webadmin 인터페이스를 사용하여 수동으로 crontab에 추가 (실패)하여 매시간 스크립트 (실패한 경우)로 추가하려고 시도했지만 지금은 손실이 있습니다! 내 시스템 로그는 (아래 로그) 발사 것 것을 주장 :

    Feb 4 07:00:01 ---- crond[27745]: (root) CMD (/etc/wordpress.sh #WordPress mirror) 
    Feb 4 07:01:01 ---- crond[27773]: (root) CMD (run-parts /etc/cron.hourly) 
    Feb 4 08:00:01 ---- crond[29095]: (root) CMD (/etc/wordpress.sh #WordPress mirror) 
    Feb 4 08:01:01 ---- crond[29142]: (root) CMD (run-parts /etc/cron.hourly) 
    Feb 4 09:00:01 ---- crond[29708]: (root) CMD (/etc/wordpress.sh #WordPress mirror) 
    Feb 4 09:01:01 ---- crond[29718]: (root) CMD (run-parts /etc/cron.hourly) 
    Feb 4 10:00:01 ---- crond[30328]: (root) CMD (/etc/wordpress.sh #WordPress mirror) 
    Feb 4 10:01:01 ---- crond[30337]: (root) CMD (run-parts /etc/cron.hourly) 
    

    하지만 로그인하고 수동으로 스크립트를 실행하지 않으면 아무것도 실제로 발생하지 않습니다. 아이디어?

  • +0

    또한 명령'./etc/wordpress.sh'에서 cron 작업을 수행했지만 다르게 처리하지는 않았습니다. – EAMann

    +0

    @ ygram의 조언을 바탕으로 한 해결책에 대한 마지막 토론에 관심이있는 분들을 위해 http://eam.me/e1 – EAMann

    답변

    2

    Cron은 로그인 셸이 아닌 다른 환경에서 실행되므로 가능성있는 오류는 git이 경로에 없다는 것입니다. 가장 쉬운 방법은 일반적으로 crontab (/ usr/bin/git 또는 git이 설치된 곳)의 모든 명령의 전체 경로를 사용하는 것입니다.

    일반적으로 cron에서 실행되는 스크립트의 오류는 사용자에게 메일로 발송되므로 루트의 사서함을 확인하십시오.

    +0

    오류가 발생하지 않았습니다 ...하지만'git'에 대한 참조를'/ usr/bin/git/git'으로 변경해야 작동 할 수 있습니다. 또한 cron 명령을'/ etc/wordpress.sh'에서'sh/etc/wordpress.sh'로 바꿔서 일을 시작해야했습니다. 도와 주셔서 감사합니다! – EAMann

    -1

    사이트를 root으로 실행합니까? 수동으로 스크립트를 root으로 실행합니까? 네가 그러길 바란다.

    이제 cron 출력을 살펴보십시오. 루트 계정에서 스크립트를 실행하기 때문에 아마도 저장소를 찾지 못할 것입니다. 그것을 루트의 계정이 아닌 crontab 계정에 추가하십시오.

    +0

    후속 게시물을 확인하십시오. 내가 이것을 작성했을 때, 제가 시스템에 대해 가지고있는 유일한 계정은'루트'였습니다. "루트"로 실행하지 말라고 말하는 것이 일반적으로 좋은 생각이지만 문제를 해결하는 데 전혀 도움이되지 않습니다. – EAMann

    관련 문제