2009-11-23 4 views
3

계속 테스트를 전용 서버로 이동합니다 (자동 테스트로 로컬 랩톱의 속도가 느려집니다). 내가 원하는 것은 내 테스트 서버 (CruiseControl.rb를 실행하는)가 Git을 통해 내 최신 (커밋 된) 변경 사항을 지속적으로 얻는 것입니다. 이상적으로는 내 워크 플로를 변경하지 않아도됩니다. 나는이 프로젝트를 진행하는 유일한 개발자이다. 테스트 서버를 얻기에원격으로 Git의 현재 지점 추적

이전에, 내가했다 :

  • 내 노트북을 내 주요 개발 시스템으로
  • 여러 가지를 내 로컬 저장소에.
  • 지점 중 하나를 가리키는 로컬 작업 복사본. 분기 간을 자주 전환합니다 (일반적으로 새 기능 용).
  • GitHub 계정은 미러링 된 원격 지점에 로컬 지점을 자주 푸시하는 계정입니다. (이것은 주로 오프 사이트 백업을 사용하기위한 것이므로 현재 프로젝트에 대한 코드를 공유하지 않습니다.) 나는 매일 잊어 버리기는하지만 GitHub을 매일 매일 끝내려고 노력한다.

나는 그 모든 것을 그대로 유지하고 싶습니다. 그 꼭대기에, 지금이 :

  • 테스트 서버 CruiseControl.rb
  • 내 테스트 서버에서 내 노트북 ​​저장소의 복제를 실행
  • .... (현재 GitHub 복제 안 함)
  • 테스트 서버에서 CC가 작성/테스트중인 로컬 작업 복사본.

내가 자동으로 내 노트북 ​​작업 복사본에서 일하고 있어요 어떤 지점받을 수 있도록에서 구축 내 테스트 서버를 가지고 노력했습니다 (물론) 하나 개의 특정 힘내 지점에

  • 이 작업 복사본 포인트 . (이것은 시스템 자원을 다 써 버리지 않고 autotest의 지속적인 테스트를 모방 할 것이다).

    것들 내가 성공하지 않고 시도했다 :

    • 자식 체크 아웃 원산지/HEAD :이 잘 파일을 얻을 수 있지만 복사 작업 "무점포을"좋아하지 않기 때문에 CruiseControl을 나누기.
    • git checkout --track -b a_branch origin/a_branch : 파일 가져 오기에 문제가 없으며 CC가 좋아하지만 테스트 서버를 특정 분기에 고정시킵니다. 랩톱에서 분기를 전환 할 때 현재 작업을 테스트하는 것을 사실상 중단합니다.
    • git checkout --track -b my_testing_branch origin/HEAD : 이것은 또한 빌드 가능한 파일을 가져 오지만 위의 명령과 동일한 문제가 있습니다. origin/HEAD에서 브랜치를 생성하면 "default"브랜치의 HEAD 만 가져 오므로 고정적입니다.

    워크 플로우의 주요 변경 사항을 포함하지 않는 원격 원격 테스트 시스템 (git 브랜치 포함 또는 불포함)을 얻을 수있는 방법이 있습니까?

  • 답변

    3

    다른 옵션은 테스트 서버에 풀링 할 새 코드를 알리는 hook을 작성하는 것입니다. 특히 post-commit 후크가 더 좋은 경로 일 것입니다. 그런 다음 커밋 할 때마다 테스트 서버에 끌어낼 지점과 분기 지점을 알릴 수 있습니다.

    +0

    테스트 서버가 테스트를 위해 최신 코드를 가져 오려면, 서버가 그것을 잡을 수있는 곳으로 밀어 넣어야하고, git에 포스트 푸시 훅이 있다고 나는 믿지 않는다. 푸시를 수행 한 머신에서 후크가 실행될 것이라고 생각합니다 (예 : 저장소가있는 서버가 아닌 랩톱). –

    +0

    원래, 나는 완전히 sans-push하고 있었고, 서버를 내 노트북에서 꺼내야했습니다. 서버가 풀을 시작하게하는 서버 (예 : ssh 원격 명령)에 대한 메시지를 실행하면 post-commit 후크가있는 Pat의 제안이 작동 할 수 있습니다. 그러나, 나는 현재 푸시 경로로 다시 기울고있다. –

    +0

    실제로, "post-push"hook은 --receive-pack 매개 변수 형태로 git-push에 있습니다. –

    0

    나는 과거의 자식을 건너 뛰고 공유 폴더/NFS/rsync 솔루션으로 이동한다고 생각했지만 중요한 문제가 있습니다. 커밋에 의해 트리거되지는 않지만 커밋으로 제한되지 않으므로 가양 성이 깨졌습니다. 내가 뭔가를 입력하는 동안 빌드됩니다.

    1

    현재 분기 작업을 병합하는 전용 테스트 분기를 가질 수 있습니다.
    해당 분기의 내용을 강제로 현재 작업 분기의 커밋으로 바꿀 수 있습니다 (git merge -s ours, what about “their” 질문 참조).

    $ git fetch laptopRepo 
    $ git checkout -b testingBranch laptopRepo/testingBranch 
    

    그것은 테스트 어떤 현재 작업을 게시 노트북 측면에 하나의 첫 번째 단계를 의미한다 :

    그런 다음 CI 서버에, 당신은 그것을 초기화합니다.

    +0

    나쁘지 않습니다. 불행히도 현재 작업을 테스트 분기에 병합하는 추가 정규 단계가 필요하지만 지금까지는 앞 주자입니다. 감사합니다. –

    1

    이 가장 큰 해결책이 아니다하지만 뭔가 ...

    테스트 서버는 현재 노트북에 활성화 된 지점 볼 git remote show origin를 실행할 수 있습니다. 예 :

     
    $ git remote show origin 
    * remote origin 
        Fetch URL: blade:/var/scratch/code 
        Push URL: blade:/var/scratch/code 
        HEAD branch: foo 
        Remote branches: 
        foo tracked 
        bar tracked 
        qux tracked 
    

    따라서 원본 저장소는 현재 foo 지점에 있습니다.

    저 레벨 명령을 직접 보지 못했기 때문에 직접 구문 분석해야 할 수도 있습니다 (아마도 누군가 더 좋은 방법을 갖게 될 것입니다). 예,

     
    $ b=$(git remote show origin | grep "HEAD branch" | awk -F: '{print $2}') 
    $ echo $b 
    foo 
    

    이제부터 origin/fooorigin/HEAD (NO 현지 지점)과 유사한 역할을하고 CruiseControl에 당신은 아마 테스트 시스템의 로컬 브랜치를 만들고 단지로 하드 리셋 것을 좋아하지 않는다 최신 위치 :

     
    $ b=$(git remote show origin | grep "HEAD branch" | awk -F: '{print $2}') 
    $ git reset --hard origin/$b 
    

    참고,이 HEAD 때문에 내가 항상 당신이 생각하는 것이 아닐 약간 깨지기 쉬운 것입니다. 예를 들어 rebase 중에 HEAD은 앞뒤로 이동합니다. 테스트 서버가 리베이스 중에 랩톱에서 HEAD을 확인하면 올바르지 않거나 원하지 않는 위치를 얻을 수 있습니다.

    +0

    이번 주말에 많은 리베이스를했기 때문에 문제가되었습니다. : - \ –

    1

    두 시스템 간의 관계를 뒤집어 놓으면 꽤 좋은 해결책이라고 생각합니다. 테스트 서버를 랩톱의 저장소에서 가져 오는 대신 랩톱을 테스트 할 서버로 푸시 아웃하도록 할 수 있습니다.

    먼저 나는 노트북의 REPO에 원격을 추가

    git push -f testing HEAD:master 
    

    이 내가 '어떤 지점에서 작동합니다

    다음
    git remote add testing <url of testing server> 
    

    내가 테스트를위한 코드가있을 때마다, 나는 푸시을 m 현재 켜져 있습니다. -f는 이미 해당 브랜치에있는 모든 것을 날려 버릴 것임을 보증합니다. 나는 조상에 대해 걱정할 필요가 없을 것이다.

    실제 작업 복사본에는 최신 코드가 삽입되지 않지만 CruiseControl의 폴링을 사용하면 문제를 해결할 수 있습니다. 또한 작업 복사본을 업데이트하는 서버 측 훅을 사용할 수 있습니다. 은 테스트 스위트를 실행합니다. (필자는 그 시점에서 CC도 필요하지 않습니다.)

    아마도 커밋 + 푸시 명령을 스크립트 또는 별칭에 추가하려고합니다. 그게 내 한 명령 커밋 & 시험을 줄 것이다. 어떤 이유로 테스트 푸시 (또는 그 반대로)를하지 않고 커밋을 수행하려는 경우 해당 옵션도 있습니다.

    +1

    그것은'post-commit' 훅 내에서 할 수있는 일입니다. 적극적으로 빌드되거나 테스트되는 코드를 덮어 쓰지 않도록 조심해야합니다. –