この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
인생의 많은 시간을 깃 커맨드를 입력하면서 살게 되는데, 커맨드 한번에 10글자(git commit)씩 쓰다보면 시간이 참 빠르게 흘러간다는 생각이 듭니다.
그래서 본 블로그에서 설명할 설정을 알고 난 후로 이러한 답답함이 좀 해소되었습니다. 이러한 고민이 있으신분은 .gitconfig
한번씩 설정합시다.
.gitconfig
파일이름 그대로 깃의 설정입니다. 여기서 생각보다 많은 걸 할 수 있습니다. vi ~/.gitconfig
로 자신의 설정을 확인하실 수 있습니다.
[user]
name = tolluset
email = dlqud19@gmail.com
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[credential]
helper = osxkeychain
[alias]
s = status
a = add
au = add -u
aup = add -u -p
ap = add -p
anp = !git add -N . && git add -p
b = branch
c = commit
ca = commit --amend
cm = commit -m
d = diff
ds = diff --staged
l = log
lm = log --merges
la = log --all
cob = checkout -b
co = checkout
com = checkout main
rb = rebase
sbu = submodule update --init
sbur = submodule update --remote
sbui = submodule update --init
rs = restore
rss = restore --staged
ig = "!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi"
fa = fetch --all
fp = !git fetch --all -p && git pull -p
pp = pull -p
rv = remote -v
rao = remote add origin
pn = !git branch | grep -v \\* | egrep -v 'master|main' | xargs git branch -D
ac = !git add . && git commit -am
st = stash
stpo = stash pop
stpu = stash push
stc = stash clear
psoh = push origin HEAD
diff-image = "!f() { cd -- \"${GIT_PREFIX:-.}\"; GIT_DIFF_IMAGE_ENABLED=1 git diff \"$@\"; }; f"
[commit]
template = ~/.gitmessage.md
[pull]
rebase = false
[core]
attributesfile = ~/.gitattributes
command = ~/git-diff-image/git_diff_image
[init]
defaultBranch = main
제 .gitconfig
입니다. [alias]
밑으로 이것저것 많습니다. 설정해놓은 것들을 다 쓰지는 않고 주로 쓰는 것만 따로 정리해보겠습니다.
s = status
a = add
b = branch
c = commit
ca = commit --amend
cm = commit -m
d = diff
ds = diff --staged
l = log
cob = checkout -b
co = checkout
rb = rebase
rs = restore
rss = restore --staged
fa = fetch --all
fp = !git fetch --all -p && git pull -p
pn = !git branch | grep -v \\* | egrep -v 'master|main' | xargs git branch -D
st = stash
psoh = push origin HEAD
위에 커맨드가 주로 사용되네요. 하단에 fp
, pn
요런 alias는 여러가지의 커맨드를 섞는 경우 !
느낌표를 붙여줍니다. 대체 이런걸 어떻게 알 수 있는걸까요? 보통은 문서에 있습니다.
https://git-scm.com/docs/git-config#Documentation/git-config.txt-alias
fp
같은 경우 오랜만에 해당 레포지토리에 진입했을 때 자주 사용하게 됩니다. 전부 패치해주고 pull 해서 브랜치도 최신으로 맞춰주는데 -p
옵션으로 prune 효과를 줄 수 있습니다.
https://git-scm.com/docs/git-pull#Documentation/git-pull.txt---prune
그럼 pn
은 뭘까요. 요건 제가 로컬에 브랜치가 잔뜩 쌓이는게 싫어서 추가한 커맨드입니다. master, main
브랜치와 현재 사용중인 브랜치 이외에 전부 지워버립니다.
마지막으로 마무리에 사용하는 psoh
입니다. 작업을 마치고 리모트에 푸쉬하고 싶을 때 g psoh
같이 쓸 수 있습니다.
방금 왜 git
말고 g
을 쓴걸까요. bash
혹은 zsh
, fish
같은 쉘에서도 alias
를 설정할 수 있습니다. 예를 들어 zsh
를 사용하면 아래와 같이 하시면 됩니다.
echo alias g=\"git\" >> ~/.zshrc
source ~/.zshrc
사실 여기서 직접 alias gs="git status"
처럼 설정하시면 스페이스 한칸이 줄게 됩니다. 하지만, 저는 git 말고도 alias로 이것저것 쓰고 있기 때문에 통일성을 위해서 git에 대한 alias는 .gitconfig
에 설정했습니다.
마무리
여러 컴퓨터를 쓰는 경우 위 설정도 동일하게 사용하고 싶게 되는데, 그래서 저는 gist에 파일을 올려두었습니다.
https://gist.github.com/Tolluset/6a17de662372e3860a50f34ca9601d1a
Mac이시면 아래 커맨드로 클립보드에 복사할 수 있으니 gist 만들고 바로 붙여버리시면 됩니다.
# 다른 쉘이면 다른 쉘파일 사용, pbcopy는 클립보드에 복사하는 커맨드
cat ~/.zshrc | pbcopy
주의하실 점은 .gitconfig
에 토큰같이 퍼블릭에 올리면 안되는 값이 있나 확인하시고 애매하면 시크릿으로 올리시면 됩니다.
아마 이러한 설정을 공유하는 시스템도 있을 것 같은데 저는 자주 컴퓨터를 바꾸는 환경이 아니라 gist로 관리해도 될 것 같습니다. 자주 바뀌는 환경이면 설정을 다운로드 해서 로컬 .gitconfig
에 로드해주는 스크립트를 짜도 좋을 것 같네요. ??️