백업이기도 한 저장소
이 저장소들은 사설이고 교리를 하나 지고 있어. 각각이 그 안의 작업에 대한 자기 완결 척추라는 것. 체크아웃이 있는 곳이면 어디서든 빌드되고 돌아가. 레지스트리 계정도, 5년 뒤에 있을지 없을지 모르는 서비스에 대고 하는 락파일 해석도, 누가 시작하기 전에 세워야 하는 내부 패키지 서버도 없이.
복사본은 그 성질을 정확히 지켜. 패키지는 과소평가되기 쉬운 방식으로 그걸 부숴. 체크아웃이 더 이상 코드가 아니게 되거든. 코드에서 의존성을 뺀 것 더하기 의존성을 가져올 수 있다는 약속이야. 그 약속은 보통 지켜져. 그 문장에서 무게를 다 지고 있는 건 "보통"이야. 그리고 내다보는 기간이 스프린트가 아니라 몇 년 단위인 아카이브한텐 틀린 베팅이지.
diff 가 기능이야
두 번째 성질은 없이 살아본 다음에야 알아채는 종류야. 공용 층이 바뀌면 소비자 히스토리에 그 변경이 코드로 떠. 커밋을 열고, diff 를 읽고, 공용 클라이언트의 어느 줄이 움직였는지 정확히 봐.
패키지면 같은 사건이 소비자한텐 한 줄로 떠. 버전 번호가 어떤 값에서 어떤 값이 됐다. 실제로 벌어진 건 전부 다른 저장소, 태그 뒤에 살고, 찾아 나서야만 닿아. 일상적인 업그레이드엔 그 간접이 괜찮아. 동작 변화를 이등분으로 쫓는 중인데 소비자 히스토리엔 숫자 하나뿐인 순간엔, 5분이랑 반나절의 차이야.
이 가족이 이미 쓰고 있던 선례
이 모형은 키트를 위해 발명된 게 아냐. 같은 가족이 이미 기계 여러 대에 공용 지시 파일 묶음을 똑같은 방식으로 배포하고 있었어. 정식 출처, 체크섬을 붙여 복사하는 배달 단계, 그리고 안 맞게 된 복사본을 잡아내는 검사. 부품 셋 그대로, 내용만 다른 거지.
결정할 때 그게 중요했어. 이 모형이 가설이 아니라는 뜻이었으니까. 실패 방식이 이미 알려져 있었어. 빠뜨린 기계, 누가 제자리에서 고친 복사본. 완화책도 이미 갖춰져 있었고. 이걸 코드에 고르는 건 새 관행을 수입하는 게 아니라 돌아가는 관행을 한 영역 넓히는 거였어.