Commit하기 위해 필요한 Git 설정하기 :: git config (system vs global vs local)
Git 튜토리얼 3
Git을 사용하기 위해 해야하는 최초 설정
"버전"은 Git에서 "Commit"이라고 부릅니다. 그래서 "Commit한다"는 "하나의 버전으로 기록한다"라는 말과 같은 말입니다. Git은 파일을 Commit을 단위로 기록합니다.
Commit의 구성 요소
- 특정 Commit 찾아내기 위해 Git이 부여하는 특별한 ID.
SHA-1
방식을 사용해서 문자와 숫자의 조합으로 만들어진다. ex) 7cbd6274d53566a3675084301fc68ccbf848f9fe - Tree: Git 내부적으로 쓰이는 오브젝트 파일, Git에서 자동 생성하며 파일의 구조를 알려주는 역할을 합니다
- Author: 코드를 처음에 만든 사람
- Committer: 가장 최근에 Commit을 수정한 사람
- Commit 메시지: 위의 사진에서는 "This is new commit". Commit에서 어떤 변화가 있었는지 어떤 것이 수정되었는지 알려주기 위해서 존재하는 메시지 기능입니다. Commit을 할 때 메시지를 적습니다.
Author랑 Commiter의 차이: Commit을 하는 사람(Committer)이 Commit의 저자(Author)이지 왜 따로 존재할까요?
Author에는 처음에 코드를 짜고 Commit한 사람이 기록됩니다.
Committer는 Git에서는 이미 만든 Commit을 수정할 수 있기 때문에 최근에 Commit을 수정한 사람을 기록하기 위해 있습니다. 예를 들어서, Author는 어떤 기능의 개발 맡아서 코드를 짠 개발자가 되고 Committer는 여러 개발자들이 올린 Commit들을 보고 문제가 없는지 검토하고 그 Commit들을 병합하는 프로젝트 관리자가 될 수 있습니다.
이 차이는 아직 이해가 안 될 수도 있습니다. 그 이유는 나중에 merge를 배우면 더 명확히 알게 됩니다.
위 Commit의 구성 요소를 보면 Author와 Committer를 기록하기 위해 우리의 이름과 이메일이 필요하다는 것을 알 수 있습니다. 그래서 먼저 Git에게 내 이름과 이메일 주소를 알려줘야 합니다.
내 정보를 설정하지 않고 git commit
명령어로 Commit을 시도하면 어떻게 될까요?
"*** Please tell me who you are."라는 문구가 출력되면서 Commit에 실패합니다. Commit을 만들기 위해 필요한 Author, Committer를 기록하기 위한 정보(이름과 이메일)가 없으니 당연히 실패합니다. 나머지 실패 메시지를 읽어보면 친절하게 git config --global user.email "you@example.com"
, git config --global user.name "Your Name"
명령어로 내 정보를 설정하라고 나옵니다. 이 명령어에 대해서 자세히 알아봅시다.
git config
에 대해서
config? configuration(설정)의 약자
git config
로 시작하는 명령어는 Git에 관한 설정을 추가하거나 바꾸거나 삭제하는 명령어입니다.
Git에는 System 설정 파일과 Global 설정 파일과 Local 설정 파일이 있습니다. System 설정 파일은 모든 System 사용자에게 적용됩니다. Global 설정 파일은 한 사용자(user)의 전체 Git 저장소에 적용됩니다. Local 설정 파일은 하나의 저장소에만 적용됩니다. 그렇기 때문에 System 파일은 전체 사용자에 영향을 미칠 수 있는 공간에 위치하고 Global 파일은 한 사용자의 전체 저장소에 영향을 미칠 수 있는 공간에 위치하고 Local은 한 저장소에 영향을 미칠 수 있는 공간에 위치합니다.
설정 파일을 수정히는 명령어와 그 설정 파일이 존재하는 위치
git config --system
으로 시작하는 명령어는 System 설정 파일을 수정하겠다는 의미입니다. 보통 윈도우 사용자는C:/ProgramData/Git/config
, 리눅스 사용자는/etc/gitconfig
에 위치합니다.git config --global
으로 시작하는 명령어는 Global 설정 파일을 변경하겠다는 의미입니다. 보통~/.gitconfig
에 위치합니다.git config --local
으로 시작하는 명령어는 Local 설정 파일을 변경하겠다는 의미입니다. 내 저장소 안에 있는.git/config
에 위치합니다.
System 설정 파일을 변경하기 위해서는 관리자 권한이 필요하기 때문에 우리는 주로 Global 파일과 Local 파일을 변경하게 됩니다.
우리는 이제 Git이 내 정보를 설정하라고 알려준 명령어들을 이해할 수 있습니다.
git config --global user.email "you@example.com"
와 git config --global user.name "Your Name"
명령어는 내 이메일과 이름을 (사용자의 모든 저장소에 적용되는) Global 설정 파일에 저장하겠다는 뜻입니다.
만약 하나의 저장소에만 적용되는 Local 설정 파일에 저장하고 싶다면 git config --local user.email "you@example.com"
, git config --local user.name "Your Name"
이렇게 사용하면 됩니다. 하지만 이렇게 Local 설정 파일만 설정하면 내가 저장소를 새로 만들 때마다 다시 설정해줘야 해서 귀찮습니다. 그렇기 때문에 자신만 사용하는 컴퓨터라면 Global 설정으로 해놓으시길 추천합니다.
학교의 공용 컴퓨터에 Global로 Git 설정을 해놓으면 나중에 다른 사람이 Git을 쓰다가 제 명의으로 Commit하게 되어서 나도 모르게 Author가 되어버리곤 합니다ㅎㅎ. 그 반대로 제가 작업한 Commit이 딴 사람 이름으로 원격(GitHub)에 올라가는 상황도 많이 일어납니다. 이미 사용자 정보가 저장되어 있는면 경고가 안 뜨기 때문입니다. (Git은 초기 설정(user.name, user.email)을 안 했을 때만 Global로 이름과 이메일을 설정하는 명령어를 추천하는 문구를 출력합니다.) 그래서 공용 컴퓨터에서는 깜박하면 타인의 이름으로 올라 가기 쉽습니다...ㅠㅠ. 내가 1시간 넘게 쓴 코드를 Commit하고 나중에 제가 만든 Commit을 확인해보니 처음 보는 사람이 Author로 설정되어 있으면 묘하게 화가 날 수 있습니다ㅎㅎ. 물론 번거롭긴 하지만 나중에 Commit의 Author를 바꿀 수는 있습니다. (그런 상황이 발생했다면 제가 글(https://coding-groot.tistory.com/30)을 올렸으니 나중에 필요하다면 참고하세요!)
설정 파일의 우선 순위
만약 설정 파일 여러 개가 중복된다면 우선 순위에 따라서 어떤 것이 실제로 사용될지 결정됩니다.
우선 순위는 Local
>Global
>System
순이며 Local 설정 파일이 제일 높습니다.
만약 Global 설정 파일에 쓰인 내 이름이 "A"이고 Local 설정 파일에 쓰인 내 이름이 "B"이면 Git이 사용하는 이름은 "B"가 됩니다.
현재 설정된 Git 설정 확인하기 git config --list
또는 git config -l
--list는 -l로 줄여서 사용할 수 있습니다
- System 설정 파일을 확인하고 싶다면
git config --system --list
- Global 설정 파일을 확인하고 싶다면
git config --global --list
- Local 설정 파일을 확인하고 싶다면
git config --local --list
- 모든 설정을 확인하고 싶으면
git config --list
이제 git config
명령어에 대해서 감이 오시나요? 참고로 만약 설정 파일이 존재하지 않는 경우에는 다음과 같은 오류가 출력됩니다.
개인 컴퓨터인 경우 보통 Git의 System 설정이 되어 있지 않기 때문에 git config --system --list
를 사용하면 높은 확률로 다음과 같이 뜹니다. 물론 Git 사용이 처음이라면 git config --global --list
명령어도 설정 파일이 없다고 오류가 뜹니다.
이제 Git을 제 컴퓨터에서 원활하게 사용하기 위해서 Global로 제 이름과 이메일을 설정해보겠습니다.
git config --global user.name "IamGroooooot"
git config --global user.email "dury.ko@gmail.com"
제 Global 설정 파일을 출력해보겠습니다.
앞으로는 (다른 윈도우 사용자 로그인하지 않는 이상) 모든 저장소에서 기본적으로 Global 설정 파일에 따라서 Commit됩니다. 여기까지 했다면 Git 초기 설정이 완료됩니다!
다른 사람 컴퓨터에서 Git 사용하기
사람들이 Git 초기 설정을 Global로 합니다. 그렇기 때문에 공용 컴퓨터를 사용하신다면 Git으로 Commit하기 전에 항상 Local로 이름과 이메일 설정을 하시는 것을 추천합니다. 그렇게 안 하면 다른 사람의 이름으로 올라가서 Commit을 뺏길 가능성이 높습니다. 다른 사람 이름으로 Commit이 만들어진다 해도 큰일이 발생하는 것은 아니지만 기분이 나쁩니다 ㅡㅡ. 내 작업물이... 다른 사람 이름으로... 이렇게 제 Commit이 실제로 원격으로 Push되면 수정하기 곤란합니다. 같이 저장소를 공유하고 있다면 모두에게 알리고 중간에 Force Push를 하기도 좀 그렇고... 그냥 빼앗기는 겁니다.
반대로 다른 사람의 Commit을 빼앗고 싶다면 Global로 해놓으시면 됩니다ㅎㅎ.
git config --list
로 확인해보니 사용자 이름과 이메일이 다른 사람으로 설정되어 있었다고 가정해 봅시다. 내 사용자 이름이 "Groot"이고 이메일은 "groot@groot.com"이라고 하면 다음과 같이 Local 설정을 해주면 제 이름과 이메일 설정이 우선적으로 적용됩니다. (Global로 다시 재설정해줘도 됩니다.)
git config --local user.name "Groot"
git config --local user.email "groot@groot.com"
그리고 나서 git config --list
명령어로 확인하면 위의 사진처럼 이름과 이메일 상단과 하단에 두 개가 존재하게 됩니다. 이렇게 겹칠 경우 Git은 항상 제일 아래에 있는 설정을 사용합니다.
git config user.name
과 git config user.email
명령어를 사용하면 현재 실제로 사용되는 있는 이름과 이메일이 무엇인지 확인할 수도 있습니다.
--show-origin
옵션까지 추가하면 실제 사용되고 있는 설정이 어떤 설정 파일로부터 왔는지도 알 수 있습니다.
실행 결과 실제 사용되는 값들이 .git/config
파일로부터 왔다고 합니다. 위에서 .git/config
에 Local 설정 파일이 있다고 했습니다. 따라서 Local 설정에 의해서 위와 같은 이름과 이메일이 설정되었고 다른 저장소에서는 쓰이지 않는 설정이라는 것을 알 수 있습니다.
댓글
이 글 공유하기
다른 글
-
변경한 파일을 저장해보자 :: git commit
변경한 파일을 저장해보자 :: git commit
2020.07.13 -
Stage it! Commit할 파일을 선택해보자 :: git add [파일명]
Stage it! Commit할 파일을 선택해보자 :: git add [파일명]
2020.07.07 -
저장소 안의 파일들의 상태를 확인해보자 :: git status
저장소 안의 파일들의 상태를 확인해보자 :: git status
2020.07.06 -
Git 저장소 만들기 :: git init
Git 저장소 만들기 :: git init
2020.07.06