GitHub Issue를 기반으로 새 브랜치 생성하기 - Alias 활용 방법

TL:DR

GitHub 프로젝트에서 작업할 때, issue를 사용하여 작업 항목을 추적하고 관리하기로 마음 먹었다. issue와 연관된 작업을 수행하기 위해 새로운 브랜치를 만들어야 하는데 이 과정을 더욱 편하게 하기 위해 alias를 사용하여 GitHub issue를 기반으로 새로운 브랜치를 만들도록 했다.

alt text

필수 설치 사항

  • GitHub CLI : GitHub의 기능을 커맨드 라인에서 사용할 수 있도록 도와주는 도구.
  • fzf : 터미널에서 상호작용적인 검색을 제공하는 유용한 도구.
  • Git

git alias 설정

먼저, 다음과 같이 .gitconfig 파일에 alias를 정의한다.

1
2
[alias]
icb = "!f() { gh issue list | fzf --ansi | awk -F'\\t' '{gsub(\" \", \"_\", $3); print $1\"-\"$3}' | xargs -I {} git checkout -b {}; }; f"

git icb 명령을 실행하면, GitHub issue 목록을 검색하고 선택한 issue를 기반으로 브랜치를 만들 수 있다.

코드 설명

이 코드는 다음과 같은 작업을 수행한다.

  1. gh issue list 명령을 사용하여 현재 GitHub 프로젝트의 issue 목록을 가져옵니다.

  2. fzf를 사용하여 사용자에게 issue 목록을 선택하도록 합니다.

  3. 사용자가 선택한 issue의 번호와 제목을 awk를 사용하여 적절한 형식으로 가공합니다.

    이 단계에서는 awk 명령을 사용하여 사용자가 선택한 issue의 번호와 제목을 가공한다. -F 옵션을 사용하여 입력 필드 구분자를 설정하고, $1$3를 사용하여 선택한 issue의 번호와 제목에 접근했다. 그런 다음, gsub() 함수를 사용하여 제목에서 공백을 밑줄(_)로 대체하여 브랜치 이름으로 사용할 수 있도록 했다. 최종적으로, print 함수를 사용하여 적절한 형식으로 가공된 문자열을 출력하도록 했다.

  4. 최종적으로 git checkout -b 명령을 사용하여 선택한 issue를 기반으로 새로운 브랜치를 만든다.

여담

사실 커맨드 라인에 다음과 같은 명령어를 쳐도 된다.

1
gh issue list | fzf --ansi | awk -F'\t' '{gsub(" ", "_", $3); print $1"-"$3}' | xargs -I {} git checkout -b {}

하지만 이럴 경우 너무 길고, 불편하기 때문에 git alias에 등록하고 했다. git alias를 사용하면 내가 원하는 축약된 이름으로 위의 명령어를 사용할 수 있다고 생각했기 때문이다.

하지만 git alias에서 이 명령어가 통하지 않았다. ㅠㅠ 여기저기 찾아보고 ai의 도움도 받았다.

여기서(링크) 함수를 선언 후 사용할 수 있다고 했길래, f()라는 함수로 감싸서 실행시켰다.

그 다음 문제점은 바로 터미널에서 실행했을 때는 상관없었지만, alias 파일에 등록할 때는 " "로 감싸야했다. 하지만 나는 " "를 사용했기 때문에 꼬이기 시작한 것이다. 이부분에 대해서는 \를 사용하면 해결된다는 것을 알기 때문에 쉽게 해결할 수 있었다. c/c++ 코딩하면서 얻은 경험치가 여기서 사용이 되다니! 아무튼 \""가 문자열의 일부라는 것을 알려주는 것이기에 되는 것이다.

그 외에 다른 명령어들은 chat gpt한테 물어본 후 함수를 알고 그 함수를 이것저것 테스트하면서 내가 원하는 형식으로 만들 수 있게 되었다. 아마 수십번 테스트 한 것이다. 언제 한번 본격적으로 배워야하는데 미루고 있다.

위에는 살짝 가식은 섞은 것이고, 진짜 이유는 맥북에 모니터를 연결하지 못할 경우, 크롬 켰다, vscode 켰다 하는게 귀찮아서 CLI로 해결하자는 마음이 거대해졌기 때문이다.

그리고 fzf를 사용해보고, 왠지 모르게 나의 도전욕구를 건드리고 있다. 많은 아이디어를 생각나게 하는 것은 오랜만인걸. 결과도 바로바로 볼 수 있어서 좋다.

이만 여담은 마치고, 또 재미있거나 유용한 것 만들면 다시 나타날 것이다.