bash로 Git 워크플로우 간소화

4416 단어 gitbashshell

소개



일상적인 github 작업 흐름에 대해 생각해 보십시오. 코드를 마무리하고 모든 것이 제대로 작동하는지 확인한 다음 터미널을 엽니다. 그러면 다음과 같이 됩니다.
  • git pull
  • git stage . 또는 git add .
  • git commit
  • 커밋 메시지를 입력하고 :x!를 눌러 종료합니다
  • .
  • git push

  • 또는 IDE에서 git GUI를 사용하는 경우 여러 버튼을 클릭하여 Github/Gitlab/Gitwhatever 리포지토리로 전송된 변경 사항을 가져옵니다.
    ohmyzsh를 설치하고 많은 git action(git commit 대신 gc, git push 대신 gp 등)에 대해 짧은 명령을 실행할 수 있지만 여전히 Github에 커밋하는 과정을 매우.. .무능한. 정말 매번 :x!를 써야 하나요? 그리고 버튼을 클릭하기 위해 커서를 움직이는 것은 직선 타이핑보다 항상 느립니다. 어떻게 하면 이것을 더 빠르고 오류 발생 가능성을 줄일 수 있습니까?

    배쉬를 입력



    친구들과 이야기를 나누다가 bash에 대해 알게 되었습니다. bash 파일(확장자.sh )은 프로그래밍 언어를 git 명령과 같은 기본 셸 명령과 결합합니다!

    git 커밋을 수행하기 위해 bash 스크립트를 작성하려면 다음을 수행해야 합니다.
  • git pull
  • cd 내 자식 저장소
  • 내 입력 수락
  • 파일을 준비하고 내 입력을 메시지로 커밋합니다.

  • 그래서 나는 몇 가지 빠른 검색을 수행하고 man page for read 을 찾았고 변수 이름 앞에 $를 입력하는 변수를 사용한다는 것도 발견했습니다.
    read myvar 와 같이 작성하면 사용자 입력을 얻을 수 있으며 myvar 를 작성하여 $myvar 를 사용할 수 있습니다. 이제 스크립트를 시작했습니다.

    echo "Enter your commit message below:"
    read myvar
    echo "Your commit message is:"
    echo $myvar
    

    선택적 플래그를 사용하여 문자 입력을 제한할 수도 있습니다. 플래그-n를 사용하여 문자 입력을 1로 설정하여 멋진y/n 항목을 만들 수 있었습니다.

    echo "Would you like to commit? [y/n]"
    read -n 1 -s input
    

    그리고 -s 플래그는 읽기를 "무음"으로 만들어서 누른 문자를 출력하지 않습니다.

    시원한! 이제 이것을 내 스크립트로 작업할 수 있다고 생각했습니다. 커밋 메시지를 표시한 다음 커밋 의도를 확인합니다. 그래서 if/else 블록을 작성하는 방법을 찾아봤습니다.

    if/else 블록



    아, if/else 문 - 초보자 프로그래머와 IFTTT 같은 것의 기초입니다. bash에서 if/else 블록은 다음과 같습니다.

    if [statement];
     then
      # do something
    elif [statement];
     then # do something
    else 
     # do something - no then! 
    fi 
    

    여기에서 "else 근처에 예기치 않은 구문 오류가 발생했습니다"와 같은 오류를 찾기 시작했습니다. 뭐?

    그래서 광범위한 검색 끝에 다음을 알아 냈습니다.

    myvar = "foo"
    myvar="foo"
    

    위의 스크립트에 차이가 있습니까? 파이썬과 자바스크립트에는 공백이 없습니다. 공백은 중요하지 않습니다.
    하지만. 껍질에...
    공간이 중요합니다.

    이것은 저에게 큰 좌절의 원인이었습니다. 변수를 선언하면 공백을 가질 수 없지만 변수를 비교하려면 공백이 필요하다는 것이 밝혀졌습니다. 그것의 의미는
    if [ myvar = "foo" ];
    다음과 다릅니다:
    if [ myvar="foo" ];
    🤦‍♀️
    나는 이것을 알아내는 데 20 분을 보냈습니다. 이 기사를 읽으면 같은 일을 피할 수 있기를 바랍니다!

    멍청한 실수는 제쳐두고, if/else 문은 매우 간단했습니다. 입력이 y 인 경우 커밋하고, n 인 경우 종료하고 "프로세스를 중단했습니다."라고 말하고 둘 중 하나가 아니면 종료합니다. "귀하의 입력은 y 또는 n이 아닙니다"라고 말합니다.

    이전 코드 줄read -n 1 -s input을 기억하고 입력을 $input로 사용할 수 있음을 기억합니다.



    그리고 thens가 중요하다는 것을 기억하십시오! then 문에 대한 elif를 잊어버렸고 더 많은 두통을 일으켰습니다.

    최종 제품은 다음과 같습니다.

    #!/bin/bash
    cd vanillanimate
    git pull
    echo "Enter your commit message below:"
    read myvar
    echo "Your commit message is:"
    echo $myvar
    echo "Would you like to commit? [y/n]"
    read -n 1 -s input
    
    if [ $input = "y" ];
     then 
      git stage .
      git commit -m "$myvar"
      git push
      exit 0
    elif [ $input = "n" ];
     then
      echo "process abort exit code 0"
      exit 0
    else
      echo "process abort exit code 1 - your input $input is not y or n"
      exit 1
    fi
    

    이것을 더 좋게 만들려면 스크립트가 하드 코딩된 경로 대신 repo에 대한 경로를 먼저 요청하도록 만들 수 있습니다. 그러나 그것은 효과가 있었고 약 1시간 밖에 걸리지 않았습니다. 그리고 그것은 효과가 있었다!



    어쨌든 읽어 주셔서 감사합니다. 개발자는 배움을 멈추지 않는다는 점을 기억하세요.
    생각? 오타를 찾았습니까? 코멘트를 남겨주세요!

    좋은 웹페이지 즐겨찾기