수행 내용
- 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에 등록된다.
참고링크