[TIL] Git hub 사용방법 (Git clone/push/pull/merge/gitignore)

2023. 8. 10. 14:49Today I Learned (TIL)

길고 멋진 싸움이었다. 초보인 우리는 Git hub 와 약 하루반정도 씨름을 했고, 결국 이겼다!

Git hub 에서 clone, push, pull, merge를 할때에 주의사항 몇 가지를 적어보려 한다.

 

의미

Clone

Git hub 에 있는 뼈대코드를 말한다. 처음에는 현재 Git hub에 저장된 버전을 다운로드 받는 작업이라고 생각하면 된다. 

내 컴퓨터에 폴더를 하나 만들고, clone을 하면, Git hub 에 저장된 파일이 내 vs code에 다운받아진다.

 

Pull

남이 수정해서 Git hub에 push&merge 한 경우, 현재시점 최종버전인 main을 불러오는 기능이다. 

내가 이전버전에서 수정을 하고 있는경우, 내 vs code상에 내가 수정중인코드와 현재시점 최종버전이 합쳐지며, conflict이 날 경우 내 vs code 상에서도 확인이 가능하다.

 

Push

내가 수정한 코드를 Git hub에 올리는 작업이다. 

 

Merge

내가 수정한 코드와 현재 main 의 코드를 합치는 과정이다. 이 과정에서 conflict 가 발생할 수 있다. conflict 란, 원래 뼈대에서 개발자1과 개발자2가 각각 같은 장소의 코드를 변경했을때 일어나는 에러다. 이 경우에는 컴퓨터가 어떤것을 선택할지 모르므로, 지금 상황에서 conflict가 발생했다면, 그 conflict를 확인해서 더이상 쓰지 않는 코드를 버리고 새 코드로 바꿔주는 작업을 해주어야 한다. merge가 완료되면 새로운 최종 main이 만들어진다.

 

방법

Git Initialize

git을 처음 시작할때 가장 먼저 해줘야 할 명령어이다.

git init

 

Clone

1. 프로젝트의 github 주소를 복사한다

2. 로컬 컴퓨터(내컴퓨터)에서 프로젝트 폴더를 만든다.

3. visual studio code를 열어 해당폴더를 열어준다.

4. 터미널을 열어 다음 명령어를 입력한다. (맨 뒤에 ' .' 빼먹지 말기)

git clone <github 주소> .

 

Remote Add

다른사람이 먼저 올린 코드를 clone(복사)하는게 아니고 내가 레파지토리에 처음 코드를 올리는 것이라 하면,

다음과 같은 코드를 작성한다.

git remote add origin <github 주소>

 

Pull & Fetch

원격 저장소에서 로컬 저장소로 소스를 가져오는 명령어는 pull과 fetch가 있다. pull과 fetch의 차이는 가져온 소스를 merge 하느냐, 안하느냐의 차이이다. pull 은 원격 저장소의 소스를 가져오고, 해당소스가 현재 내 소스보다 더 최신버전일 경우, 지금의 버전을 해당 소스에 맞춰 올린다(로컬에 merge한 버전으로 가져오는 것). 반면, fetch는 소스를 가져오기만 할 뿐, merge하지는 않는다. 

git fetch 명령어이다.

git fetch origin

git fetch 명령어이다.

git log

제대로 가져왔는지 확인을 위해 git log 명령어로 확인한다.

git pull origin main

origin main 의 깃을 가져오려면 위와 같이 작성

git pull <원격 저장소 명> <branch name>

특정 저장소의 branch 를 가져오려면 각각의 저장소명과 브랜치 명을 써서 가져오면 된다.

 

 

Push

1. git branch <브랜치명> 작성

git branch feature/<branchname>

2. git switch <브랜치명> 작성

git switch feature/<branchname>

3. 코드 변경을 커밋한다.

git add .
git commit -m "edited something"

4. github에 코드를 업로드한다.

git push origin feature/<branchname>

 

Pull

1. Git hub 에서 Compare & pull request 알림 클릭

2. Create pull request 클릭

3. Conflict 이 있다면 - > Conflict 해결 (내가 만든 코드가 윗줄, 같은 부분에 다른 개발자가 수정한 부분이 아래에 뜨는데, 둘 중 어느 코드로 진행할지 결정해서 나머지 코드는 지워준다)

4. Conflict 이 모두 해결되었거나, conflict이 없다면 "Merge pull request" 클릭

5. Confirm merge 클릭하면 최종적으로 코드가 합쳐진다. 

 

 

주의사항

Pull

clone을 로컬 컴퓨터 폴더로 할 것인데, 처음 저장해놓았던 폴더 이름을 변경할 경우 문제가 생긴다. 폴더 이름은 처음 그대로 유지하도록 한다.

 

Git Ignore

Github 에 venv 파일은 올리지 말아야 하는데, 이 경우 gitignore 파일을 만들어서 venv와 이외 git에 올리지 말것들을 적어주어야 한다. (예를들면 투명망토를 입히는 거라고 생각하면 된다...) 그런데 gitignore를 만든다고 파일이나 폴더들을 지워주는 것은 아니다. 이미 repository 있으니 지워주고 다시 가져와야 한다.

git rm -rf --cached .
git add .

 

위와 같이 작성하면 해결된다.

 

특이사항

같은 프로젝트를 각기 다른 두개의 repository에 올리는 경우

내가 만드는 프로젝트를 내 github에 올리고 있다가, 그 프로젝트를 다른 깃헙에 올리려고 할때.

이럴때에는 지금 사용중인 project에서 깃을 지우고, 새로운 깃주소로 시작하면 된다. 

그러나 이 경우, 새로운 깃주소로 다시 올릴때에는 지금까지 했던 commit history는 남지 않기 때문에 왠만하면 자주 있는 일은 아니다.

ls -al

로 내 프로젝트 폴더 안에 '.git' 이 있는지 확인한다. 보통 mac의 경우, '.'으로 시작하는 폴더는 폴더안에 보이지 않고 숨겨져 있는 경우가 많기 때문에 위 명령어로 파악하는 것. '.git'이 있는것이 확인되었다면 지워야 한다.

rm -rf .git

깃폴더를 지우는 명령어이다. 이걸 지우고 나면 다시 처음부터 git init 부터 새로운 repository 주소로 시작하면 된다.

 

참고

https://teamsparta.notion.site/230807-Git-aff1ea525e3d4e589094e3ca459ca272