[Utilities] Git: Make sure you configure your 'user.name' and 'user.email' in git
Introduction
작업 중이던 깃 리포지토리를 새로 클론 하고, 새 코드를 신나게 작성한 후 vscode와 같은 IDE를 통해 커밋 명령어를 실행시키는 순간 다음과 같은 에러 메시지와 마주할 때가 있다.
Make sure you configure your 'user.name' and 'user.email' in git
깃 사용법을 정석적으로 배운 사용자라면 이럴 일은 없겠지만, 본인은 읽으라는 도큐멘테이션은 안 읽고 야매로 이것저것 눌러보면서 배운 터라 매번 까먹고 위와 같은 에러 메시지를 보는 경우가 많다.
이번엔 왜 이런 메시지가 등장하며, 어떻게 메시지의 말대로 user name과 user email를 설정해 줄 수 있는 지 간단히 알아보도록 하자.
깃 커밋을 수행할 때는, 누가 코드를 처음 작성했으며 (Author) 누가 마지막으로 커밋을 수행했는지를 (Committer) 추적하기 위해 깃에 사용자 신원이 등록되어 있어야 한다. 아래 사진은 커밋의 세부 내용 중 일부로, author와 committer, 그리고 해당 유저들의 이메일이 명시되어 있는 것을 볼 수 있다.
이들은 커밋에 필수적으로 제공되어야 하는 정보이기 때문에 맨 처음 깃과 관련해서 아무것도 세팅하지 않은 상태에서 리포지토리를 클론하고 커밋을 수행하면, 깃 입장에서는 설정된 아무 신원 정보가 없는데 커밋을 수행하려니 당연히 위와 같은 에러 메시지를 띄우는 것이다.
따라서 만약 컴퓨터에서 처음 깃을 이용해 커밋을 수행하고 있다면, 먼저 사용자 이름과 사용자 이메일을 설정해 주어야 한다. 여기서 사용자 이름은 github 사용자 이름과 동일해야 할 필요가 없으며 만약 실제 이름을 공개하고 싶지 않다면, 원하는 이름으로 작성해도 된다.
다만 이렇게 이름 / 이메일을 설정하는 과정에서 크게 두 가지 옵션이 존재하는데, 바로 local과 global 옵션이다. 먼저 global 옵션으로 설정하는 방법을 보자.
Global 옵션으로 유저 이름/이메일 설정
유저 이름 설정
$ git config --global user.name "{Example Name}"
유저 이메일 설정
$ git config --global user.email "{email@example.com}"
--global 옵션을 넣어 이름과 이메일을 설정해 주면 이 설정은 컴퓨터의 모든 리포지토리에서 효과를 발휘하며, 따로 추가적인 설정 없이 commit을 수행할 경우 어느 리포지토리에서든 global하게 설정된 사용자 이름과 이메일로 커밋이 올라가게 된다. 만약 컴퓨터를 혼자 사용하고 있고, 따로 리포지토리 별 이름 / 이메일 설정이 필요하지 않은 경우엔 이렇게 --global 옵션을 사용해 설정해 주는 편이 편하다.
Local 옵션으로 유저 이름/이메일 설정
유저 이름 설정
$ git config user.name "{Example Name}"
유저 이메일 설정
$ git config user.email "{email@example.com}"
local 옵션이라고는 말했지만 단지 --global 옵션을 추가하지 않으면 local하게 세팅해 주는 명령어가 된다. 앞의 --global 옵션과의 차이점은, 컴퓨터 내에서 전역적으로 설정되는 것이 아니라 깃 리포지토리 개별적으로, 즉 local하게 적용되는 설정을 해 준다는 것이다. 이를 위해서는 커맨드 라인에서 현재 경로를 깃 리포지토리 경로로 옮겨 준 후에, 위 명령어들을 수행하면 된다. 이렇게 세팅된 local 유저네임 / 이메일 설정은 컴퓨터 전체에 설정된 global 세팅보다 우선순위가 높으며, 커밋 시 global 설정을 무시하고 local하게 설정된 값을 따르게 된다.
현재 설정된 유저 이름/이메일 확인
만약 현재 경로에서 세팅된 local 유저 정보와 global 유저 정보를 확인하고 싶다면, 각각 다음 커맨드를 통해 볼 수 있다.
Local
$ git config user.name
$ git config user.email
로컬 깃 설정은 리포지토리 경로 안의 .git/config 경로에 존재하므로, 다음 커맨드를 이용해서도 유저 정보를 포함한 로컬 깃 설정 정보를 확인할 수 있다.
$ cat .git/config
참고로, 글로벌 설정은 ~/.gitconfig 경로에 따로 저장된다
Global
$ git config --global user.name
$ git config --global user.email
Local, Global 두 경우 모두 기존에 세팅된 값이 없다면 명령어를 쳐도 아무것도 출력되지 않는다.
.
.
.
Local하게 유저 정보를 설정해 주는 것은 특히 원격 서버를 이용한 협업 시에 특히 중요해 지는데, --global 옵션으로 서버 상에서 누군가 설정해 놓은 유저 정보가 있을 때, 아무 생각 없이 서버 상에서 로컬 유저를 설정하지 않은 채로 커밋을 올리면 꼼짝없이 global 유저의 정보로 내 커밋이 올라가 버리기 때문이다........
본인도 한동안 이런 사실을 모르고 있다가, 많은 수의 커밋이 다른 이름으로 올라가 버린 적이 있다. 한번 올라가 버린 커밋은 내용을 수정하기가 굉장히 번거로워 보통은 이름이 바뀌어 버린 채로 그냥 방치되기 마련이니 미리미리 신경 쓰면 좋을 듯 하다.
아래는 참고할 만한 사이트이다.