/home
내 디렉터리의 자동 백업을 수행하려고 합니다. 이론적으로는 cronjob에서 실행하면 간단합니다.
cd /home
git add .
git commit -m "nightly backup"
git push
그 중 push는 변경 사항을 원격 백업 서버에 push하는 것입니다.
내가 가진 문제는 /home
디렉토리에 git repo가 있는 경우입니다 /home/tom/projects/myproject/.git
. 백업 작업이 실행되고 모든 변경 사항이 서버에 푸시됩니다. 그러나 저장소가 포함된 서버의 모든 디렉터리는 이제 비어 있습니다.
나는 이것을 깨닫는다할 수 있다하위 모듈에 의해 처리됩니다. 그러나 여기에는 몇 가지 단점이 있습니다.
각 하위 모듈은 상위 저장소에 등록되어야 합니다. (이는 자동화될 수 있지만 각 디렉터리로 반복해서 모든 cron 실행 시 하위 모듈을 추가하는 것은 약간의 고통이 될 것입니다.)
하위 모듈의 커밋되지 않은 변경 사항은 백업되지 않습니다. 이는 백업에 이상적인 동작이 아닙니다. 다른 곳에서 추적되는지 여부에 관계없이 현재 모든 파일의 실시간 스냅샷을 원합니다.
이 작업을 수행할 수 있는 다른 도구(예: rsync)가 있다는 것을 알고 있지만 시간이 지남에 따라 git이 변경 사항을 추적하는 것이 좋을 것입니다. git이 다른 저장소를 일반 파일(.git 디렉토리 포함!)로 처리하도록 하는 방법이 있습니까?
이 문제에 대한 해결책은 cron에서 다음과 같은 것을 실행하는 것입니다.
- 모든 하위 디렉터리로 재귀
- .git 폴더 찾기
- .git의 이름을 다른 이름으로 바꿉니다.
- 그런 다음 표준 추가/커밋/푸시를 실행합니다.
이 방법은 작동하지만 복원 프로세스 중에 모든 .git 폴더의 이름을 다시 바꿔야 합니다. 이러한 오버헤드 없이 이를 달성할 수 있는 방법이 있습니까?
답변1
Git에 대한 Git은 약간 미쳤습니다 :)
- gitignore 디렉터리에 저장소를 추가해 보세요.
- 커밋하기 전에 저장소를 보관하려면 cron 스크립트 명령을 추가하세요.
- (선택 사항) 포함된 모든 저장소에 대한 자동 커밋/푸시를 설정합니다.
IMHO, 1과 2가 당신에게 좋습니다.
cd /home
tar -zcvf my-gits-backup.tar.gz path/to/git/projects
git add .
git commit -m "nightly backup"
git push
답변2
나는 또한 많은 git 저장소를 가지고 있으며 로그아웃, 재부팅 또는 종료 시 이를 백업합니다.동기화내 클라우드로. 이것이 당신이 찾을 수 있는 가장 간단한 해결책입니다.
나도 들어본 적 있어부푸(https://github.com/bup/bup), 하지만 한번도 사용해본 적이 없어서 얼마나 효과가 있는지는 말씀드릴 수 없습니다.
나 자신은 git을 사용하여 여러 git 저장소를 백업하지 않습니다(기록을 백업할 필요가 없기 때문에). 내가 관심 있는 유일한 기록은 이미 git 저장소에 있습니다!
답변3
내 의견이 직접적인 대답은 아니라는 것을 알고 있지만... 다음 방법(또는/또는)으로 백업 방법을 재구성하는 것이 좋습니다.
- 모든 하위 프로젝트를 포함하는 "기본" 저장소를 갖습니다. 즉, /home에 저장소가 있다는 의미입니다. 처음에는 이상해 보일 수 있지만 하위 프로젝트(하위 디렉터리)의 복잡성에 따라 다르며 단순하고 적극적으로 개발되지 않은 작업에 작동할 수 있습니다.
- 특별한 백업 솔루션을 사용하여 완전한 백업을 유지하려는 생각을 포기하십시오(rsync는 그 중 하나일 뿐이며 가장 중요한 솔루션은 아닙니다). "git과 관련된 모든 것을 백업해야 하는 이유는 무엇입니까?" git 이외의 방식으로 유지 관리해야 하는 더 높은 수준의 아키텍처로 생각하는 것이 더 좋습니다(git은 본질적인 것입니다). 여기서 내 말은, 주된 이유가 "하지만 git이 일정 기간 동안 변경 사항을 추적하도록 하면 좋을 것입니다."변경 사항을 특정 지점으로 롤백하는 기능입니다. 그렇다면 Git은 오버헤드이며 필요한 솔루션이 아닙니다. 차등/증분 + 전체 백업을 위한 특수 소프트웨어를 사용합니다(모든 ".git" 폴더를 제외할 수 있음). 올바른 접근 방식.