![로컬 Git 저장소를 단일 파일로 올바른 방법으로 백업하는 방법은 무엇입니까?](https://linux55.com/image/189775/%EB%A1%9C%EC%BB%AC%20Git%20%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A5%BC%20%EB%8B%A8%EC%9D%BC%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%98%AC%EB%B0%94%EB%A5%B8%20%EB%B0%A9%EB%B2%95%EC%9C%BC%EB%A1%9C%20%EB%B0%B1%EC%97%85%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
제목이 좀 이상한 것 같아서 먼저 약간의 배경 지식을 살펴보겠습니다.
여러 로컬 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 압축을 수행합니다.