2010-07-21 6 views

답변

19

: 다음

[paths] 
default = http://server1 
server2 = http://server2 

그리고는 해. 그게 문제가 될해서는 안,

[paths] 
server2=http://server2 
server3=http://server3 
[hooks] 
changegroup.server2 = hg push -f server2 
changegroup.server3 = hg push -f server3 

당신은 동일한 이벤트에 대해 여러 후크를 가질 수 있습니다

그래서 중앙 서버는 다음 hgrc있을 것입니다.
변경 집합 훅에 비해 변경 그룹 훅의 장점은 훨씬 덜 자주 실행된다는 것입니다.

+2

이것은 서버 1로 푸시가 성공한 경우에만 트리거되기 때문에 가장 적합한 솔루션입니다. branchy 히스토리를 가지고 작업하고 있다면, 그 changegroup 훅 라인에 'push -f'가 필요할 것입니다. –

+1

-f 옵션이 추가되었습니다. –

+0

코드를 편집하려면 코드가 작동해야합니다. Mercurial을 사용하면 [이벤트 당 여러 작업 수행] ** (http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html) **의 끝에 ** 확장 기능을 추가 할 수 있습니다. 후크의 이름. 후크의 이름을 지정하고 후크의 이름 ("."문자)을 입력하고 원하는 텍스트를 추가하여 후크의 이름을 확장합니다. 예를 들어, Mercurial은 commit 이벤트가 발생할 때 commit.foo와 commit.bar를 모두 실행합니다. –

1

.hg/hgrc 파일에는 기본 위치가 포함 된 [paths] 지시문이 있어야합니다. 같은 것을 추가하는 방법에 대한 무엇 : 당신이 changegroup 훅을 만들고, 중앙 서버에서

hg push default 
hg push server2 
+2

으로 남겨 두었습니다. 나는이 솔루션을 알고, 내가 원하는 것은 후크 또는 서버 1로 성공적으로 푸시 할 때 서버 2로 푸시되는 트리거를 자동으로 시작하는 트리거입니다. 위의 솔루션은 항상 하나의 서버로 푸는 것을 잊어 버릴 기회를 가지고 있습니다. 그건 그렇고, 빠른 답장을 보내 주셔서 감사합니다. – Akshay

+0

나는 자동 푸시 체인 문제에 직면 해있다. 그것은 해결 되든 안되나요? –

0

서버 중 하나가 마스터 저장소이고 나머지가 배포 된 것으로 가정합니다. 그런 상황에서 나는 주인과 만 상호 작용하고 배치를 cron :

cat >$HOME/bin/dist <<'EOM' 
#!/bin/sh 
cd ${1:?} 
tip=$(hg tip --template '{node}') 
for r in $remotes; do 
    hg push -r $tip $r 
done 
EOM 

chmod +x $HOME/bin/dist 
(crontab -l; echo '*/5 * * * * $HOME/bin/dist /var/repos/master') | crontab - 
+0

허 .. 만약 커밋이 5 백만 분의 1 이하로 밀린다면 어떻게 되겠습니까? :-). 이 경우 "변경 그룹"훅을 설정하는 것이 좋습니다. 또한 변경 집합이 분기를 만들 때 -f 옵션 (강제)을 사용하여 밀어 넣어야합니다. 내 충고, 당신이 cron 대신에 cron을 사용하고 싶다면 정기적으로 변경을 가하는 원격 머신에 설정하는 것이 좋을 것입니다 :이 방법은 하나 이상의 changeset이 풀릴 수 있습니다. 예를 들어), pull에는 -f 옵션이 필요 없습니다. 그냥 내 0.02 €. 건배, 크리스토프. –

+1

의 솔루션이 정상적으로 작동합니다. '밀어 넣기'는 '팁'과 모든 조상을 푸시하므로 모든 것을 얻을 수 있습니다. 불필요한 코드가 많이 있지만, 템플릿을 사용하여 템플릿을 배우는 대신에 'tip'이라는 이름을 사용할 수 있습니다 (-r은 이름이 잘 걸립니다). -r param을 모두 건너 뛰고 'push'하면됩니다. 기본값은 팁입니다. 어떤 지점에서 새로운 브랜치와 새 머리를 밀어 넣어야 할 수도 있고 스크립트가 실패하지 않기를 바랄 수도 있기 때문에 아마도 push -f를 원할 것입니다. –

+0

@ ry4an : 스크립트가 server1에서 server3로 도착하기 전에 다른 변경 세트를 가리킬 수 있으므로'tip' 이름을 사용할 수 없습니다.그저'-r'을 생략 할 수없는 이유 일뿐입니다. 모든 푸시 후에 모든 미러가 동일한 팁을 가지게하려면 전체 스크립트에 대해 동일한 수정을 고수해야합니다. 그러나'-f' 주석은 유효합니다. –

관련 문제