다른 호스트의 git 저장소를 동기화 상태로 유지


34

작은 프로젝트를 시작하려고 생각하고 git으로 버전을 만들고 싶습니다.

Bitbucket 은 무료 플랜으로 나에게 좋은 옵션 인 것 같습니다. 웹 인터페이스, Mac OS 클라이언트 등과 같은 멋진 도구가 있기 때문에 git 작업을위한 주요 도구로 사용하고 싶습니다. 그러나 타사 서비스를 사용하여 발생할 수있는 우발적 손상으로부터 보호하기 위해 저장소의 두 번째 백업 사본으로 NAS에 git을 설치하고 싶습니다.

이제 제 질문은 두 개의 다른 호스트에 리포지토리를 만든 다음 동기화 상태를 유지할 수 있는지 여부입니다. 예를 들어, 일주일에 한 번 NAS의 저장소를 Bitbucket의 저장소와 일치하도록 업데이트한다고 가정합니다. 그런 다음 Bitbucket에 문제가 발생하더라도 로컬 NAS 저장소에 대한 전체 개발 기록이있는 전체 저장소가 계속 남아 있습니다.

그리고 전체 히스토리가있는 기존 저장소를 다른 git-service로 가져 오는 방법이 있습니까?


미러링이 필요한 것이라고 생각합니다. 이 기사 는 내가 필요한 것을 정확하게 설명하는 것 같습니다. 그리고이 하나 뿐.

나는 그것이 전체 기록으로 전체 사본을 만들고 두 호스트의 저장소에 자동으로 새 버전을 자동 커밋 할 것이라고 생각합니다.

내가 맞아?


나는 xpdev를 사용하고 있는데 2 시스템 상황에서 귀하의 사건에서 git rus를 얻는 것이 무엇인지 궁금합니다. 모든 최종 빌드에서 확인하기 위해 USB 백업을 만듭니다. 그러나 기본적으로 버전 관리는 xpdev에서 처리되므로 실제 요구 사항은 아닙니다. BTW 만약 당신이 바보 증거 NASS Raid1을 소유하고 있다면 당신은 자신의 버저 닝 시스템을 실행하는 것을 고려할 수도 있습니다
user613326

그러나 2 곳에서 전체 버전 관리를 원합니다. 만약 써드 파티 호스팅이 죽거나 회사가 운영을 중단한다면, 모든 버전 기록과 동일한 경험을하고 싶습니다.
BartoNaz

그것은 99.9 %의 안전을 위해 NAS에 편의를 위해 Bitbucket을 사용하고 git을 사용할 것임을 의미합니다.
BartoNaz

xp-dev의 경우 그러한 회사는 죽을 가능성이 적으므로 코드 호스팅 계획, 가격 등을 변경하거나 다른 회사와 병합 할 수 있습니다. 그러나 그들에게는 돈이 많은 젖소입니다. 또한 귀중한 데이터를 백업 할 것입니다. 그들의 사업은 제자리에 있어야합니다. 3 명의 개발자와 함께 사용하며 코드는 5 개의 다른 컴퓨터에 있으며 xp dev에서 동기화되는 로컬 소스 사본이 항상 있습니다. XP 프로젝트는 프로젝트가 적을 경우 무료입니다.
user613326

1
물론 그렇지 않습니다. 그러나 여전히, 당신은 결코 100 % 확신 할 수 없습니다 ...
BartoNaz

답변:


19

예, git와 같은 DVCS의 장점입니다. bitbucket 또는 github의 상태와 동일한 상태로 여러 개의 다른 repos를 사용할 수 있습니다.

로컬 사본 (컴퓨터의 저장소)도 일반적으로 원격 저장소의 전체 복제본입니다.

여러 리포지토리를 동기화 상태로 유지하기 위해 수행해야 할 유일한 작업은 하나 (일반적으로 오리진 또는 업스트림이라고 함)를 가져 와서 백업 사본으로 푸시하는 것입니다.


11
불행히도 모든 것이 빛나지 않습니다. KDE 근처의 재해에 대한주의 사항을 참조하십시오 . 즉, 백업이 백업 된 서버에서 삭제 된 항목 (분기, 저장소 등)을 삭제 하지 않도록 하십시오 .
Jan Hudec

나는 그것을 올바르게 이해하고 있는지 확실하지 않습니다. 내가 이해하는 한, 밀고 당기는 것은 특정 버전에서 작동합니다. 그러나 작업중 인 컴퓨터에 최신 버전의 코드가 있다고 가정 해 봅시다. 원격 호스트 (Bitbucket, Github 또는 기타)에 git 리포지토리가 있으며 작업중 인 컴퓨터에있는 최신 버전까지 커밋 된 코드 개발 기록이 있습니다 (커밋 된 경우). 그리고 NAS에 비어있는 저장소가 있습니다. 원격 호스트에서 NAS로 코드의 전체 히스토리를 가져 와서 두 곳에서 두 개의 동일한 저장소를 가질 수 있습니까?
BartoNaz

2
원격 저장소를 복제 한 후 정기적으로 모든 업데이트 (모든 브랜치)를 원격 저장소로 가져 오십시오. git clone에는 기록이 포함되어 있으며 최신 버전 만있는 svn checkout과 다릅니다.
Wilbert

11

이 문제에 대한 테스트 솔루션은 다음과 같습니다. Automatic Sync 2 Remote Git Repositories

2 개의 원격 Git 리포지토리를 동기화하기위한 간단한 스크립트

웹에서 동기화 할 간단한 스크립트를 검색했습니다. 2 개의 원격 저장소이지만 많은 사람들이 그것을 찾는 것처럼 보이지만 그러한 스크립트를 찾을 수 없습니다! 그래서 2 개의 간단한 테스트 저장소를 만들고 그러한 스크립트를 테스트하고 빌드하기 시작했습니다.

그러한 스크립트는 무엇을해야합니까?

일반적으로이를 수행하는 단계는 간단합니다. 1. 첫 번째 저장소 복제 1. 두 번째 저장소를 추가 원격 저장소로 추가 1. 두 번째 저장소에있는 모든 항목 가져 오기 1. 업데이트 된 로컬 저장소를 2로 푸시 원격 저장소.

남아있는 문제는-위의 모든 자식 명령에 올바른 스위치는 무엇입니까?

여기에 ...

2repos-sync.sh gisp 스크립트

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $ORIGIN_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git push origin --all
git push origin --tags
git push repo1 --all
git push repo1 --tags

참고 -이 스크립트는 리포지토리 컨텐츠 간의 충돌 사례를 해결하지 않습니다!


대답에서 가장 먼저 할 일은 $ REPO_NAME으로 기존 로컬 디렉토리를 삭제하는 것입니다. 이것은 중요해 보이며 단순히 솔루션을 복사하는 사람들의 데이터 손실을 막을 수 있습니다.
Wilbert

이와 함께 LibGit2 는 이런 종류의 일에 유용합니다.
RubberDuck

0

개인 저장소를 사용하여 모든 리포지토리를 저장하므로 매일 개발하는 동안 밀고 당기는 원본이 하나뿐입니다.

그러나 오픈 소스 프로젝트의 경우 GitHub는 훨씬 활발한 커뮤니티이므로 프로젝트에 대한 커뮤니티 기여를 수락하려면 웹 GitLab의 웹 후크 시스템을 사용하여 서버를 핑하고 GitHub에서 공개 리포지토리를 업데이트합니다.

이를 통해 GitHub를 로컬에서 누군가가 기여할 때 가져올 수있는 또 다른 리모콘으로 취급 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.