DoITgrow

[Git] Git pull/push 계정 정보를 계속 물어볼 때 설정 방법 본문

Collaboration & Tools

[Git] Git pull/push 계정 정보를 계속 물어볼 때 설정 방법

김수성 (Kim SuSung) 2021. 9. 27. 11:25
반응형

일전에 아래 포스팅에서 Git 계정 정보가 변경되었을 시, 아래 포스팅과 같이 설정을 바꾸는 방법을 확인했었다.

2021.09.24 - [Collaboration & Tools] - [Git 오류] git push 또는 git pull 할 때 authentication failed 되는 문제

그러나 pull/push를 할 때마다 계속 계정 정보를 입력하라고 해서 매우 불편함을 느꼈다.

 

이를 해결하는 방법은 아래와 같이 git bash 창에 코드를 입력하면 된다.

$ git config credential.helper store

위 명령어를 통해 credential.helper의 store 옵션을 주게되면 반영구적으로 인증을 유지할 수 있다.

만약 해당 프로젝트가 아닌 전체 git 프로젝트에 설정하고 싶다면 아래와 같이 --global 인자를 추가해 주면 된다.

$ git config --global credential.helper store

여기서 잠깐, --global과 같은 인자가 무엇인지 잠깐 살펴보고 가자.

--global vs --system vs --local

git에서 사용할 수 있는 --global 같은 인자는 --local, --system이 추가로 있다. 이것이 무엇일까?

git bash에 아래 명령어를 입력하면 총 3가지의 다른 경로에서 관리하고 있는 환경설정 값들이 보인다.

$ git config -l --show-origin

위 창에서 볼 수 있듯이 git은 총 3가지의 계층적인 단계로 설정 관리를 하고 있다. 

  • --system : 한 컴퓨터에서 여러 계정이 존재하는 경우라면 모든 계정에 같은 git 환경설정을 반영
  • --global : 한 계정 내에서 여러 개의 프로젝트를 관리하고 있다면 모든 프로젝트에 같은 git 환경설정을 반영
  • --local : 프로젝트별로 git 환경설정을 관리

웹 상에서 사람들이 많이 만지는 설정을 보면 --global 인 것 같다. 아마도 프로젝트마다 설정을 달리 사용하는 것은 기억하기도 힘들 것이고, 보통 컴퓨터 계정에 따라 사용하는 습관이 다르니까 대부분 --global 을 통해 작업하는 것 같다.

git bash 명령어가 환경설정을 바꾸는 동작 원리는 무엇일까?

그러면 조금 더 깊게 들어가서 환경설정을 시스템 상에서 어떻게 관리하고 있는지 궁금해서 살펴 보았다. 아래 명령어를 입력하여 global 환경 설정을 확인해 보면 각자 시스템에 맞는 그 아래 결과를 볼 수 있다.

$ git config --global -l --show-origin

위 출력 결과의 경로로 들어가서 파일에 들어가보면 아래와 같은 정보를 볼 수 있다. 바로 여기서 설정을 관리하고 있는 것이다. 우리가 git bash 명령어를 통해 여기에 설정을 저장시킬 수 있고, 반대로 직접 메모장을 통해 양식에 맞추어 입력하여 설정할 수도 있다.

 

추가로 계정 정보 설정에 따른 보안 이슈 문제를 해결하는 방법을 하나 더 소개하려고 한다.

계정 정보 저장에 따른 보안 문제는 어떻게 해결해야 할까?

Git 공식 홈페이지에서 확인해 보니 권고하는 사항은 아래와 같이 credential.helper 설정을 store가 아닌 cache 기능을 사용하라는 것이다. 뒤에 'cache --timeout=60' 부분은 초 단위이며, 계정계정(아이디, 비밀번호)를 입력 후, 60초간 cache 해 놓고, 이후에는 해당 정보가 사라진다는 것이다. 만약 'git config --global credential.helper cache'로만 설정할 경우 defalut로 '--timeout=900'이 설정된다고 한다.

이 기능을 이용하면 회사에서 일하는 동안만 cache 해 놓으면 보안 상 안전하겠다 생각이 들어서 설정해 보았다.

 

$ git config --global credential.helper 'cache --timeout=60'

$ git pull
fatal: credential-cache unavailable; no unix socket support
Already up to date.

그러나 위와 같이 git 을 실행하며 정상 작동하는지 확인해보려 했으나 경고 메시지가...(pull/push 기능은 잘 작동) stackoverflow 나 다른 포스팅 자료들을 살펴보며 해결 방법을 찾아보았으나 대부분의 내용은 상기 경고를 없애는 방법만 나와있었다. (이것은 "git config --global --unset credential.helper"로 설정을 지워도 되고, 위에서 말한 경로로 직접 들어가서 텍스트 편집기를 통해 직접 지워도 된다.)

그리고 stackoverflow에 달린 답변으로는 OS가 윈도우이면 Unix socket support가 없기 때문에 안된다고 한다. 이 부분은 OS를 잘모르는 나로써는 어떻게 해결해야 할지 잘 모르겠다. (혹시 아시는 분이 있다면 댓글을 부탁드립니다.)

 

그래서 일단은 회사나 집 컴퓨터를 나만 쓰니까 credential.helper 설정을 "store"로 반영구적으로 해놓아도 문제될 것은 없기 때문에 이대로 사용하다가 나중에 혹시나 해결 방안을 찾게되면 포스팅을 다시 올리고자 한다.

 

긴 내용 읽어 주셔서 감사드립니다. 내용이 도움되셨다면 "좋아요" 버튼 부탁드립니다.
문의사항과 잘못된 정보에 대한 지적은 언제든지 환영입니다 ^^. 
반응형
Comments