내 작은 .gitconfig

살다보면 깃을 쓸일이 참 많습니다. 그런데 하나하나 길게치다보면 인생이 어느새 훅가있죠. 좀 더 빠르고 짧게 사용할 수 있을까요.
2023.04.03

인생의 많은 시간을 깃 커맨드를 입력하면서 살게 되는데, 커맨드 한번에 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에 로드해주는 스크립트를 짜도 좋을 것 같네요. ?‍?️