모든 git 창고 백업

10150 단어 GitBashtech

개요


간단한 linux 명령 D:\드라이브의 전부만 사용합니다.전자:\git 창고git clone을 드라이브에 넣습니다.

모티프


내장된 D:\드라이브에 많은 항목을 저장했습니다.모든 프로젝트는 단독git창고로 역사 관리를 진행한다.번거로운 것은git창고가 각양각색의 목록에 분산되어 어디에 무엇이 있는지 전혀 모른다는 것이다.이 경우 E:\외부 드라이브를 연결합니다. 모든 창고를bare 창고로 백업하고 싶습니다.다행히도 WSL2가 설치되어 있고 리눅스 명령은 사용할 수 있는 상태여서 그걸 사용했습니다.

특징.

  • 한 걸음 한 걸음 간단한 명령으로 집행한다.
  • 각 단계의 실행 결과를 작업 디렉토리에 파일로 저장합니다.나중에 확인하기 쉬워요.
  • 기본 Linux 명령으로만 구성됩니다.
  • 주의

  • 창고 경로에 공백 문자, 기호 문자, 일본어 창고 이름 등이 있을 때 실패할 수 있습니다.자모와 숫자만 사용하는 디렉터리 이름은 나무랄 데가 없다.창고에 있는 다국어 파일 이름은 괜찮을 거예요.
  • 오류 처리 등 최소한.예상치 못한 오류로 인해 실패할 수 있습니다.각 단계가 순조롭게 돌아가는지 확인하는 것을 건의합니다.
  • 명령 프로그램


    모두 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의 보안 강화사양 변경에 대응

    최후


    제안이 있거나 완비되지 않은 곳이나 다른 문제가 있으면 마음대로 논평해 주세요.

    좋은 웹페이지 즐겨찾기