GitHub 협업
여러 사람이 같은 파일을 바꿀 때, 변경 내용을 잃지 않고 합치는 과정을 안전한 로컬 예제로 익힙니다.
실습 전에
01 Commit과 Branch는 무엇을 보관할까요?
설명
Commit은 변경 이력의 한 지점, Branch는 그 이력을 가리키는 이름입니다.
02 같은 줄을 다르게 수정하면 왜 자동 Merge가 어려울까요?
설명
서로 다른 의도를 Git이 결정할 수 없으므로 사람이 원하는 최종 내용을 정해야 합니다.
실행 조건
기준 실습은 임시 Local Git 저장소를 사용합니다. GitHub 계정이나 원격 저장소 연결 없이 변경·Branch·Merge를 확인할 수 있습니다.
1. 한 파일의 변경 추적
시작 조건
repo는 Notebook 커널이 실행되는 컴퓨터의 임시 저장소입니다. 그 안의 README.md에서 Condition: baseline을 Condition: test로 바꿉니다.
진행 방법
- 기준 Commit을 확인한 뒤 같은 Notebook의 새 코드 셀에서
repo/'README.md'를 읽고 해당 문장 한 줄만 바꾸어 저장하세요. 파일 경로는 repo를 기준으로 사용합니다. - 제공된
git(*args) 함수를 코드 셀에서 호출해 diff와 status를 기록하세요. 예를 들어 print(git('diff'))로 변경 내용을 표시할 수 있습니다. - 변경을 Commit한 뒤 직전 Commit과의 차이를 다시 확인하세요.
남길 결과
- 수정 전·후·Commit 후의 3행 표와 diff 코드 블록.
기록 항목과 확인할 점
- 단계
-
- 파일 내용
-
- 작업 트리 상태
-
- Commit 메시지
-
확인할 점
- 파일의 변경과 Commit된 이력이 구분되는가?
- 기록에 비밀번호나 토큰이 없는가?
2. Branch에서 실험 조건 분리
시작 조건
같은 저장소에 experiment Branch를 만들고 README.md에 Rate: 10 Hz를 추가합니다.
진행 방법
- experiment에서 Commit한 뒤 main으로 돌아가 파일 내용을 비교하세요.
- 두 Branch의 이력을 log --oneline --all --graph로 확인하세요.
- main에 Merge한 후 파일과 이력에 무엇이 남는지 적으세요.
남길 결과
- Branch 전후 표와 이력 텍스트 또는 캡처 1개.
기록 항목과 확인할 점
- Branch·단계
-
- README 내용
-
- HEAD Commit
-
- 변경의 위치
-
확인할 점
- Branch를 바꾸기 전 작업 트리가 깨끗한가?
- Merge 전 main 파일과 Merge 후 main 파일을 실제로 읽었는가?
3. 충돌을 재현하고 해결
시작 조건
main과 experiment에서 같은 Condition 줄을 서로 다른 값으로 수정해 각각 Commit합니다.
진행 방법
- Merge를 시도하고 충돌 표시가 생긴 파일을 보관하세요.
- 선택한 최종 조건을 한 줄로 정리해 충돌을 해결하고 Commit하세요.
- 서로 다른 줄을 수정했을 때와 같은 줄을 수정했을 때의 차이를 설명하세요.
남길 결과
기록 항목과 확인할 점
- 상황
-
- Merge 결과
-
- 선택한 최종 문장
-
- 선택 이유
-
확인할 점
- 충돌 표식 <<<<<<<, =======, >>>>>>>이 최종 파일에 남지 않았는가?
- 해결 후 git status가 깨끗한가?