Git: 버전관리
1. 원격 저장소(Remote repository)
가장 먼저 git으로 버전관리를 하고있는 프로젝트를 다른 사람들과 협업하기 위해서는 공통의 원격 저장소가 있어야 합니다. 이를 우리는 remote repository
라고 합니다. 우선 깃허브 사이트에 들어가 remote repository를 만들어 보겠습니다.
Repository의 이름, Private 유무 등을 정한 후 Create repository버튼을 눌러줍니다.
아래와 같이 git으로 관리하고 있던 폴더가 없는 경우(위)와 이미 관리하고 있는 폴더가 있는 경우(아래)에 따라 다음 명령을 차례대로 입력해주면 됩니다. 저는 폴더가 없기 때문에 위와 같은 방법으로 진행해 보겠습니다.
2. Git으로 버전 관리하기(Git init)
원하는 위치에 git으로 관리하고자 하는 폴더를 생성합니다. 그리고 git init
이라는 명령어를 입력해줍니다.
git init
왼쪽과 같이 .git이라는 폴더가 생성되었습니다. 이 폴더에 저희가 앞으로 저장할 파일들의 버전이 저장되며 저희를 이 폴더를 Local repository
라고 합니다.
3. Remote repository와 Local repository 연결하기
두 repository를 서로 연결해줍시다.
git remote add origin https://github.com/kimziont/deep_dive_into_git.git
4. branch 이름 바꾸기
예전에는 중심이 되는 branch이름을 master라고 했는데, 어감상 별로였던 건지 요즘에는 중심 branch의 이름을 main으로 설정하는 경향이 있습니다. 저희도 대세를 따르기 위해 main으로 이름을 바꿔주겠습니다.
git branch -M main
5. 처음 push 할 때는
처음 push를 이용해 Local repository의 버전을 Remote repository에 반영할 때는 다음과 같은 명령어를 입력합니다.
git push -u origin main
6. 오류가 났을 경우
다음과 같은 오류가 났다면 이유는 바로 push할 커밋이 하나도 없어서 그렇습니다. 혹은 Remote repository에는 있지만 Local directory에는 없는 파일이 있을 경우에도 다음과 같은 오류가 납니다. 하지만 저희는 지금 전자에 해당하는 경우이므로 커밋할 파일을 하나 만들어줍시다. (원하지 않으면 당장 만들어주지 않아도 됩니다. 다만 다음에 커밋을 푸시할 일이 있을 때 git push -u origin main을 입력해주면 됩니다.) 저는 README.md 파일을 하나 만들어서 commit을 하고 push해 주었습니다.
# README.md 파일 생성
hello_git
# staging area에 등록
git add .
# commit해서 Local repository에 버전 저장
git commit -m "README.md update"
# github에 push
git push -u origin main
Git으로 다른 사람의 코드 받아오기
Github를 돌아다니며 마음에 드는 코드를 자신의 Local환경에 가져오고 싶을 때가 있습니다. 그럴 때 사용하는 명령어가 바로 git clone입니다.
git clone https://github.com/dennybritz/cnn-text-classification-tf.git
원하는 Local 환경의 위치에서 이동해 다음 명령어를 입력하면 git으로 버전관리를 받는 폴더가 생성됩니다. 저는 제가 앞에서 생성했던 폴더에 clone해보겠습니다.
├── README.md
├── .git
└── cnn-text-classification-tf
├── .git
├── LICENSE
├── README.md
├── data
├── data_helpers.py
├── eval.py
├── text_cnn.py
└── train.py
다음과 같이 .git폴더가 두개가 있어서 하나만 남기고 지우도록 하겠습니다.
├── README.md
├── .git
├── LICENSE
├── data
├── data_helpers.py
├── eval.py
├── text_cnn.py
└── train.py
다음과 같이 Local에 파일들을 가져왔습니다. Remote repository에 push해도 되지만, 저는 지금 git을 다루는 것이 목적이기 때문에 조금 더 단순한 파일 구조를 사용하기 위해 이 파일들은 삭제하도록 하겠습니다.