Git에는 명령어 단축어를 지정하는 alias가 가능합니다.
예를 들어
git commit -m '커밋메시지'
이런 간단한 커밋 명령어가 있다고 해봅시다.
커밋 수가 올라가다 보면 commit을 친 다음에 -를 치려고 손가락이 가는 이 동작이 매우매우 귀찮게 느껴질껍니다.
이런 귀차니즘에 찌들은 자들을 위해 alias 기능이 있습니다.
alias를 설정하면 위의 커밋 명령어가 아래처럼 줄어듭니다.
g cm '커밋 메세지'
이를 적용하는 방법은 너무너무 잘 설명해주는 글이 있기 때문에 따로 작성하지 않겠습니다
👇 적용법은 아래 글을 참고하세요!
https://velog.io/@somy-john/Git-Alias-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-mac-os
Git Alias 설정하기 ( mac os )
git을 더 편하고, 빠르고, 간지나게 쓸수 있는 alias에 대해서 알아보아요!
velog.io
그렇다면 저같은 감쟈🥔들은 대체 이게 어떻게 돌아가는 것인가가 궁금할껍니다.
1. Git 설정, 어디서 읽어오고 뭐가 우선순위인가?
Git은 여러 환경에서 유연하게 작동하기 위해 무려 세 곳에서 설정을 읽어옵니다.
그리고 이 설정들이 충돌할 경우, 가장 가까운 곳에 있는 설정이 가장 높은 우선순위를 가집니다.
1위 : 로컬 (<repo>/.git/config)
2위 : 글로벌 (~/.gitconfig 또는 ~/.config/git/config)
3위 : 시스템 (/etc/gitconfig)
즉, 로컬이 글로벌을 덮고, 글로벌이 시스템을 덮는 것입니다.
2. 그렇다면 git cm "..."을 치면 어떤 실행 흐름을 갖는가?
우리가 'git commit -m' 대신 'git cm'처럼 짧은 단축키를 사용하는 것이 바로 alias 덕분입니다.
단순한 치환처럼 보이지만, Git은 이 단축 명령어를 실행하기 위해 내부적으로 몇 가지 중요한 단계를 거치게 됩니다.
git cm "fix bug"를 입력시에 Git 내부에서 일어나는 일을 단계별로 살펴보겠습니다.
🤔 Step 1: 명령 파싱 및 단축어 인식
- 터미널에서 git cm "fix bug"가 실행됩니다.
- 그러면 Git은 첫 번째 argument인 cm을 사용자가 하고자 하는 명령으로 인식합니다.
🥔 Step 2: Alias 치환 검사 (Config 확인)
- Git은 설정 파일(로컬, 글로벌, 시스템)에서 alias.cm 항목이 있는지 즉시 검색합니다.
- 만약 alias.cm = commit -m 이라는 설정을 찾았다면, 이제 cm은 commit -m으로 치환됩니다.
🐢 Step 3: Alias 종류에 따라 실행 분기 나뉨
- 여기서 Alias의 값이 어떻게 생겼는지에 따라 실행 방식이 크게 두 가지로 나뉩니다.
1) 표준 Alias (Git 내부 명령으로 실행)
> 값: commit -m, status -s 등 Git의 서브 커맨드 조합인 경우
> 동작: Git은 내부적으로 이 값을 Git의 새로운 명령어로 취급하여 git commit -m "fix bug"처럼 바로 실행합니다.
2) 쉘 Alias (외부 쉘 명령으로 실행)
> 값: !git add --all처럼 ! (느낌표)로 시작하는 경우
> 동작: Git은 Alias 값에서 !을 제거하고, 남은 문자열을 운영체제의 쉘 (Shell) (예: Bash, Zsh)로 넘겨서 실행을 요청합니다.
> 특징: 이 경우 쉘 확장($()), 파이프(|), awk, fzf 같은 외부 프로그램을 사용할 수 있습니다.
💡 예시: alias.a = "!git add $(git status -s | fzf -m | awk '{print $2}')" 이 Alias는 git a를 실행하면, Git은 쉘을 호출하여 상태 파일 리스트를 뽑고, fzf로 사용자에게 선택하게 한 뒤, 선택된 파일만 git add하는 외부 명령을 수행합니다.
✈️ Step 4: 환경/설정 반영 및 실행
- 명령이 실행되는 동안에도 color.ui = auto, core.editor 등 각종 설정 값을 참조하여 동작을 결정합니다.
- 예시에서는 commit 명령이 실행되므로, 커밋 메시지를 받을 때 core.editor를 사용하고, 커밋 작성자를 결정할 때 user.name과 user.email을 사용하는 방식입니다.
✅ Step 5: 결과 반환
- 명령이 성공적으로 끝나면 종료 코드와 함께 결과(예: 새로운 커밋 ID)가 터미널로 출력됩니다.
정리하자면 alias 적용 시 아래 플로우로 동작한다는 것을 확인할 수 있습니다.
명령어 입력 -> 명령 파싱 및 검색 -> Alias 값 확인 및 분기 기준 결정 -> 실행 경로 결정 및 치환
-> 환경 설정 적용 및 결과 반환
참고로 깃은 유저가 명령어를 입력할때마다 위 과정을 반복합니다.
힘든 일은 너가 해야지 그치?
'Develop note' 카테고리의 다른 글
| [트러블슈팅] 공백 입력 테스트코드, NoSuchElementException (1) | 2025.10.28 |
|---|---|
| [Java] Utility class란? (1) | 2025.10.25 |
| [Pattern] 예외 팩토리(Exception Factory) 패턴: 깔끔하고 유연한 예외 처리 (1) | 2025.10.23 |
| [Git] Hooks 적용으로 커밋 메세지 형식 강제하기 (0) | 2025.10.15 |
