Git pre-commit 사용법

|

pre-commit

이름에서 볼 수 있듯이 Git commit을 수행하기 전에 자동으로 특정 작업을 수행하도록 해주는 기능입니다. 보통 formatter 또는 linter 등을 실행해서 코드의 잠재적 문제 발견 또는 일관성있는 포맷을 유지하게 해줍니다.


설치 방법

pre-commit는 파이썬 패키지를 이용해서 설치할 수 있습니다.

$ pip3 install pre-commit

Collecting pre-commit
  Downloading pre_commit-2.12.1-py2.py3-none-any.whl (189 kB)
     |████████████████████████████████| 189 kB 813 kB/s
Collecting virtualenv>=20.0.8
  Downloading virtualenv-20.4.4-py2.py3-none-any.whl (7.2 MB)
     |████████████████████████████████| 7.2 MB 869 kB/s
Requirement already satisfied: toml in /usr/local/lib/python3.8/site-packages (from pre-commit) (0.10.2)
Collecting cfgv>=2.0.0
  Downloading cfgv-3.2.0-py2.py3-none-any.whl (7.3 kB)
Collecting nodeenv>=0.11.1
  Downloading nodeenv-1.6.0-py2.py3-none-any.whl (21 kB)
Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.8/site-packages (from pre-commit) (5.4.1)
Collecting identify>=1.0.0
  Downloading identify-2.2.4-py2.py3-none-any.whl (98 kB)
     |████████████████████████████████| 98 kB 17.3 MB/s
Collecting filelock<4,>=3.0.0
  Downloading filelock-3.0.12-py3-none-any.whl (7.6 kB)
Collecting appdirs<2,>=1.4.3
  Downloading appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
Requirement already satisfied: distlib<1,>=0.3.1 in /usr/local/lib/python3.8/site-packages (from virtualenv>=20.0.8->pre-commit) (0.3.1)
Requirement already satisfied: six<2,>=1.9.0 in /usr/local/lib/python3.8/site-packages (from virtualenv>=20.0.8->pre-commit) (1.15.0)
Installing collected packages: filelock, appdirs, virtualenv, nodeenv, identify, cfgv, pre-commit
Successfully installed appdirs-1.4.4 cfgv-3.2.0 filelock-3.0.12 identify-2.2.4 nodeenv-1.6.0 pre-commit-2.12.1 virtualenv-20.4.4

MacOS에서는 brew를 이용해서도 설치 가능하지만, 그냥 pip3를 이용하는게 더 편한 듯 싶습니다.


버전 확인

$ pre-commit -V

pre-commit 2.12.1


설정

pre-commit.pre-commit-config.yaml 설정 파일을 필요로 합니다. 아래 명령어를 이용해서 sample-config라는 템플릿으로 설정 파일을 만들 수 있습니다. git add 명령어로 프로젝트에 추가할 예정이니, 아래 명령어는 pre-commit를 적용하려는 프로젝트의 디렉토리에서 실행하세요.

$ pre-commit sample-config > .pre-commit-config.yaml


.pre-commit-config.yaml

해당 설정 파일은 다음과 같은 내용이 작성되어 있습니다.

# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.2.0
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
    -   id: check-yaml
    -   id: check-added-large-files

총 4개의 hook이 설정되어 있는 것을 볼 수 있습니다.


실행

이제 pre-commit run 명령을 실행해봅니다. 처음에는 해당 repo로부터 다운로드하는 시간이 있어서 약간의 시간이 걸립니다.

$ pre-commit run

[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
Trim Trailing Whitespace.............................(no files to check)Skipped
Fix End of Files.....................................(no files to check)Skipped
Check Yaml...........................................(no files to check)Skipped
Check for added large files..........................(no files to check)Skipped

그 이후 pre-commit run -a 명령어를 이용해서 모든 파일들을 한 번 검사해봅니다.

$ pre-commit run -a

...

다음 명령어를 이용해서 .pre-commit-config.yaml 파일을 git 에 추가해줍니다.

$ git add .pre-commit-config.yaml

$ git commit -m "pre-commit 적용"


git hook에 등록

마지막으로 git commit 할 때 자동으로 pre-commit가 실행되도록 합니다. 아래 명령어를 이용해서 git hook에 등록할 수 있습니다.

$ pre-commit install

Visual Studio Code Plugin `Project Dashboard`

|

Project Dashboard

vscode에서 다양한 프로젝트들을 다음 그림처럼 대시보드 형태로 관리할 수있게 해주는 플러그인입니다.

image

프로젝트 전환도 쉽고, 새 창으로 다른 프로젝트를 열기도 쉬워서 상당히 유용한 플러그인입니다.


설치 방법

설치는 vscode 플러그인 설치 메뉴에서 Project Dashboard를 검색해서 설치하면 됩니다.


단축키

대시보드를 띄우는 단축키는 리눅스에서는

Ctrl + F1 키를 누르면 됩니다.

맥에서는

command + F1 입니다.

BigSur에서 안드로이드로 USB 테더링하기

|

USB 테더링

기존에 포스팅한 내용이 있는데, BigSur 버전에서는 추가적인 별도의 작업을 해줘야 해서 포스팅을 다시 합니다.


HoRNDIS 9.2

기존과 마찬가지로 HoRNDIS를 설치해줘야 합니다. 최신 버전인 9.2 버전을 다운도르하면 됩니다. 다만, BigSur에서는 설치 마지막 단계에서 실패가 됩니다.


HoRNDIS 개발자 ID

다음 내용을 기억해줍시다. 생략해도 됩니다. 다만, 개발자 ID가 다를까봐 다시 한 번 확인하는 과정입니다.

$ sudo su

$ spctl -a -vv -t install /Library/Extensions/HoRNDIS.kext
/Library/Extensions/HoRNDIS.kext: accepted 
source=Notarized Developer ID 
origin=Developer ID Application: Joshua Wise (54GTJ2AU36)


복구 모드 진입

그런 다음 맥북 종료 후

command + R 버튼을 눌러서 재부팅하면 복구모드로 진입합니다. 그리고 터미널을 실행한 다음, 아래 명령어를 입력합니다.

$ csrutil disable
System Integrity Protection is off.

$ /usr/sbin/spctl kext-consent list
spctl: no kext consent configuration found.

$ /usr/sbin/spctl kext-consent add 54GTJ2AU36
$ /usr/sbin/spctl kext-consent list
Allowed Team Identifiers:
54GTJ2AU36


노멀 부팅

다시 맥북을 재부팅 합니다. 노멀 모드로 진입한 다음 다음 명령어를 실행합니다.

$ sudo su 
$ sqlite3 /var/db/SystemPolicyConfiguration/KextPolicy 
SQLite version 3.32.3 2020-06-18 14:16:19 
Enter ".help" for usage hints. 

sqlite> delete from kext_load_history_v3 where team_id='54GTJ2AU36'; 
sqlite> delete from kext_policy where team_id='54GTJ2AU36'; 
sqlite> .quit 

그 이후 다음 파일을 삭제해줍니다.

$ cd /Library/Extensions

$ sudo rm -rf HoRNDIS.kext


HoRNDIS 재설치

그 이후 다시, HoRNDIS 프로그램을 재설치해줍니다. 그리고 다음 권한을 허용해줍니다. System Preferences > Security & Privacy에서 General 탭 하단에서 Joshua Wise 개발자 항목을 허용해줍니다.

이제 재부팅 후 안드로이드 폰과 USB 케이블 연결 후 테더링을 실행해보면 잘 동작하는 것을 알 수 있습니다.

StatusBar의 텍스트 폰트 사라졌을 경우(Ubuntu 20.04)

|

Ubuntu 20.04를 사용하고 있는데, 컴퓨터를 오래 켜놓으면 갑자기 상단바의 텍스트들이 하나도 안 보이는 현상이 발생했습니다.

저 혼자만의 문제인가 했는데, 구글링해보니 같은 증상을 겪는 사람들이 있네요. 해결법은

글자가 사라졌을 때

Alt + F2 를 누르고, 출력되는 다이얼로그에 알파벳 R을 입력하고 엔터키로 창을 닫으면 문제가 해결됩니다.

iTerm2에서 한글 깨지는 경우

|

iTerm2

Linux에는 terminator가 있다면, MacOS에서는 iTerm2라는 막강한 터미널 프로그램이 있습니다.

그런데, 3.3.10 버전 이후로 아래 사진과 같이 한글이 깨져서 보여주는 현상이 발생하고 있습니다.

image

위 이미지에서 1 번째, 2 번째 디렉토리의 한글이 깨져서 보이는 것을 확인할 수 있습니다. 그런데, 3 번째 디렉토리는 정상으로 보이네요?

차이는 1 번째, 2 번째 디렉토리는 Finder에서 새로 생성한 디렉토리이고, 3 번째 디렉토리는 iTerm2에서 mkdir 명령어를 이용해서 만들었다는 차이가 있습니다.

즉, 단순히 폰트의 문제가 아닌 글자 자체, 유니코드 쪽의 설정이 다르다는 것을 의심할 수 있습니다.

해결책은 iTerm2Preference -> Text로 가서

image

Unicode normalization formNone에서 NFC로 변경합니다.

image

그 이후 다시 출력해보면 한글이 잘 출력되는 것을 알 수 있습니다.