program story

GitHub 저장소 백업

inputbox 2020. 12. 30. 08:07
반응형

GitHub 저장소 백업


다음 요구 사항을 고려할 때 GitHub에서 호스팅되는 git 저장소의 로컬 백업을 만드는 가장 좋은 방법은 무엇입니까? :

  1. 로컬 백업은 베어 리포지토리 여야합니다.

  2. 백업에는 모든 분기가 포함되어야합니다.

  3. 백업을 (점진적으로) 쉽게 업데이트 할 수 있어야합니다.

기본적으로 쉽게 업데이트 할 수있는 완벽한 거울을 원합니다. 따라서 명령

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 fetchgit pull다음, 원래 기계에 아카이브에 개체 및 참조를 포장하여 다른 저장소로 사람들을 가져와 운영하는 git fetchgit 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

반응형