Git 버전 관리 (Git Version Control)

컴퓨터과학·AI
한 줄 정의: 소스 코드의 변경 이력을 시간순으로 기록하고, 여러 사람이 동시에 협업하며 코드를 관리할 수 있게 해주는 분산 버전 관리 시스템.

쉽게 풀면

Git은 코드가 바뀔 때마다 그 변경 내용을 스냅샷처럼 저장해 두는 도구이다. 언제, 누가, 무엇을, 왜 바꿨는지 기록이 남기 때문에 실수로 코드를 망가뜨려도 예전 버전으로 되돌릴 수 있고, 여러 사람이 각자 다른 부분을 동시에 수정한 뒤 나중에 합칠 수도 있다. 연구 코드에서도 실험별로 다른 버전의 코드를 관리하거나, 논문에 실린 코드를 정확히 어떤 상태로 공개했는지 표시하는 데 Git이 널리 쓰인다.

왜 중요한가

연구 결과의 재현성은 최근 여러 학문 분야에서 핵심 평가 기준으로 자리 잡았고, Git은 코드와 실험 설정을 재현 가능한 형태로 남기는 가장 기본적인 도구이다. 소프트웨어공학·머신러닝처럼 코드 자체가 연구 산출물인 분야에서는 실험 이력 관리와 협업 워크플로가 논문의 신뢰도와 직결되기 때문에 자주 언급된다. 오픈사이언스 운동과 맞물려 코드 공개 여부, 버전 고정 여부가 심사 과정에서도 점점 중요하게 다뤄지고 있다.

논문에서는 이렇게 쓰입니다

"실험에 사용된 전체 코드는 GitHub 저장소에 공개되어 있으며, 특정 커밋 해시로 버전을 고정하였다."

연구팀이 코드를 깃허브에 공개하면서, 계속 바뀌는 최신 버전이 아니라 특정 시점의 고정된 코드 상태(커밋)를 명시해 재현성을 보장했다는 뜻이다.

"데이터 전처리 파이프라인과 모델 학습 스크립트는 별도의 브랜치로 관리되었으며, 최종 결과는 main 브랜치에 병합된 시점의 코드로 산출되었다."

소프트웨어공학 연구에서 여러 갈래로 나뉜 개발 흐름(브랜치)을 어떻게 관리했고 최종 결과가 어느 시점의 코드로 만들어졌는지 명시한 예이다.

"각 실험 조건에 대한 설정 변경 이력은 커밋 로그를 통해 추적 가능하며, 부록에 해당 커밋 목록을 정리하였다."

여러 실험 조건을 비교하는 연구에서, 조건별 코드 변경 사항을 하나하나 커밋으로 남겨 추적성을 확보했다는 표현이다.

조금 더 깊게 보면

Git은 파일 변화량을 저장하는 것이 아니라 매 커밋마다 프로젝트 전체의 스냅샷을 저장하는 방식으로 동작하며, 이 덕분에 임의의 과거 시점으로 빠르게 되돌아갈 수 있다. 여러 작업 흐름을 나누는 브랜치, 나뉜 작업을 합치는 머지, 특정 시점을 기념하는 태그 등의 개념이 함께 쓰이며, 논문 재현성 맥락에서는 특정 커밋 해시나 릴리스 태그를 명시하는 것이 "코드를 공개했다"는 것보다 한 단계 더 엄격한 표기 방식으로 여겨진다.

주의할 점

논문에서 코드가 공개되어 있다고 해도 특정 커밋이나 태그로 버전이 고정되어 있지 않으면, 이후 코드가 계속 바뀌어 논문 당시 결과를 재현하기 어려울 수 있다.

관련 용어