Github로 협업하기

민석삼 2025. 2. 27. 18:31

깃허브로 협업하는 간단한 flow를 알아보자

 

Step 1. git clone으로 원격 저장소에서 프로젝트 받아오기

협업을 위해서는 원격 저장소에서 프로젝트를 내 컴퓨터, 내 로컬 환경으로 가져와야 한다. 

이때 사용하는 명령어가 git clone

git clone <원격 저장소 주소>

 

깃허브의 원격 저장소에 업로드된 프로젝트를 가져오기 위해 그 저장소의 깃허브 페이지에 들어가보자

일반적으로 https 주소를 활용

download ZIP 파일로 다운받아서 사용해도 되지 않은가? 왜 주소를 사용해서 클론받아 하는가?

git clone download zip
git clone을 통해 프로젝트를 받으면 commit 이력이나 다양한 깃의 설정 정보들을 담은 .git이라는 숨김 폴더가 함께 받아짐 download zip파일로 그냥 프로젝트 자체를 파일로 받으면, .git이라는 폴더가 포함되지 않음

우리가 이 저장소를 타겟으로 소스를 수정하는 것을 반영하기 위해 clone하는 건데, 단순히 파일만 받고 실제로 반영할 수 없다면 협업에는 적절하지 않은 상황이 될 것임. (.git이 있어야 반영할 수 있으니까)

 

git clone https://github.com/[계정명]/[프로젝트명].git

깃허브 메인 도메인의 구조: https://github.com/[계정명]/[프로젝트명].git

git으로 저장소가 되어 있는 주소는 끝이 .git으로 끝남. 끝이 .git이 아닌 경우에는 git clone으로 데이터를 불러올 수 없다

위 명령어를 실행하면, 해당 프로젝트 명의 폴더가 만들어지고, 그 폴더 내에 웹에서 확인할 수 있었던 파일을 다운받게 됨.

원격 저장소에 있는 프로젝트, 파일을 내 로컬 환경에 가져옴

main 브랜치의 test.txt를 이렇게 편집하고, 커밋으로 새로운 버전을 찍기

Step 2. 브랜치 이동

브랜치를 설정할 수 있는 checkout 명령어 (브랜치를 이동)

git checkout -b <브랜치명>
git checkout <브랜치명>

main이라는 중심 줄기에서 새로운 줄기를 뻗어 나가, 나만의 또는 특정 기능을 위한 작업 공간을 만들어 내는 명령어

최초에 branch를 할당받으면 main에서 시작

새로운 기능을 만들거나 수정할 때 main 버전이 아니라 복사본인 branch를 만들어, 작업 후에 test를 다 마치고 main에 합쳐주는 것이 일반적인 협업 과정

-b 옵션: 신규 브랜치를 만들면서 그 브랜치로 이동하는 옵션

git checkout -b feature-1

이 명령어를 수행하면 새로운 브랜치 feature-1이 만들어지면서 내 위치가 해당 브랜치로 이동하게 됨

그래서 현재 작업중인 working directory가 main이 아니라 새로운 브랜치 feature-1을 바라보게 됨

이제 main 브랜치에 영향을 주지 않으면서 feature-1에서 자유로운 작업을 진행할 수 있게 됨

이제 main에 간섭받지 않는 새로운 브랜치(feature-1)에 옴

feature-1 브랜치의 test.txt를 위와 같이 편집함

feature-1에서 작업을 마친 후 해당 변경 사항을 main에 반영해야 함

main에 반영하기 위해서, feature-1에 커밋을 통해 새로운 버전을 찍어줘야 함

git commit -m <메세지>

커밋을 하면 지금까지 작업한 new 버전이 로컬 저장소의 feature-1 브랜치에 올라가 있을 것

feature-1이라는 브랜치에 대해서 새로운 버전(커밋)을 만든 것

이 상태

 

이제 이걸 main 브랜치와 합쳐주자!

합치기 (merge)를 하기 전에 다시 main으로 돌아가야 함

git checkout main

해당 명령어를 통해 main으로 돌아감 (working directory에서 커밋하면 로컬 저장소의 main 브랜치에 올라가게 했다는 뜻)

 

Step 3. 합치기 (merge)

git merge <브랜치명>

변경 사항을 하나의 줄기에 합쳐줄 때 사용하는 명령어 merge

main을 바라보고 있는 상태에서, merge 명령어 뒤에 합칠 브랜치 명을 입력해주면 해당 브랜치의 변경 사항을 메인에 합쳐 새로운 버전을 찍어줌

git merge feature-1

feature-1의 변경사항을 반영하여 main에 새로운 버전을 찍어준 모습

 

만약 서로 다른 브랜치의, 같은 위치의 코드가 다르다면?

정상적으로 병합이 이루어지지 않고 실패함

동일한 곳의 소스가 같지 않아서 발생한 충돌: conflict

 

같은 파일의 같은 곳에 내용이 다르기 때문에, 두 커밋 중 어떤 것을 택해서 합쳐야 할 지 판단하지 못하는 것

따라서 개발자로 하여금 여기에 어떤 값으로 할 건지 정해서 커밋한 후에 다시 작업하라는 메세지를 주는 것이다

이 두 커밋 중 어떤 것을 택해서 반영할 지 확인해라를 conflict를 발생시켜 개발자에게 보여주는 것

 

conflict 해소

해당 부분을 지우고 최종 main에 반영할 소스로 수정하고, commit한 후에 다시 병합 작업을 진행하면 됨

main과 feature-1의 같은 위치의 코드가 달라서 발생한 conflict

<<<< HEAD는 main 브랜치(현재 브랜치)의 가장 최신 상태

>>>> feature-1은 합치려고 했던 feature-1 브랜치의 최신 상태

로그가 개발자에게 conflict를 고치고 커밋하라는 안내를 해주는 것

둘 중 하나의 값을 고르거나 둘 다 아닌 제 3의 값을 정해주면 됨

 

이렇게 저장하고 커밋

커밋을 마치면 머지가 완료된다.

feature-1의 브랜치가 합쳐지는 과정에서 두 번째 줄만 내가 선택한 것. feature-1의 다른 변경사항들은 정상적으로 반영된다.

 

'' 카테고리의 다른 글

Git GUI 활용  (0) 2025.02.27
GitHub에 소스 반영  (0) 2025.02.26
로컬 git 저장소 생성 실습  (0) 2025.02.25
로컬 Git 저장소 생성  (0) 2025.02.25
Git 동작 흐름과 구성 요소  (0) 2025.02.25