2012-06-01 3 views
7
나는

항상 동기화 자식 거울을 유지

드루팔의 코드베이스의 repo가 ​​(112MB) 큰, 그래서 치열 해요, 내가 ... 디바이스 1, 디바이스 1, 살고, 여러 서버를 드루팔을 사용하는 여러 사이트가

git의 하드 링크 기능을 최대한 활용하여 사이트를 추가 할 때마다 중복되지 않도록해야합니다.

그렇다면 실제 서버에는 맨손으로 마스터 레포가 있고 모든 사이트는 각각 다른 지점을 사용하는 클론입니다. 이것은 하나의 서버에서 훌륭하고, 하드 링크가 사용되며, 빠르고 효율적입니다.

내 dev 서버에서는 일반적으로 베어 마스터 레포에서 복제됩니다. 즉, 동일한 컴퓨터의 두 사이트가 하드 링크를 사용하여 공간을 절약 할 수 없습니다.

내가 원하는 것은 내 dev 서버 각각에 맨손 저장소의 미러를 설정 한 다음 복제하는 것입니다.

dev1$ git clone --mirror live:master-bare-repo dev1-mirror-repo 
dev1$ git clone -b site1 dev1-mirror-repo site1 
dev1$ git clone -b site2 dev1-mirror-repo site2 

지금까지 모두 좋았습니다. 그러나 나는 항상 거울을 동기화 상태로 유지하기를 원합니다. 그래서 나는 dev1의 거울에 post-receive hook을 사용하여 git push --mirror origin을했습니다. 이제 dev1의 site1이 커밋을 푸시하면 마술처럼 master-bare-repo로 푸시됩니다.

서버를 변경하고 밀어 넣으면 어떻게됩니까? 재귀가 끝날 가능성이있는 post-receive 후크가 발생할 수 있으므로 post-receive 후크를 다른쪽으로 밀어 넣을 수 없습니다.

여기 주위에 영리한 방법이 있습니까? 모든

+1

주기적으로 백그라운드 서버에서 서버를 가져 와서 푸시하려고하는 백그라운드 프로세스가 사후 수신 대신 작동합니까? 또한 시도해보십시오. 그러나 두 번째로 다른 서버를 밀어 넣으려는 시도는 아무 것도 없기 때문에 아무 것도받지 못하기 때문에 메서드로 루프에 갇히지 않을 것이라고 생각합니다. – Shahbaz

답변

4

먼저, 당신은 재귀에서 생을 마감하지 않습니다 이후 후받는 결과가 될 것이다, (this other question에서 언급 한 바와 같이) "모든이 최신"때 실행되지 않습니다 후크를 의 은 미러에서 라이브 서버로을 푸시합니다.

다른 한편으로는 확장 가능한 디자인이 아닙니다 (새 미러를 추가 할 때마다 밀어 넣을 사이트를 추가하기 위해 라이브 서버의 훅을 변경해야합니다). 당신은 아마 미러에서 "게으른"동기화 전략을 사용하는 것이 더 우아 할 것입니다 : 그들이 밀어 넣기를받을 때 그들은 단지 주인에게 밀어 넣는 것이 아니라 그 전에 주인을 가져 오거나 잡아 당기는 것입니다. 이렇게하면 마스터에 후크를 설정할 필요가 없으며 동기화 전략을 미러에서 완벽하게 관리 할 수 ​​있습니다. 이 전략의 단점은 궁극적으로 변경 사항을 적용하기 전에 미러에 전파 할 라이브 서버를 변경하려고 할 수 있다는 것입니다. 따라서 마스터에 대한 변경이 확장 성의 균형을 보완하는 데 중요한지 여부를 숙고해야합니다. 물론이 "확장 가능한"디자인을 "동기화 할 수있는"디자인으로 만드는 패치는 외부 cron 작업을 사용하여 주석의 제안과 같이 마스터의 변경 사항을 주기적으로 확인하는 것입니다.

+0

이것이 효과가있는 것처럼 들립니다. 감사. 나는 한번 시험 해보고 대답 해 줄 것이다. – artfulrobot