2010-11-26 10 views
9

Git 리포지토리를 (2) 서버간에 자동으로 동기화하여 세 번째 지점에서 상호 교환 할 수있는 방법을 찾고 있습니다.두 서버에서 Git 리포지토리를 동기화하는 방법

상황은 다음과 같습니다 : 우리는 모든 프로젝트에서 git를 많이 사용하며 일부 저장소는 크기가 아주 빠르게 커집니다. 현재 우리에게는 하나의 중앙 서버가 있으며 모든 사람들이이 서버를 밀거나 당기는 중입니다. 그러나이 모든 것은 인터넷 연결을 통해 진행되므로 가장 빠른 방법은 아닙니다.

아이디어 : 다른 서버를 사무실에두고 모든 사무실에 git 저장소를 가지고 있습니다. 이 서버는 온라인 서버와 동기화되어야합니다. 기껏해야 사용자는 DNS 조정을 통해 어느 서버를 사용하는지 알지 못하기 때문에 온라인 서버 저장소의 주소는 네트워크에 연결될 때 사무실 내 주소로 해석됩니다.

이미 비슷한 일을하는 사람이 있습니까? 아니면 목표를 달성하는 쉬운 방법이 있습니다.

+0

사무실 외부에있는 사람이 밀 수 있어야합니까? – robert

+0

예, 가능한 경우 합리적인 노력 안에서 – maxigs

답변

4

후 쉽게 SSH를 forced command 메커니즘을 확장 할 수 있기 때문에 내가 쉽게 (gitolite 같은 프레임 워크는 LAN의 repo과 WAN에 http의 환매 특약에 자리 모두에 의미)를 SSH protocol 함께 할 그런 mechnism을 볼 것입니다 :

    두 REPO 로컬 REPO는 필요 원격 하나 로컬 REPO 동기화 이하 최신 원격 하나
  • 보다 경우
  • 명령을 거부 synchrone 경우
  • 첫 수표

hooks이 더 복잡와 이렇게하려면 모든 시간이 동기화 메커니즘을 유지하기 위해주의 깊게 서버 측 후크의 각 종류에 대한 설정을 할 필요가있다.

+0

강제 명령 설명을 빠르게 살펴 봤지만 어떻게 작동하는지 이해할 수는 없습니다. lan-repo에 연결을 만들 때 forced 명령은 wan repo와 동기화해야하는지 확인한 다음 (필요한 경우 수행) 리포지토리로 밀어 넣을 수있게 만듭니 까? 어떻게 생각하는지 사용자의 관점에서 보았습니다. 적어도 약간의 푸시 지연이 예상됩니다. – maxigs

+0

@maxigs : 아이디어 (및 gitolite가 설명합니다)를 사용하면 스크립트를 통해 (ssh를 통해) 보내는 모든 명령을 캡슐화 할 수 있습니다. 명령의 유효성을 검사합니다. b/필요한 경우 명령을 실행합니다. c/원래 명령을 실행합니다. d/필요한 경우 명령을 실행합니다. 그래서 귀하의 경우 a/(유효성 검사 단계)는 서버 측 repo (ssh forced 명령이있는 곳)가 푸시가 시작된 로컬 repo보다 최신이 아닌지를 확인할 수 있습니다. – VonC

0

Gitolite에는 리포지토리를 미러링하는 기능이 있습니다. 당신은 주인으로서 사무실에 하나를, 그리고 노예로 온라인 하나를 설정할 수 있고, 어느 하나를 추진할 수 있습니다.