2017-01-18 4 views
0

작업 저장소를 만들지 않고 모든 지사를 반복하고 모든 헤드 개정판을 기록하지 않고 이전 git 번들이 작성된 이후에 변경 사항이 커밋되었는지 확인하는 방법은 무엇입니까?업스트림 git 저장소가 언제 수정되었는지 확인하는 방법 - 백업 생성하기

내가 GIT에서 발견 한 짧은 폭포 중 하나는 기업에서 사용하기에 적합한 백업 지원입니다. 엔터프라이즈는 오픈 소스 개발과 달리 항상 1) 신뢰할 수있는 저장소와 2) 대용량 데이터를 처리하는 백업 시스템이 있습니다. 따라서 1) 매우 자주 백업하고 2) 새로운 변경 사항이있을 때만 백업 프로세스를 실행하는 동기가 있습니다. 내 문제는 # 2에 대한 해결책을 찾는 것입니다.

내 아카이브를 만드는 데 git bundle을 사용하고 있지만 이전 백업 이후에 새로운 변경 사항이 커밋되었는지 여부를 결정하는 결정적인 방법을 찾지 못했습니다.

git rev-list에 대한 옵션 조합을 찾아 마지막 번들 이후 새 커밋 ID를 나열하려했지만 실패했습니다. 이 주제에 대한 쿼리를 사용하여 작성 아주 좋은 backup script 계시 :

git -C "${path}" rev-parse --short=10 HEAD 

이 커밋 ID로 번들을 표시 할 수 있습니다. 이 솔루션은 다른 브랜치가 업데이트되어 업스트림 저장소의 HEAD 개정판을 변경하지 않고 git 저장소의 스냅 샷을 부적절하게 설명합니다.

나는 --max-age=<lastbackup epoch>을 사용하여 보았지만 개발자가 백업을 실행 한 후 이전 변경 사항을 적용 할 수 있음을 빠르게 알았으며 커밋 날짜가 변경되지 않았으므로 결과가 이전보다 오래되었음을 알게되었습니다. 마지막 백업 날짜 및 따라서 백업이 트리거되지 않습니다.

내가 지금까지 가지고있는 가장 좋은 방법은 다음과 같습니다

다른 지점에서 새로운 버전을 캡처 않지만, 심지어 새로운 이후에 다른 가지에 수정을보고 계속
git -C ${repo} rev-list -a --branches ${prev_commit}..HEAD 

은 HEAD로 만들어졌다 커밋.

아직 증분 백업을 살펴 ​​보지 못했지만, 검증을 위해 서버에 베어 리포 지 토리를 유지하기를 원할 때 작업중인 리포지토리를 만들고 관리해야합니다.

또한 "*"를 제거하기 위해 git branch 옵션을 찾지 못했기 때문에 스크립팅을위한 브랜치의 깨끗한 목록을 제공 할 것입니다.

다른 기업에서 리포지토리를 백업하는 작업은 무엇입니까?

+1

GitHub 또는 Bitbucket과 같은 Git 제공 업체를 사용하고 있습니까? 이 두 가지 모두 AFAIK 장면에서 데이터를 백업합니다. –

+0

백업 전략에 대해 언급하지 않고서는 'git rev-list'가 잘못된 도구라는 점에 유의할 것입니다. 'git for-each-ref'를 사용하여 일부 또는 모든 참조의 현재 값을 얻습니다. – torek

+0

@TimBiegeleisen 서비스 공급자를 사용하는 것은 옵션이 아닙니다. 기업, IP 등을 생각하십시오. –

답변

0

대신 git -C "${path}" rev-parse --short=10 --branches을 사용할 수 있습니다. 출력이 끝나면 fatal: Needed a single revision이 표시되지만 업데이트 된 각 분기에 대한 최신 커밋을 표시 할 수도 있습니다.

git을 사용하여 버전 제어를 수행 할 때 git 서버 또는 제 3 자 호스팅 서버 (예 : github, bitbucket 등) 만 있으면 다른 버전을 관리 할 수 ​​있습니다. 정말 편리하고 시간을 절약 할 수 있으며 버전이 무엇인지 걱정할 필요가 없습니다. 이점은 커밋 기록이 손실 될 수 없기 때문에 더 이상 아카이브를 수행 할 필요가 없습니다.

+0

'--branches'는 각 분기 이름에 대한 현재 객체 ID를 가져 오며 (이 OID는 반드시 커밋 됨) 태그에 대한 OID를 얻지는 않습니다 (주석이 달린 태그 일 수 있으므로 태그 OID와 필링 된 OID 태그). 실제로 모든 것이 * 모든 것을 저장하는 것이 목표라면, 태그가 지사 이름을 보호하지 않는 객체를 보호 할 수 있다는 사실을 고려해야합니다. (예를 들어 필수적인 GPG 서명을 포함하는 blob에서 태그를 가리킬 수 있습니다.) 또한 지점 이름 공간에없는 커밋 인 노트와 관련 될 수 있습니다. – torek

+0

고마워,하지만 엔터프라이즈 솔루션을 찾고 있는데 github을 사용하거나 bitbucket 서비스는 옵션이 아닙니다. 이 서비스는 어떻게 git repos의 백업을 제공합니까? 아니면 일반 디스크 (넷 어플라이언스) 백업에 의존하고 있습니까? –

+0

github 또는 bitbucket을 사용하는 경우 백업 할 필요가 없습니다. 그들은 서버에 repos를 저장합니다. 사용자가해야 할 일은 지역에 repo를 복제하고 필요에 따라 다른 버전으로 체크 아웃하는 것입니다. –