수행 내용
- Git, GitHub 학습
- Git 사용을 위한 초기 설정
- GitHub Repository 생성
- 모둠원 GitHub Repository fork, 로컬 저장소 clone, 충돌 유도 및 충돌 해결
- Pull Request (PR)를 수행하는 일련의 과정 (저장소 fork, local repo로 clone, 수정/staging/commit/push)
- 신규 프로젝트 fork 및 모둠원 Collaborator 초대
학습 내용
버전 관리 시스템 (VCS)
- 파일의 변경이력을 기록하여 관리를 용이하게 해주는 것
Git
가장 잘 알려져 있고 널리 사용하는 VCS

Local / Remote Workflow

Source: Git Tower - Learn Version Control With Git (Online Book)
- Working Directory: 실제 작업 공간, 실제 파일들로 이루어져 있음.
git add 명령을 통해 Staging Area로 이동
- Staging Area (Index): Git이 변경 이력을 관리하는 부분
git commit 명령을 통해 Local Repository로 이동
- Local Repository: 이번 변경에 대한 확정본 (commit) 저장
git push 명령을 통해 Remote Repository로 이동
- Remote Repository: 외부 서버에 위치하여 변경 이력을 기록하는 부분
git clone 명령을 통해 내 Remote Repository에 있는 저장소 또는 다른 사람의 저장소의 자료 복제 가능
git pull 명령을 통해 이미 remote 설정이 되어있는 저장소의 업데이트 다운로드 가능
git clone은 아래 과정을 함께 수행하는 것으로 자동으로 remote 설정이 필요한 초기 다운로드에 활용
git init (git 프로젝트 시작)
git remote add origin {url} (url을 원격 저장소로 지정)
git pull origin master (원격 저장소 내용을 현재 master에 받아옴)
프로젝트 시 Git과 GitHub의 활용
문제점 / 고민한 점
다른 사람의 저장소에 대한 git push 명령 거부
git clone을 통해 다른 사람 저장소 자료를 내 작업 공간으로 가져온다고 해서 push까지 자유롭게 할 수 있는 것은 아니다 (당연한 사실이지만 처음 거부 당했을 때는 당황했음).
충돌 유도 및 충돌 해결
- 처음 경험한 충돌은 서로 다른 브랜치에서 같은 파일을 수정하여 병합하는 과정에서 발생했다.
- 두번째는 타인의 저장소에 Collaborator로 등록된 상태에서 main branch의 같은 파일을 서로 다른 내용으로 수정하여 push하는 과정에서 발생했다.
해결 방법
[해결] 다른 사람의 저장소에 대한 git push 명령 거부
- Kio가 저장소 내 Collaborator 초대 기능을 알려주어 해결하였음.
- Collaborator 설정은 저장소 Settings - Manage Access란에서 할 수 있다.
- 이와 같이 직접적으로 타인의 저장소에 기여하는 방법(저장소 주인이 Collaborator를 완전히 신뢰하는 경우)이 있고 , fork를 통해 내 저장소로 복제해와서 직접 작업 후 Pull Request (PR)를 통해 기여하는 방법(제거 어때요..? 괜찮으시면 반영해보쉴..?)이 있다는 내용을 학습함.
[해결] 충돌 유도 및 충돌 해결
- GitHub는 이처럼 서로 다른 작업 내용이 덮어씌워지려고 하는 경우 감지하여 충돌을 발생시키는 것으로 이해되며, push하고자 하는 사람의 작업물에 이전에 push한 내용을 함께 알려줌으로써 최종본을 만들 수 있게끔 도와준다.
- 최종본을 확정하여 다시 push하면 정상적으로 Remote Repository에 등록된다.
참고링크