(3D)Dev Deep Dive/TroubleShootings

[Dev Setting, yarn, husky] Git Commit이 무언가에 막혀서 안된다면?

  • -
728x90

상황 설명

Project: HQRoutine

IDE: Visual Studio Code

Environment: Mac M1(Apple Sillicon)

상황: 맥북 초기화 이후 Project 리팩토링 중 작업 branch에서 git pull origin develop을 할 때 아래와 같은 문제 발생

사실 이건 Mac을 산 지 얼마 되지 않았을 때에도 발생했던 문제라서 이렇게 기록을 남겨두면 좋겠다 싶었습니다.

 


1st Trying - yarn 다시 설치해 보기

Git log 상태

2023-06-03 23:05:13.974 [info] > git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file - [32ms]
2023-06-03 23:05:13.974 [info] .husky/pre-commit: line 4: yarn: command not found
husky - pre-commit hook exited with code 127 (error)
husky - command not found in PATH=/Library/Developer/CommandLineTools/usr/libexec/git-core:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin
2023-06-03 23:05:13.986 [info] > git config --get-all user.name [11ms]
2023-06-03 23:05:13.996 [info] > git config --get-all user.email [9ms]
2023-06-03 23:05:14.007 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/chore/89 refs/remotes/chore/89 [10ms]
2023-06-03 23:05:14.019 [info] > git status -z -uall [12ms]

 

git-error

> git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file -
.husky/pre-commit: line 4: yarn: command not found
husky - pre-commit hook exited with code 127 (error)
husky - command not found in PATH=/Library/Developer/CommandLineTools/usr/libexec/git-core:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin

 

이걸 바탕으로 과연 무슨 문제가 발생한 건지 알아보았습니다.

 

위의 오류 메시지들은 `husky`의 pre-commit hook이 `yarn` 명령을 찾지 못해서 발생한 것입니다.

이 문제는 PATH 설정에 yarn이 포함되어 있지 않아서 발생할 수 있습니다.

 

다음은 이 문제를 해결하는 몇 가지 방법입니다

1. Yarn 설치 확인

먼저 yarn이 제대로 설치되어 있는지 확인합니다.

터미널에서 `yarn --version`을 실행하여 yarn이 설치되어 있는지 확인합니다.

2. PATH 설정 확인

`yarn`이 설치되어 있음에도 불구하고 해당 오류가 발생한다면, 시스템의 `PATH`에 `yarn`이 제대로 설정되어 있는지 확인해야 합니다.

`echo $PATH`를 실행하여 현재 PATH를 확인할 수 있습니다.

이 명령의 결과에 yarn의 경로가 포함되어 있는지 확인하세요.

만약 yarn의 경로가 없다면, 적절한 위치에 yarn의 경로를 추가해야 합니다.

이를 위해서는 셸의 설정 파일(`. bashrc`, `. zshrc`, `. bash_profile` 등)을 수정해야 할 수 있습니다.

3. husky 설치 확인 및 재설치

`husky`가 제대로 설치되어 있지 않은 경우에도 이런 문제가 발생할 수 있습니다.

 

`husky`를 제대로 설치하려면 다음 명령을 실행합니다

yarn add husky --dev
yarn husky install

 

VSCode에서 터미널을 열고 싶다면 (Mac) control + shift + `를 누르면 됩니다.

 

그리고, pre-commit hook을 다시 설정합니다

yarn husky add .husky/pre-commit 'yarn test'

 

실행 결과

 


 

2nd Trying - VS Code 재시작

위의 단계를 따라도 문제가 해결되지 않았습니다.

 

이 문제는 Git hook이 실행될 때 PATH 설정에 yarn이 포함되어 있지 않아서 발생하는 것 같습니다.

특히 VS Code에서 이를 실행할 때 발생하는 문제일 수 있는데, 이는 VSCode의 터미널이 별도의 셸 세션을 사용하며, 때로는 기본 셸과 다른 PATH 설정을 가질 수 있기 때문입니다.

 

VS Code 재시작

가끔 VS Code는 새로 설치된 도구를 즉시 인식하지 못하는 경우가 있습니다.

VS Code를 완전히 닫았다가 다시 열어보았습니다.

 

완전히 종료하고 갔다 오니 제일 아래에 새로운 변경 사항이 있었습니다.

 

혹시나 하는 마음에 이를 모두 스테이지하고 커밋을 눌러보았습니다.

뭔가 진행된 것이라고 생각하면 되겠죠? 아까랑은 다른 오류이기에 진전은 있는 것 같습니다

 


 

3rd Trying - 확장 프로그램 설치

git log

2023-06-03 23:26:01.263 [info] > git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file - [159ms]
2023-06-03 23:26:01.263 [info] yarn run v1.22.19
error Command "formatyarn" not found.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
husky - pre-commit hook exited with code 1 (error)
2023-06-03 23:26:01.273 [info] > git config --get-all user.name [9ms]
2023-06-03 23:26:01.282 [info] > git config --get-all user.email [9ms]
2023-06-03 23:26:01.293 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/chore/89 refs/remotes/chore/89 [10ms]
2023-06-03 23:26:01.306 [info] > git status -z -uall [12ms]

 

git-error

> git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file -
yarn run v1.22.19
error Command "formatyarn" not found.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
husky - pre-commit hook exited with code 1 (error)

 

이 로그들을 바탕으로 다시 한번 찾아보도록 하겠습니다.

 

위의 오류 메시지에 따르면 formatyarn이라는 명령을 찾을 수 없다는 것입니다.

 

이것은 husky의 pre-commit hook이 실행하는 스크립트 중에 formatyarn이라는 명령이 포함되어 있고, 이 명령이 프로젝트에 존재하지 않아서 발생하는 문제로 보입니다.

 

formatyarn이 프로젝트의 스크립트 중 하나인지, 아니면 잘못된 명령인지 확인해 보세요.

package.json 파일의 scripts 섹션을 확인하면 프로젝트에서 사용하는 스크립트를 볼 수 있습니다.

만약 formatyarn이 이 목록에 없다면, 이는 잘못된 명령일 가능성이 높습니다.

 

formatyarn이 프로젝트의 스크립트 중 하나라면, 이를 실행하기 위한 모든 종속성이 설치되어 있는지 확인해 보세요.

예를 들어, 이 스크립트가 prettier나 eslint 같은 도구를 사용한다면, 해당 도구들이 모두 설치되어 있어야 합니다.

 

그래서 확인해 보았습니다.

확인해 보니 ESLint가 설치되어 있지 않았군요. 설치해 보고 다시 실행해 보았습니다.

 

그래도 아직 오류가 해결되지 않았습니다. 계속 확인해 보겠습니다.

 

또는 formatyarn이 오타라면, 이를 수정해야 합니다.

 

만약 formatyarn이 분리된 명령어라면,. husky/pre-commit 파일에서 이를 분리해야 합니다.

위 파일의 4번째 줄을 줄 바꿈을 통해 분리하면 format과 test 스크립트가 순차적으로 실행됩니다.

 

물론 이는 formattest 스크립트가 package.json에 정의되어 있어야 합니다.

만약 이 스크립트들이 다른 이름으로 정의되어 있다면, 그에 맞게 수정하세요.

 

최종적으로, yarn install을 다시 실행하여 모든 변경 사항을 적용하세요.

이렇게 하면 huskypre-commit hook이 올바르게 작동하는지 확인할 수 있습니다.

 

줄바꿈을 하고 다시 시도해보았습니다.

한결같습니다. 이것도 문제는 아닌 듯하네요

 


 

4th Trying - pre-commit 파일 수정

pre-commit 파일에 있는 명령이 올바르다면, 이는 yarn formatyarn testpackage.json 파일의 scripts 섹션에 명시되어 있어야 합니다.

 

만약 package.json 파일을 열어보면 scripts 섹션이 다음과 같이 표시되어야 합니다

"scripts": {
    "format": "명령어",
    "test": "명령어",
    ...
}

"format"과 "test" 스크립트는 프로젝트에 맞게 설정되어야 합니다.

예를 들어, format 스크립트는 프로젝트의 코드 포맷팅을 담당하고, test 스크립트는 프로젝트의 테스트를 실행합니다.

이러한 스크립트들이 없다면, yarn formatyarn test 명령은 작동하지 않습니다.

 

package.json 파일로 가보았는데 말 그대로 test라는 부분이 없었습니다.

 

이 스크립트들이 package.json에 없다면, 이를 추가하거나, 이미 존재하는 스크립트 이름으로 pre-commit 파일을 업데이트해야 합니다. 그런 다음 yarn install을 실행하여 모든 변경사항을 적용하세요.

 

만약 format이나 test 스크립트가 필요하지 않다면, 이를 pre-commit 파일에서 제거할 수도 있습니다.

 

그래서 yarn test 부분을 제거하고 다시 커밋을 진행해 보았습니다.

성공인가요? 성공이에요!


이번에도 오래 걸리면 어쩌지 싶었던 부분이 드디어 끝났습니다!

역시 초기 세팅 관련된 글은 많이 만들어두어야 되겠네요.

이런 습관은 계속 유지해야겠습니다.

 

언젠간 제 블로그가 문제 해결에 도움이 되는 그런 역할을 할 수 있을 때까지 저는 계속해 나가겠습니다.

 

TroubleShooting을 종료합니다.

 


End

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.