이상을 꿈꾸는 몽상가.. 프로그래밍을 좋아함..


Git CLI 개인환경 설정

Git
( 이미지 출처 : https://git-scm.com )

git-cli 세팅 후 필요한 개인적인 환경설정 작업들을 기술합니다.

최신버전 설치

$ sudo add-apt-repository ppa:git-core/ppa -y
$ sudo apt-get update
$ sudo apt-get install git -y

user 전역설정

$ git config --global user.email "your-email-address@example.com"
$ git config --global user.name "Your Name"

패스워드 저장

저장한 패스워드는 ~/.git-credentials 파일에 저장되어 파일만 열어보면 노출됩니다. 그러므로 공용PC 환경에서는 절대 패스워드를 저장하시면 안됩니다.
일단 패스워드를 파일에 저장하는 것이 좋은 방법은 아닙니다. 하지만 GitHub가 패스워드가 아닌 토큰을 이용한 인증만 허용하도록 변경되어 매번 토큰을 발급 받아서 사용해야하는 번거로움을 피하기 위해서는 파일저장(혹은 cache)이 필요합니다.

$ git config credential.helper store --global

위의 명령어를 입력하신 후 새로운 터미널을 열신 후부터 적용됩니다.

내 환경에서만 gitignore 설정

.gitignore 파일에 패턴을 추가하면 예외처리를 할 수 있지만 .gitignore 파일이 push되면 다른 컨트리뷰터에게도 영향을 주게 됩니다.
.git/info/exclude 파일에 예외처리하고자하는 파일들의 패턴을 적어두면 다른 컨트리뷰터들에게 영향 없이 내 환경에서만 예외처리가 가능합니다.

gitignore 전역 설정

모든 프로젝트에 적용하고자하는 gitginore를 설정하는 방식입니다.
먼저 ~/.gitignore 파일을 만들고 예외처리 하고자하는 내용을 작성합니다.
예를들어, WSL을 사용하는 환경에서 간혹가다가 NotePad++ 에디터 툴로 파일을 수정하면 bak 파일이 자동생성됩니다. 프로젝트 언어와 무관하게 생성되는 bak 파일은 전역에서 예외처리할 필요가 있습니다.

그 후 아래 명령어로 전역 설정을 해줍니다.

$ git config --global core.excludesFile ~/.gitignore

Alias 추가

~/.gitconfig 파일에 아래 alias를 추가 합니다.

[alias]
        lg1 = log --graph --abbrev-commit --decorate=short --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) - %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
        lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) - %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
        lg3 = "!git lg1 --author=dveamer $(git branch --show-current)"
        lg = "!git lg2"
        s = status -s
        sw = "!git switch $(git bselect)"
        bselect = "! # Select branch with preview.;\n\
        f() { \
            _height=$(stty size | awk '{print $1}');\
            git branch | egrep -v '^\\*' | fzf --preview \"git lg {1} | head -n $_height\"; \
        }; f"
        a = "! # Add files with fzf preview diffs.;\n\
        f() { \
            _height=$(stty size | awk '{print $1}');\
            git s | fzf -m --preview \"git diff {2} | head -n $_height \" | awk '{print $2}' | xargs git add; \
        }; f"
        l = "! # Show log graph with fzf preview diffs.;\n\
        f() { \
            _height=$(stty size | awk '{print $1}');\
            git lg1 | fzf --reverse -m --preview \"git diff {2} | head -n $_height \" ; \
        }; f"
        c = "! # Commit changes with fzf previous commit messages of current branch;\n\
        f() { \
            _height=$(stty size | awk '{print $1}');\
            git lg3 | fzf --reverse -m | awk '{print $2}' | xargs git commit -C ; \
        }; f"
        m = "! # Merge another branch into current branch with fzf previous commit messages of current branch;\n\
        f() { \
            _height=$(stty size | awk '{print $1}');\
            echo 'git fetch'; git fetch; \
            echo 'git pull'; git pull; \
            git bselect | xargs git merge;\
        }; f"
        p = "! # push current branch to remote.;\n\
        f() {\
            echo 'git push origin '$(git branch --show-current);\
            git push origin $(git branch --show-current);\
        }; f"
        alias = "! # Prints all aliases.;\n\
        git config --list \
        | egrep '^alias.+' \
        | sed -e 's/^alias\\.//' \
        | column -t -s'=' \
        | sed 's/!#* *//; s/;$//' \
        | cut -c1-85"

위의 alias를 위해서는 fzf 설치가 필요합니다.

그리고 lg3 를 보면 --author=dveamer 라고 되어있습니다. 이 부분은 필요하신 계정명으로 변경하셔야 합니다.

References


Associated Posts

관련된 주제를 살펴볼 수 있도록 동일한 Tag를 가진 글들을 모아뒀습니다. 제목을 눌러주세요.

i