GitHub 저장소 백업
다음 요구 사항을 고려할 때 GitHub에서 호스팅되는 git 저장소의 로컬 백업을 만드는 가장 좋은 방법은 무엇입니까? :
로컬 백업은 베어 리포지토리 여야합니다.
백업에는 모든 분기가 포함되어야합니다.
백업을 (점진적으로) 쉽게 업데이트 할 수 있어야합니다.
기본적으로 쉽게 업데이트 할 수있는 완벽한 거울을 원합니다. 따라서 명령
git clone --mirror git://github.com/...
마음에 들지만 내가 알 수있는 한 쉽게 업데이트 할 수는 없습니다 (로컬 백업을 삭제하고 다시 만들어야 함). 또한 git clone에 대한 미러 옵션은 꽤 최근 인 것처럼 보이지만 작업중인 일부 시스템 (약간 이전 버전의 git이 실행 중임)에는 없습니다.
이런 종류의 문제에 대해 권장되는 해결책은 무엇입니까?
미러를 생성하려면 :
git clone --mirror git://github.com/user/project.git
업데이트하려면 :
cd project.git
git remote update
현재 디렉토리를 변경하지 않고 업데이트하려면 :
git --git-dir project.git remote update
모든 요구 사항을 충족 할 수 있을지 모르겠지만 git bundle을 확인할 수 있습니다.
git bundle
이 명령에 대한 지원 제공
git fetch
및git pull
다음, 원래 기계에 아카이브에 개체 및 참조를 포장하여 다른 저장소로 사람들을 가져와 운영하는git fetch
과git pull
어떤 방법으로 아카이브를 이동 한 후를
이 솔루션에 대해 내가 좋아하는 것은 정확히 내가 원하는대로 생성 된 단일 파일입니다.
git bundle
은 git-show-ref로 표시되는 참조 만 패키지합니다. 여기에는 헤드, 태그 및 원격 헤드가 포함됩니다.
machineA$ git bundle create file.bundle master
참고 : Kent Fredric 은 댓글에서 git rev-list
다음과 같은 미묘한 점을 언급합니다 .
--all
의 모든 참조
$GIT_DIR/refs/
가 명령 줄에로 나열된 것처럼 가장<commit>
합니다.
그는 다음과 같이 덧붙입니다.
현재 번들은 커밋의 부모 만 번들
--all
로 제공하므로 모든 번들 ( 마스터의 후손 인 브랜치)을 모두 가져 오도록 지정해야 할 것입니다 .
차이점을 확인하려면 :
$ git bundle create /tmp/foo master
$ git bundle create /tmp/foo-all --all
$ git bundle list-heads /tmp/foo
$ git bundle list-heads /tmp/foo-all
그러나 내가 말할 수있는 한, 그것은 쉬운 업데이트를 허용하지 않습니다 (내 로컬 백업을 삭제하고 다시 만들어야합니다).
그게 무슨 뜻인지 잘 모르겠습니다. 업데이트는 다음과 같이 간단해야합니다.
git fetch
git clone
원격 지점에서 볼 수있는 모든 참조 / 커밋 을 가져와야하기 때문입니다 .
git clone --mirror
[출처]와 크게 다르지 않습니다 git clone --bare
.
유일한 관련 차이점은 속기입니다 git remote add --mirror
( git help add
다른 동작 은 참조 )
정말 걱정된다면 다음과 같이 할 수 있습니다.
git clone --no-hardlinks --mirror $original $dest
어쨌든 동일한 파일 시스템에있는 경우에만 다른 작업을 수행합니다.
그리고 당신이 정말로 편집증 이라면 , 전체 디렉토리를 tar. (gz | bz2)하고 백업 할 수 있습니다.
GitHub 저장소 만 백업해야하는 경우 간단한 Bash 스크립트를 볼 수 있습니다.
https://github.com/ptrofimov/github-backup-sh
당신이 요구하는 것은 git의 제약 내에서 수행하기가 매우 어렵습니다. 문제는 복제 나 가져 오기가 기본적으로 모든 분기를 제공하지 않는다는 것입니다. 이 질문을보십시오 :
- 한 번에 모든 분기를 업데이트하는 방법은 무엇입니까?
여러 분기가있는 저장소를 복제하는 예는 다음과 같습니다.
% git clone -o tufts linux.cs.tufts.edu:/r/ghc/git/experimental.git
Initialized empty Git repository in /usr/local/nr/git/ghc/experimental/.git/
% cd experimental/
% git fetch
% git branch -a
* head
tufts/HEAD
tufts/experimental
tufts/head
tufts/norman
% git branch --track experimental tufts/experimental
Branch experimental set up to track remote branch refs/remotes/tufts/experimental.
% git branch --track norman tufts/norman
...
프로그래밍 방식으로 각 분기를 복제하는 것이 약간 까다 롭다는 것을 알 수 있습니다.
If github provides access to rsync or Unison these are better tools for the job. Otherwise, you'll have to write some scary scripts...
I wrote a ruby script with the help of some others:
https://github.com/walterjwhite/project.configuration/blob/master/scripts/github.com.backup.ruby
That script allows me to download all of my repositories. I use it to periodically make a backup of the projects I am working on.
I hope this helps, feel free to tweak it. I think it has a bug, occasionally, GitHub will timeout and the script doesn't handle that.
ReferenceURL : https://stackoverflow.com/questions/1251713/backup-a-github-repository
'program story' 카테고리의 다른 글
패턴 매칭 대 스위치 설명 (0) | 2020.12.30 |
---|---|
불변성이란 무엇이며 왜 걱정해야합니까? (0) | 2020.12.30 |
python3.3에서 docx를 가져올 때 ImportError : No module named 'exceptions'오류가 있습니다. (0) | 2020.12.29 |
Spring MVC @RestController 및 리디렉션 (0) | 2020.12.29 |
React-Router에서 onEnter가 호출되지 않았습니다. (0) | 2020.12.29 |