GitHub 협업
학습 목표
여러 사람이 같은 파일을 바꿀 때, 변경 내용을 잃지 않고 합치는 과정을 안전한 로컬 예제로 익힙니다.
실행 조건
기준 실습은 임시 Local Git 저장소를 사용합니다. GitHub 계정이나 원격 저장소 연결 없이 변경·Branch·Merge를 확인할 수 있습니다.
한 파일의 변경 추적
시작 조건
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 코드 블록.
from pathlib import Path
import tempfile, subprocess
lab_tmp=tempfile.TemporaryDirectory(prefix='course-git-')
repo=Path(lab_tmp.name)
def git(*args):
return subprocess.check_output(['git','-C',str(repo),*args],text=True).strip()
git('init','-b','main');git('config','user.name','Learner');git('config','user.email','learner@example.invalid')
(repo/'README.md').write_text('Robot experiment\nCondition: baseline\n')
git('add','README.md');git('commit','-m','Record baseline')
print(repo,git('log','--oneline'))
결과 기록·자가 점검
단계:
파일 내용:
작업 트리 상태:
Commit 메시지:
확인할 점
- 파일의 변경과 Commit된 이력이 구분되는가?
- 기록에 비밀번호나 토큰이 없는가?
Branch에서 실험 조건 분리
시작 조건
같은 저장소에 experiment Branch를 만들고 README.md에 Rate: 10 Hz를 추가합니다.
진행 방법
- experiment에서 Commit한 뒤 main으로 돌아가 파일 내용을 비교하세요.
- 두 Branch의 이력을 log –oneline –all –graph로 확인하세요.
- main에 Merge한 후 파일과 이력에 무엇이 남는지 적으세요.
남길 결과
- Branch 전후 표와 이력 텍스트 또는 캡처 1개.
# 앞 셀의 repo와 git 함수를 사용합니다.
print(git('branch','--show-current'))
# TODO: experiment Branch를 만들고 변경·Commit·Merge를 기록하세요.
결과 기록·자가 점검
Branch·단계:
README 내용:
HEAD Commit:
변경의 위치:
확인할 점
- Branch를 바꾸기 전 작업 트리가 깨끗한가?
- Merge 전 main 파일과 Merge 후 main 파일을 실제로 읽었는가?
충돌을 재현하고 해결
시작 조건
main과 experiment에서 같은 Condition 줄을 서로 다른 값으로 수정해 각각 Commit합니다.
진행 방법
- Merge를 시도하고 충돌 표시가 생긴 파일을 보관하세요.
- 선택한 최종 조건을 한 줄로 정리해 충돌을 해결하고 Commit하세요.
- 서로 다른 줄을 수정했을 때와 같은 줄을 수정했을 때의 차이를 설명하세요.
남길 결과
- 충돌 전후 코드 블록과 해결 근거 3문장.
print(git('status','--short'))
# TODO: 같은 줄의 충돌을 만들고 최종 변경을 기록하세요.
결과 기록·자가 점검
상황:
Merge 결과:
선택한 최종 문장:
선택 이유:
확인할 점
- 충돌 표식 <<<<<<<, =======, >>>>>>>이 최종 파일에 남지 않았는가?
- 해결 후 git status가 깨끗한가?