Github에 새로운 repository를 연동할 때마다 검색하면서 trouble shooting 하는 것이 귀찮아서 자주 진행하는 과정을 정리해보려 한다.
git의 개념과 필수 명령어들에 대한 설명은 다음 글을 참조하자.
목차
Remote repository 생성
이 부분은 local에서 작업 중인 repository(폴더)가 이미 있는 상태에서 github의 새로운 remote repository를 파서 연동하는 과정이다.
먼저, github에서 로그인 후 'Repositories'탭에 들어가 새로운 remote repository를 생성해준다.
이때, README file은 굳이 추가하지 않는다. 추가하는 경우, 로컬과 연결할 때 README 파일 때문에 pull을 해줘야 하는데, 그러면 로컬의 폴더의 기존 내용은 날아가므로 새로운 폴더를 만들어 git 설정을 해준 후에 내용을 복붙해주는 귀찮은 과정을 거쳐야 한다. 차라리 빈 repository에 로컬과 연결을 해준 후에 README파일을 나중에 추가해주는 것이 훨씬 간단하다.
(무엇보다, 빈 내용으로 만들어야 quick setup 설명이 뜨는데, 이것에 따르는 게 가장 간단하다.)
새로 생성한 빈 repository에 들어가보면 다음과 같은 quick setup 도움말이 뜬다.
도움말 중에서 '...or create a new repository on the command line'에 주목하자.
Local과 remote repository 연결
다음으로 본인 컴퓨터, 혹은 서버, 또는 도커 컨테이너 내의 local repository와 github의 remote repository를 연결해주는 과정이 필요하다.
먼저 로컬(vscode)에서 'Terminal-New Terminal' 선택 혹은 단축키 'ctrl + shift + ~'을 눌러 터미널을 켜고, 원하는 path로 들어간다.
연습 삼아 컨테이너 내의 'open3d_data'라는 폴더와 연동을 해볼 것이다.
여기서 도움말에 적힌대로 (README 생성은 제외하고) initialize, commit, branch 설정, remote 추가, push 순으로 진행한다.
git init
git add .
git commit -m "[commit message]"
git branch -M main # master가 아님에 유의!
git remote add [remote name] [remote url] # name은 보통 'origin'으로 설정함
git push -u [remote name] main
- git init : 현재 디렉토리에 '.git' 폴더를 생성한다. .git에는 git 버전 관리를 진행하기 위한 설정 등이 포함되어 있다.
- git add . : 모든 변화 상황(처음 initialize 후이므로 현재 디렉토리의 (.git 제외) 모든 내용)을 staging area라는 공간에 추가한다. 만약 폴더 내용이 없다면 '.' 대신에 도움말에서처럼 README 파일을 생성해주어도 된다.
- branch -M main : 연결할 remote repository의 branch를 설정한다. repository를 생성했을 때, default branch는 main이므로 branch를 여러 개 만들고싶지 않다면 main으로 설정해주면 된다. (예전에는 master였다.)
- git remote add [remote name] [remote url] : remote url 주소의 remote repository를 remote name이라는 이름으로 추가한다. remote name는 보통 'origin'으로 설정한다.
- git push -u [remote name] main : 바로 위에서 remote name으로 설정한 remote repository의 main branch에 staging area의 내용을 올린다. -u는 --set-upstream과 같은 옵션으로, 해당 remote repository를 default로 설정하여 다음부터는 git push만 해주어도 된다.
VSCode와 github를 처음 연동한다면, 설정해주어야 할 것이 있다. (위 명령어를 하다 보면 추가 설정이나 로그인을 요구할 것이다.)
먼저, 'git config ...' 관련하여 아이디와 닉네임을 입력하라는 문구가 뜬다면, github 아이디와 닉네임을 기입하면 간단히 해결된다.
그런데, github의 아이디와 비밀번호를 입력하여 로그인을 하다가 'authentication failed'라는 에러를 마주친다면, github의 비밀번호가 아닌 token을 입력해주어야 한다. 이 token은 다음과 같은 과정으로 생성한다.
1. github의 오른쪽 위에 본인 프로필을 클릭 - 'Settings'를 클릭한다.
2. 왼쪽 탭에서 'Developer Settings - Personal access tokens'에 들어가고, 'Generate new token'버튼을 클릭한다.
3. Token을 생성하는 창에서 허용 범위를 체크해주고, 만료일을 선택한다. 필자는 귀찮아서 전체 체크, 만료일은 없이 생성했다.
4. 생성된 token을 복사하여 VSCode에서의 로그인 시 비밀번호로 사용한다. 이때, 생성된 token은 다시 볼 수 없으므로 본인만 알 수 있는 메모장 등에 기입해둔다. 혹시 창을 지나쳤다면 다시 token을 생성해주어야 한다.
여기까지 진행하면 VSCode 왼쪽에 'source control' 탭에서 손쉽게 버전관리를 할 수 있다.
그리고 github의 repository로 돌아가보면, 다음과 같이 로컬에 있던 변경 사항이 repository에 잘 push되었음을 확인해볼 수 있다.
Source Control in VSCode
VSCode에서는 별도 extension 설치 없이도 source control을 지원한다. 일단 한 번 위 과정을 거쳤다면 터미널에서의 명령어를 기억할 필요 없이 직관적이고 쉽게 변경 사항에 대한 add, commit, push를 할 수 있다.
VSCode 상에서 README.md 파일을 만들어보자.
README.md 파일을 생성하여 아래와 같은 문구를 입력하고, 저장한다.
그다음 VSCode의 Source control 탭에 들어가보면, 다음과 같이 'Changes'에 README.md가 떠있을 것이다.
Changes 쪽에 마우스 커서를 대면 +모양의 'Stage all changes'라는 버튼이 뜨는데, 이를 클릭하자. 이 과정은 'git add' 명령어와 같은 과정이다.
그럼 'Staged Changes'에 추가한 내용이 올라가게 된다.
다음으로는 원하는 commit message를 Message 칸에 입력하고, Commit 버튼을 누른다. 이는 'git commit -m "[Messages]"'명령어와 같은 과정이다.
Commit 버튼을 누르면 Sync Changes 버튼이 생성되는데, 그 버튼을 누르면 github remote repository로 push가 된다. 이는 'git push'명령어와 같은 과정이다.
Push 이후에 github 저장소에 돌아가보면 다음과 같이 README.md 파일이 추가되어 있음을 확인할 수 있다.
Private repository 연동하기
Private repository는 보안이 강화되어 https(url)를 통한 push, pull, clone 등이 제한된다. 따라서 작업하는 공간(예를 들어 로컬, 서버, 서버의 컨테이너 등)에서 SSH key를 생성하여 github 계정에 등록한 후에 사용해야 한다.
맥이나 ubuntu의 로컬에서 작업한다고 가정한다. (서버나 컨테이너 등에서도 똑같은 방식으로 할 수 있다.)
우선, 이전에 만들어둔 적이 있는 경우에는 존재하는 파일을 그대로 사용할 수 있다. (있는 상태에서 keygen을 하게 되면 기존 파일을 덮어쓰므로 기존에 연결해두었던 곳에서 에러가 발생할 수 있으니 유의하자.)
cd ~/.ssh
ls
'id_rsa', 'id_rsa.pub' 등의 파일이 없다면 key를 생성해주자.
ssh-keygen -t rsa
key를 저장할 경로, passphrase(2차 비밀번호) 등을 입력하라고 나오는데, 원하면 해당 경로 또는 2차 비밀번호를 입력해준다. 그냥 엔터를 누르면 기본 경로('~/.ssh/id_rsa')에 2차 비밀번호 없이 만들어진다.
ls를 실행해보면 'id_rsa', 'id_rsa.pub'이라는 파일이 생성되었을 것이다. 여기서 id_rsa는 개인(private) 키로, 비밀번호를 담고 있는 파일이며, id_rsa.pub은 공용(public) 키로, 외부에 등록되어 id_rsa를 갖는 유저의 접속을 통과시켜주는 역할을 한다.
개인키는 보안 상 절대 공개되면 안되는 중요한 파일이다!
다음 명령어를 통해 id_rsa.pub(공개 키)의 내용을 출력하고, 해당 내용을 복사해두자.
cd ~/.ssh
cat id_rsa.pub
이제 복사한 내용을 github 계정에 등록해주자. Github에 로그인한 후, profile 클릭 - settings에 들어간다.
왼쪽 탭에서 'SSH and GPG keys'를 클릭하고, 'new SSH key' 버튼을 클릭한다.
여기서 원하는 Title을 입력하고, 'Key'부분에 아까 복사해뒀던 로컬의 id_rsa.pub 내용을 붙여넣고 SSH Key를 추가해준다.
이제 다시 로컬에서 ssh를 사용하여 접속해보자. (본인의 github 아이디가 아니라 git@github.com을 입력해야 한다!)
ssh -T git@github.com
매번 접속할 때마다 패스워드를 입력하기 귀찮다면 ssh-agent에 키를 등록하자. ssh-agent는 백그라운드에서 ssh 인증 정보를 관리하는 agent이다.
먼저 ssh-agent가 실행되어있는지 확인한다. (사실은 ssh-agent에 등록된 ssh 키 목록을 출력하는 명령어이다.)
ssh-add -l
'Connection refused' 에러가 발생하면 실행되어있지 않은 상태이고, ssh 키 목록 혹은 'The agent has no identities'라는 메시지가 뜨면 ssh-agent가 실행된 상태이다. ssh-agent를 실행하는 방법은 다음과 같다.
eval "$(ssh-agent -s)"
그리고 ssh-add 명령어로 키를 등록한다.
ssh-add ~/.ssh/id_rsa
이제 push, clone 등을 할 때 패스워드를 물어보지 않는다.
참고로 SSH를 사용할 경우에는 remote에 추가해줄 때 다음과 같이 입력한다.
git remote add [name] [ssh]
[name]에는 보통 'origin'을, [ssh]에는 repository에서 얻을 수 있는 ssh 주소를 입력한다. SSH 주소는 (git@github.com:사용자이름/repository이름) 형식이다.
예를 들어, 로컬에서 처음으로 git initialze부터 push까지 진행한다고 해보자. ('origin'에 'git@github.com:jjuke/private_repo.git'이라는 ssh 주소의 원격 저장소에 연결하는 경우)
git init
git add .
git commit -m "First commit for private repo"
git branch -M main # master가 아님에 유의!
git remote add origin git@github.com:jjuke/private_repo.git
git push -u origin main
Git 활용 시 유용한 팁
이미 push된 파일 gitignore 적용하는 방법
git을 활용하여 프로젝트를 관리하다보면 아무 생각 없이 remote repository에 add, commit, push한 후에 "아, 맞다. 이건 빼야하는데" 라고 생각하며 복잡하게 수정해준 후에 다시 push해주는 귀찮은 과정을 거치곤 했다.
그 대신에 간단하게 cache를 지워 다음과 같이 gitignore를 적용시켜줄 수 있다.
# .gitignore에 해당 파일(혹은 폴더) 추가 후
# 1. cache 제거
git rm --cached [무시할파일] # 파일인 경우
git rm -r --cached [무시할폴더] # 폴더인 경우
# 2. add & commit & push
git add .
git commit -m "[message]"
git push
최근댓글