모든 분기 및 태그를 포함하여 전체 자식 저장소를 백업하는 간단한 방법이 있습니까?
모든 분기 및 태그를 포함하여 전체 자식 저장소를 백업하는 간단한 방법이 있습니까?
답변:
복제본을 만드는 방법은 무엇입니까?
git clone --mirror other/repo.git
모든 저장소는 원격의 백업입니다.
git branch -a
. 아마도이 방법은 더 분명 할 수 있습니다 : 저장소를 복제 한 후에는 모든 분기를 가져 오지 말고 모든 커밋을 가져옵니다. 지점은 기존 커밋 만 참조합니다.
git clone
모든 것을 다룹니다. (1)은 선택 사항이며 요구 사항은 아닙니다. 결과가 여전히 최적화되어 있으면 백업 (2)은 이미 git 자체에 의해 덮여 있습니다. -내가주고 싶은 요점은 git clone
이미 관련 요점을 다룬 다면 다른 도구가 필요한 것입니까? 나는 또한 선호하지만 git bundle
내 대답이 잘못되었거나 잘못되었다고 생각하지 않습니다. 두 가지 접근 방식을 핫 백업과 콜드 백업으로 볼 수 있습니다.
git bundle
나는 그 방법을 좋아하는데, 하나의 파일 만으로 복사하기가 더 쉽습니다. ProGit : 작은 기쁨의 묶음을
참조하십시오 .
" 어떻게 누군가에게 git 저장소를 이메일로 보낼 수 있습니까? "를 참조하십시오.
git bundle create /tmp/foo-all --all
상세하다 :
git bundle
git show-ref 로 표시되는 참조 만 패키지 합니다. 여기에는 헤드, 태그 및 원격 헤드가 포함됩니다.
사용 된 기초가 목적지에 의해 유지되는 것이 매우 중요합니다.
번들 파일에 대상에 이미있는 오브젝트가 포함되어 있으므로 대상에서 압축을 풀 때 무시되기 때문에주의를 기울여야합니다.
해당 번들을 사용하기 위해 존재하지 않는 폴더를 지정하여 복제 할 수 있습니다 (git repo 외부).
git clone /tmp/foo-all newFolder
git bundle
내 의견에 대한 정답이며 수락 된 것은 아닙니다. 나는 그가 그런 질문을 할 수 있다면 클론 명령을 잘 알고 있다고 생각합니다. 그리고 그것은 덤프가 아니라 클론이기 때문에 분명히 충분하지 않습니다. 덤프는 간단한 사본과는 다른 것들입니다. 예를 들어 : 1) 정상적인 작업을 위해 최적이거나 성능이 뛰어날 필요는 없지만 2) 데이터 손상에 대한 저항과 복 구성이 우수해야합니다. 증분 백업을 위해 쉽게 분할 할 수있는 경우 복사본에 대한 목표는 아닙니다.
git bundle
또는 git clone
얻을 모든 것을 예를 들어, 후크 스크립트를.
git bundle
원격 저장소에 대해 사용할 수 있습니까 ?
다른 답변을 확장하면 이것이 내가하는 일입니다.
저장소를 설정하십시오. git clone --mirror user@server:/url-to-repo.git
그런 다음 git remote update
복제 위치에서 백업을 새로 고치려고 할 때 .
이렇게하면 나중에 추가되는 새 항목을 포함하여 모든 지점과 태그가 백업되지만, 삭제 된 지점은 복제본에서 삭제되지 않습니다 (백업의 경우 좋을 수도 있음).
이것은 원자 적이므로 간단한 사본으로 인한 문제는 없습니다.
http://www.garron.me/en/bits/backup-git-bare-repo.html을 참조 하십시오
KingCrunch 및 VonC 의 훌륭한 답변 확대
나는 둘 다 결합했다.
git clone --mirror git@some.origin/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all
그 후에는 reponame.bundle
쉽게 복사 할 수 있는 파일 이 있습니다. 그런 다음을 사용하여 새로운 일반 git 저장소를 만들 수 있습니다 git clone reponame.bundle reponame
.
참고 git bundle
저장소에 일부 참조 (지점 또는 태그)로 이어질에만 복사 커밋. 따라서 엉킴 커밋은 번들에 저장되지 않습니다.
git bundle create reponame.bundle --all
?
모든 것이 .git
디렉토리에 포함되어 있습니다. 파일과 마찬가지로 프로젝트와 함께 백업하십시오.
copy
또는 cp
명령을 잘 알고 있으며 그의 요구에 부적합하다고 생각 합니다. 또한 그는 베어 저장소를 생각합니다 (복사 할 수는 있지만 완전한 기능을 갖춘 백업은 아니라고 생각합니다).
최소 저장소 크기에서 git-copy 를 사용하여 git repo를 백업 할 수 있습니다 .
git copy /path/to/project /backup/project.repo.backup
그런 다음 프로젝트를 복원 할 수 있습니다 git clone
git clone /backup/project.repo.backup project
git clone --bare
+ 작업에는 많은 작업이 필요합니다 git push --force
.
정답 IMO는 git clone --mirror 입니다. 리포지토리가 완전히 백업됩니다.
Git 복제 미러는 전체 리포지토리, 메모, 헤드, 참조 등을 복제하며 일반적으로 전체 리포지토리를 새 git 서버에 복사하는 데 사용됩니다. 이것은 모든 지점과 모든,은 An 아래로 끌어 전체 저장소를.
git clone --mirror git@example.com/your-repo.git
일반적으로 리포지토리 복제에는 모든 분기가 포함되지 않으며 마스터 만 포함됩니다.
repo 폴더를 복사하면 가져온 분기 만 "복사"됩니다. 기본적으로 마스터 분기 만 또는 이전에 체크 아웃 한 다른 분기입니다.
Git bundle 명령은 또한 원하는 것이 아닙니다. "bundle 명령은 일반적으로 git push 명령을 사용하여 와이어를 통해 푸시되는 모든 것을 바이너리 파일로 패키지하여 누군가에게 이메일로 보내거나 플래시 드라이브에 넣을 수 있습니다. 다른 저장소로 묶지 마십시오. " ( git clone --mirror와 git clone --bare의 차이점은 무엇입니까? )
이 스레드는 git repos의 백업을 수행하는 방법에 대한 통찰력을 얻는 데 매우 도움이되었습니다. 나는 아직도 자신에게 "올바른 방법"(tm)을 찾는 힌트, 정보 또는 결론이 부족하다고 생각합니다. 그러므로 내 생각을 여기에 공유하여 다른 사람들을 돕고 토론을 위해 향상시킬 수 있습니다. 감사.
따라서 원래 질문을 선택하는 것으로 시작하십시오.
그런 다음 일반적인 요구 사항으로 풍부하게하고 사전 설정을 지정하십시오.
"100 %"백업의 관점에서 관점이 다릅니다. 다음은 일반적인 두 가지입니다.
자식은 개발자 도구입니다 통해 이러한 관점을 지원 git clone --mirror
하고 git bundle --all
.
git gc
)git는 개발자 도구이며 관리자에게 맡깁니다. git 구성 및 OS 구성의 백업은 내용의 백업과 분리 된 것으로 보여야합니다.
대부분 백업에 일반적입니다.
git gc --auto
git bundle --all
git bundle verify
있습니다.git clone --mirror
git fsck
있습니다.콜드 복사 백업은 항상 전체 파일 백업을 수행 할 수 있습니다 . git repos에 대한 모든 액세스를 거부 하고 백업을 수행하고 다시 액세스를 허용하십시오.
진행중인 커밋으로 인해 데이터가 손상 될 위험 때문에 활성 저장소로 파일 백업을 수행 할 수 없습니다. 핫 카피는 백업 목적으로 고정 된 활성 저장소 상태를 제공합니다. 진행중인 커밋은 해당 복사본에 영향을 미치지 않습니다. 위에 나열된 것처럼 git의 클론 및 번들 기능은이를 지원하지만 "100 % 관리자"백업의 경우 추가 명령을 통해 몇 가지 작업을 수행해야합니다.
git bundle --all
컨텐츠의 전체 / 증분 덤프 파일을 작성하고 구성 파일을 별도로 복사 / 백업하는 데 사용합니다.git clone --mirror
구성을 개별적으로 , 처리 및 복사 한 다음 미러의 전체 파일 백업을 수행하십시오.
cd /path/to/backupdir/
git clone /path/to/repo
cd /path/to/repo
git remote add backup /path/to/backupdir
git push --set-upstream backup master
이렇게하면 백업이 생성되고 설정이 완료되므로 git push를 사용하여 백업을 업데이트 할 수 있습니다. / path / to / backupdir과 / path / to / repo가 최소한 다른 하드 드라이브인지 확인하십시오. 그렇지 않으면 그렇게하는 것이 그다지 의미가 없습니다.
두 가지 옵션이 있습니다.
git repo 디렉토리 의 tar 는 서버에 repo의 전체 내용이 있으므로 직접 tar 를 사용할 수 있습니다 . 백업하는 동안 누군가 repo 작업을하고있을 가능성이 약간 있습니다.
다음 명령은 서버에있는 것처럼 레포의 베어 클론을 제공하며 문제없이 복제 한 위치의 tar를 취할 수 있습니다.
git clone --bare {your backup local repo} {new location where you want to clone}
내가 아는 한 리포지토리가있는 디렉토리의 사본을 만들 수 있습니다.
cp -r project project-backup
git clone --bare
하면 일관된 스냅 샷이 제공됩니다.