-Open UP에서 공개SW 실습교육 2일차-
1. Fork 저장소와 오픈소스 GitHub 저장소 설정
**upstream으로 등록 <팀프로젝트 깃허브 저장소>**
git remote add upstream (오픈소스 github 프로젝트 URL)
upstream을 fork한 저장소의 url을 넣지 않도로 주의*
현재 등록된 저장소 확인
git remote -v
2. Rebase가 필요한 상황
팀프로젝트 498commits (를 가져온 내용) => base commits
base commits위에 다른 499,500번째 commit을 만들어내고, 이 달라진 부분을 제출할 수 있음
Q. base는 항상 똑같은가?
A. No. 팀프로젝트가 혼자 하는 것이 아니기 때문에, 계속 바뀌게 된다.
Rebase란?
- base를 교체하는 방식
<git rebase vs merge>
기능에 집착하면 이 둘의 차이를 이해하기 어렵다..
"rebase이 왜 필요한지", "협업 과정"에 중점을 두고 이해할 것
혼자 local branch 상에서 rebase는 잘 쓰지 않음(거의 없음)
아래와 같은 사고 과정을 통해 이해해보면,,
같은 파일 내에서 다른 사람 것이 먼저 Merge가 되는 경우, 다른 사람의 commit 과 나의 commit이 충돌이 될 수 있음!
Q. 왜 충돌이 발생할까?
A. 같은 file을 건드렸기 때문에
Q. 충돌이 발생하지 않는다면, 왜 발생하지 않을까?
A. 다른 File을 건드려서
Q. 충돌이 발생할 확률이 높을까?
A. 발생할 확률이 낮음. 같이 협업을 하기 위해 폴더나 파일을 잘 나눈다는 등, 이미 설계가 잘 되어 있음. (이미 설계적으로 방지가 되어있음) 하나의 파일을 몇천명의 사람들이 수정해서 충돌이 발생하는 경우는 rebase의 할아버지가 나타나도 해결할수없음ㅋㅋ 잘 된 분업화, 모듈화, 등등 잘 쪼개놨기 때문에 충돌이 발생할 확률이 낮음
Q. 충돌이 발생하는 상황
A. Rebase 요청 -> 최신 역사로 베이스를 업데이트
<Rebase를 수행하는 과정>
fetch는 upstream에 있는 최신 commit들을 가져오는 것! 같이 협업하기 때문에, 다른 사람들의 작업을 가져오는 것은 항상 있는 일
즉, fetch는 rebase와 관련 X, 단순히 가져오는 역할!
1. pull = fetch +merge
(.git 폴더 히스토리 창고에다 넣어둔다)
2. git fetch upstream master
(내부 브랜치가 자동 생성됨 -> "upstream/master" )
3. git rebase upstream/master
Q. 이 명령어에서 문제가 생길 수 있을까?
A. "File이 같은지"가 중요!! 아래 빨간색과 보라색이 파일이 같을 경우, 충돌이 발생함
** base가 바뀌는 부분과 commit간의 충돌이 나는 부분을 구분해야함!
4. git push origin (branch 명) --f
Fork 부분을 갱신하는 작업
-f : force 옵션
force는 쓰지 말라는데, 왜 쓰면 안 되는 지가 중요!
공식 오픈소스 프로젝트에서는 base를 갱신한다던지, 중간 commit을 빼버린다던지, 등등 문제가 발생할 수 있기 때문에 "Force Push"를 잘 사용하지 않음
하지만, Fork한 프로젝트에서는 "Force Push" 사용 가능, Force Push는 달라진 점만 push하기 때문에 자주 사용
fork 프로젝트 (commit 1, commit 2)
local 프로젝트 (commit 1, commit 2, commit 3)
이렇게 commit이 새롭게 추가된 경우에는 push가 가능하지만,,
fork 프로젝트 (commit 1, commit 2)
local 프로젝트 (commit 1, commit 2-1, commit 3)
이렇게 중간에 commit이 수정된 경우에는 force push가 필요함!
'Computer Science > git&github' 카테고리의 다른 글
Stash vs Checkout (0) | 2022.02.16 |
---|---|
Branch 에서 소스파일 생성 및 수정 (0) | 2022.02.16 |
개발자가 오픈소스 읽는 방법 (0) | 2022.02.16 |
기본 Git&Github 협업과정 (0) | 2022.02.16 |
[git & github] 깃허브 (0) | 2020.05.18 |