bash로 Git 워크플로우 간소화
소개
일상적인 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시간 밖에 걸리지 않았습니다. 그리고 그것은 효과가 있었다!
어쨌든 읽어 주셔서 감사합니다. 개발자는 배움을 멈추지 않는다는 점을 기억하세요.
생각? 오타를 찾았습니까? 코멘트를 남겨주세요!
Reference
이 문제에 관하여(bash로 Git 워크플로우 간소화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/carlyraejepsenstan/streamlining-my-git-workflow-with-bash-11l8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)