깃허브로 협업하는 간단한 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 |