로컬 Git 저장소를 단일 파일로 올바른 방법으로 백업하는 방법은 무엇입니까?

로컬 Git 저장소를 단일 파일로 올바른 방법으로 백업하는 방법은 무엇입니까?

제목이 좀 이상한 것 같아서 먼저 약간의 배경 지식을 살펴보겠습니다.

여러 로컬 git 저장소가 있고 백업을 만들고 싶어했습니다. 나는 두 가지 방법을 생각했습니다. git bundle( tar다른 방법도 많이 있다는 것을 알고 있지만 저장소를 "단일 파일"로 패키지화할 수 있는 "쉬운" 방법을 원합니다)

  • 타르를 사용하세요

내가 시도한 명령은

tar cvf gitrepo.tar gitrepo/

언뜻 보면 작동하지만 어딘가에 추출하면 다음과 같은 이상한 일이 발생합니다.

git config(.git/config에 있는 것)는 tar에 있는 것과 다른 것처럼 보이지만 "이전" 버전입니다. 예: 구성을 편집하고 압축한 다음 압축을 풀면 어떤 이유로든 구성에 최신 변경 사항이 적용되지 않습니다.

그 외에는 다른 모든 것이 작동하는 것 같습니다. 하지만 .git 폴더의 다른 파일에 구성 파일과 유사한 이상한 점이 있는지 확인하지는 않았습니다.

  • git 번들 사용

내가 시도한 두 가지 명령은 다음과 같습니다.

git bundle create repo.bundle

그리고

git bundle create repo.bundle --all

첫 번째 명령은 처음에는 작동하는 것처럼 보였지만 해당 플래그를 사용하지 않았기 때문에 모든 분기가 없다는 것을 알았습니다 --all.

두 번째 명령은 (다시) 언뜻 보면 작동하지만, git clone 해당 패키지를 실행하면 결국 포함되지 않게 됩니다.모든 파일번들로 포함되지 않은/원본 로컬 저장소에서 커밋...

"누락된 파일"이 .git에 있다고 생각했기 때문에 거기에서 가장 큰 파일을 찾아 .git/objects/pack에서 파일을 찾았습니다... 그래서 다음을 사용하여 압축을 풀었습니다.

cd "$@"/.git/objects/pack ; mkdir ~/SAMPLE; mv *.pack ~/SAMPLE; git unpack-objects < ~/SAMPLE/*.pack; rm -rf ~/SAMPLE

$@git 패키지에서 복제된 로컬 저장소의 이름입니다. 위의 문제를 해결하지는 못했지만 원래 저장소에는 파일이 여전히 누락되어 있지만 커밋 기록 중 일부가 복원된 것을 확인했습니다.

그렇다면 파일에 대한 최신 변경 사항을 유지하고 손실되지 않으면서 로컬 git 저장소(가급적 단일 파일)를 적절하게 백업하는 방법이 혼란스럽습니까? (예: 모든 커밋 내역, 분기 등)

답변1

추출하기 전에 tar를 옮기면 tar가 예상대로 작동하는 것 같습니다.

mv gitrepo.tar otherdir/
cd otherdir ; tar xvf gitrepo.tar

대안으로 zip은 아카이브를 먼저 이동하지 않고도 작동하는 것 같습니다.

zip -Zs -r -FS gitrepo.zip gitrepo/

위의 코드는 압축 없이 zip 압축을 수행합니다.

관련 정보