BioPlayground

🧬
목록으로

Git으로 실험 코드 버전 관리하기

분석 코드와 실험 기록을 Git으로 관리하는 법. 생물학 연구자 맞춤 버전 관리 입문.

입문
|
75
|
검증 완료 (2026-06)
버전관리재현성프로토콜실험노트GitHub
트랙 진행률0/6 (0%)

Git으로 실험 코드 버전 관리하기

이 토픽을 마치면

Git으로 분석 코드의 변경 이력을 기록하고, 과거 버전으로 되돌리고, GitHub에 백업할 수 있습니다.


Git이 필요한 이유

연구실에서 이런 파일명을 본 적 있나요?

text
analysis_final.py
analysis_final_v2.py
analysis_final_v2_교수님수정.py
analysis_final_v2_교수님수정_진짜최종.py

Git은 하나의 파일에 모든 변경 이력을 저장합니다. 파일을 복사할 필요가 없습니다.

설치 & 초기 설정

Google Colab에는 Git이 이미 설치되어 있습니다. 이름과 이메일만 설정하면 됩니다.

bash
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
# 설정 확인
git config --list --global | grep user

첫 번째 저장소 만들기

git init은 빈 실험 노트를 새로 펴는 것과 같습니다.

bash
# 실습용 디렉토리 생성 + Git 초기화
mkdir -p /tmp/bio-analysis && cd /tmp/bio-analysis
git init
# .git 폴더가 생성됨 (Git이 이력을 저장하는 곳)
ls -la .git/

첫 번째 커밋: 스냅샷 찍기

커밋(commit)은 실험 노트에 날짜를 찍고 "여기까지 완료"라고 적는 것입니다.

bash
cd /tmp/bio-analysis
# 분석 스크립트 생성
cat > gc_analysis.py << 'SCRIPT'
"""GC Content 분석 스크립트 v1"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
}
for name, seq in sequences.items():
print(f"{name}: GC={calculate_gc(seq):.1f}%")
SCRIPT
# Git의 3단계: 작업 → 스테이징 → 커밋
git add gc_analysis.py # 1. 스테이징 (사진 찍을 파일 선택)
git status # 확인: 초록색 = 스테이징됨
git commit -m "feat: GC content 분석 스크립트 초기 버전" # 2. 커밋 (스냅샷!)
# 이력 확인
git log --oneline

변경 추적: diff로 차이 보기

논문 교정 시 변경 사항을 빨간 펜으로 표시하듯, git diff는 무엇이 바뀌었는지 보여줍니다.

bash
cd /tmp/bio-analysis
# 기존 파일이 없으면 생성
if [ ! -f gc_analysis.py ]; then
git init
cat > gc_analysis.py << 'SCRIPT'
"""GC Content 분석 스크립트 v1"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
}
for name, seq in sequences.items():
print(f"{name}: GC={calculate_gc(seq):.1f}%")
SCRIPT
git add gc_analysis.py
git commit -m "feat: GC content 분석 스크립트 초기 버전"
fi
# 스크립트 수정: EGFR 유전자 추가
cat > gc_analysis.py << 'SCRIPT'
"""GC Content 분석 스크립트 v2 — EGFR 추가"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
"EGFR": "ATGCGACCCTCCGGGACGGC",
}
for name, seq in sequences.items():
gc = calculate_gc(seq)
label = "HIGH" if gc > 60 else "NORMAL"
print(f"{name}: GC={gc:.1f}% [{label}]")
SCRIPT
# 변경 사항 확인
git diff gc_analysis.py
# 커밋
git add gc_analysis.py
git commit -m "feat: EGFR 추가 + GC 60% 이상 HIGH 라벨"
git log --oneline

되돌리기: 과거로 여행

실험이 실패했을 때 이전 프로토콜로 돌아가듯, Git은 어떤 시점으로든 되돌아갈 수 있습니다.

bash
cd /tmp/bio-analysis
# 기존 환경이 없으면 생성
if [ ! -d .git ]; then
git init
git config user.name "Test" && git config user.email "test@test.com"
echo "v1" > gc_analysis.py
git add gc_analysis.py && git commit -m "v1"
echo "v2" > gc_analysis.py
git add gc_analysis.py && git commit -m "v2"
fi
# 이력 보기
git log --oneline
# 특정 파일만 이전 커밋 상태로 되돌리기
FIRST_COMMIT=$(git log --oneline | tail -1 | cut -d' ' -f1)
echo "첫 번째 커밋: $FIRST_COMMIT"
# 현재 내용 확인
echo "--- 현재 ---"
cat gc_analysis.py
# 첫 번째 커밋의 내용 확인 (되돌리기 전 미리보기)
echo "--- 첫 커밋 ---"
git show $FIRST_COMMIT:gc_analysis.py

주의: git checkout -- 파일명은 수정 사항을 되돌립니다 (커밋하지 않은 변경이 사라짐). 중요한 변경은 먼저 커밋하세요.

.gitignore: 추적 제외

실험에서 중간 산물(intermediate)은 보관하지 않듯, Git에서도 큰 데이터 파일이나 임시 파일은 제외합니다.

bash
cd /tmp/bio-analysis
# .gitignore 생성 — 바이오 프로젝트용
cat > .gitignore << 'EOF'
# 대용량 데이터 (Git에 넣지 않음)
*.fastq
*.fastq.gz
*.bam
*.sam
# Python 캐시
__pycache__/
*.pyc
.ipynb_checkpoints/
# 환경 설정 (개인 정보 포함 가능)
.env
*.log
# OS 파일
.DS_Store
Thumbs.db
EOF
# 테스트: 큰 파일을 만들어도 Git이 무시하는지 확인
echo "fake fastq data" > sample.fastq
git status # sample.fastq가 Untracked에 안 나오면 성공

직접 해보기 (Faded Example)

아래 빈칸을 채워 Git의 기본 워크플로를 완성하세요.

빈칸 채우기bash
# 1. 새 저장소 만들기
git
# 2. 파일을 스테이징 영역에 추가
git analysis.py
# 3. 스냅샷 저장
git -m "first analysis script"

흔한 에러 & 해결법

Q: fatal: not a git repository

현재 디렉토리가 Git 저장소가 아닙니다. git init으로 초기화하거나, cd로 Git 저장소 폴더로 이동하세요.

Q: nothing to commit, working tree clean

변경 사항이 없습니다. 파일을 수정한 후 git add하세요. 이미 git add한 후라면 이미 커밋된 상태입니다.

Q: 실수로 큰 FASTQ 파일을 커밋했습니다

.gitignore*.fastq를 추가한 후, git rm --cached sample.fastq로 추적을 해제하세요 (파일 자체는 삭제되지 않음).

Q: 커밋 메시지를 잘못 썼습니다

git commit --amend -m "새 메시지"로 마지막 커밋 메시지를 수정할 수 있습니다 (아직 push하지 않은 경우에만).


다음 글에서는 Python으로 실험 데이터를 시각화하는 법을 배웁니다.