모든 git 창고 백업
개요
간단한 linux 명령 D:\드라이브의 전부만 사용합니다.전자:\git 창고git clone을 드라이브에 넣습니다.
모티프
내장된 D:\드라이브에 많은 항목을 저장했습니다.모든 프로젝트는 단독git창고로 역사 관리를 진행한다.번거로운 것은git창고가 각양각색의 목록에 분산되어 어디에 무엇이 있는지 전혀 모른다는 것이다.이 경우 E:\외부 드라이브를 연결합니다. 모든 창고를bare 창고로 백업하고 싶습니다.다행히도 WSL2가 설치되어 있고 리눅스 명령은 사용할 수 있는 상태여서 그걸 사용했습니다.
특징.
주의
명령 프로그램
모두 14단계
명령만 간결하게 표시합니다(자세한 설명은 아래 시간 참조).
0. 작업 디렉토리
mkdir workdirgitbash
cd workdirgitbash
1. 변수 설정(소스 복제/대상 복제)
$SRCVAR= 백업 소스
$DSTVAR = 백업 대상
예:
SRCVAR=/mnt/d/
DSTVAR=/mnt/e/backup202204/
오류 메시지 설정 EAAMSG=$(echo "EAAOA! " | sed "s/A/R/g")
2. 신뢰성 확인
echo $SRCVAR | grep "[^a-zA-Z0-9/_-]" -v || echo "$EAAMSG: Unsupported Pathname"
echo $DSTVAR | grep "[^a-zA-Z0-9/_-]" -v || echo "$EAAMSG: Unsupported Pathname"
mkdir -p $DSTVAR
[ -z "$(ls -A $DSTVAR)" ] || echo "$EAAMSG: Destination Not Empty"
오류가 표시되면 적절하게 조정하십시오.3. 이름이'.git'인 디렉토리 검색
find $SRCVAR -type d -name .git > repos.txt
* 검색에 시간이 걸릴 수 있습니다.4. 복제본 창고 목록 만들기
cat repos.txt | sed "s/.git$//" > srclist.txt
5. 복사 대상 디렉토리 이름 작성
cat srclist.txt | sed "s/^${SRCVAR//'/'/'\/'}/${DSTVAR//'/'/'\/'}\//" > dstlist.txt
6. 신뢰성 확인
[ -z "$(grep '[^a-zA-Z0-9/_-]' srclist.txt)" ] || echo "$EAAMSG: Unsupported Pathname"
[ -z "$(grep '[^a-zA-Z0-9/_-]' dstlist.txt)" ] || echo "$EAAMSG: Unsupported Pathname"
7. 작성은 Giit 창고의 최신 명령을 확인하는 데 사용됩니다
cat srclist.txt | sed 's/.*/pushd/' > statuschk0.txt
cat srclist.txt | sed 's/.*/; [ -z "$(git status -s)" ] || echo "$EAATAG : work tree not clean"/' > statuschk2.txt
cat srclist.txt | sed 's/.*/; popd;/' > statuschk3.txt
paste statuschk0.txt srclist.txt statuschk2.txt statuschk3.txt > statuschk.sh
8. Giit 창고가 최신 상태인지 확인
chmod u+x statuschk.sh
./statuschk.sh
* 오류가 표시되면 적절하게 조정됩니다.● Giit의 보안 강화사양 변경 영향.
fatal: unsafe repository ('/mnt/d/repo1' is owned by someone else)
오류를 피하는 방법으로 루트 권한을 사용하여 실행하는 방법이 있습니다sudo bash statuschk.sh
9. 빈 디렉토리 이름을 만드는 데 사용되는 명령 작성
cat dstlist.txt | sed "s/^/mkdir -p /" > mkdircommand.sh
10. 복제 소스 목록과 복제 대상 목록을 한 줄씩 조합
paste srclist.txt dstlist.txt > pathes.txt
11.git clone용 명령 작성
cat pathes.txt | sed "s/^/git clone --bare /" > cloneall.sh
12. 전체 스크립트 작성
paste -d "; " mkdircommand.sh cloneall.sh > totalcommand.sh
13. 스크립트에 실행 가능 플래그
chmod u+x totalcommand.sh
14. 집행
./totalcommand.sh
권한이 필요한 경우 대체:sudo ./totalcommand.sh
상세히 설명하다
시간 나면 써.프롬프트만
・각 단계에서cat로 파일을 표시하고 눈으로 확인합니다.
cat dstlist.txt
역사를 갱신하다
2022-04-16: 디렉토리 이름 입력 수정
2022-04-16:Git의 보안 강화사양 변경에 대응
최후
제안이 있거나 완비되지 않은 곳이나 다른 문제가 있으면 마음대로 논평해 주세요.
Reference
이 문제에 관하여(모든 git 창고 백업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kc3takashi/articles/72ec73d0104497텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)