"안녕, 아미고!"

"안녕!"

"오늘은 버전 관리 시스템에 대해 말씀드리겠습니다."

"이미 알고 계시겠지만 프로그램은 종종 매우 크고 작성하는 데 매우 오랜 시간이 걸립니다. 때때로 수십 명의 사람들이 프로그램을 작성하는 데 몇 년을 소비할 수 있습니다."

"수백만 줄의 코드가 있는 프로젝트가 현실입니다."

"워."

"모든 것이 매우 복잡합니다. 사람들은 종종 서로 간섭하고 종종 동일한 코드를 수정하는 등의 작업을 수행합니다."

"이 난장판을 정리하기 위해 프로그래머들은 코드에 버전 제어 시스템을 사용하기 시작했습니다."

" 버전 관리 시스템은 클라이언트와 서버로 구성된 프로그램입니다.

"프로그램은 데이터(프로그래머가 작성한 코드)를 서버에 저장하고 프로그래머는 클라이언트를 사용하여 데이터를 추가하거나 변경합니다."

"버전 제어 시스템과 단순히 문서 공동 작업을 가능하게 하는 프로그램의 주요 차이점은 모든 문서(코드 파일)의 이전 버전을 모두 저장한다는 것입니다."

"자세한 내용을 말씀해 주시겠습니까? 어떻게 작동합니까?"

"당신이 프로그래머이고 서버의 저장소에 저장된 프로그램의 소스 코드를 약간 변경하고 싶다고 상상해 보십시오."

"해야 할 일은 다음과 같습니다."

"1) 서버에 로그인합니다."

"2) 체크아웃 명령을 사용하여 모든 파일의 최신 버전을 컴퓨터에 복사합니다."

"3) 필요한 파일을 변경합니다."

"4) 프로그램을 로컬에서 실행하여 컴파일 및 실행되는지 확인하십시오."

"5) 커밋 명령을 사용하여 서버에 '변경 사항'을 보냅니다."

"일반적으로 말이 됩니다."

"그러나 더 많은 것이 있습니다. 아침에 직장에 도착했지만 인도에서는 이미 점심 시간입니다. 따라서 인도 동료는 이미 변경 사항을 적용하고 변경 사항을 서버의 저장소에 커밋했습니다."

"최신 버전의 코드로 작업해야 합니다. 따라서 업데이트 명령을 수행합니다."

" 체크 아웃과 어떻게 다릅니까 ?"

" 체크아웃은 리포지토리의 모든 파일을 복사하도록 설계되었지만 업데이트는 체크아웃 / 업데이트 명령을 마지막으로 실행한 이후에 서버에서 업데이트된 파일만 업데이트합니다 ."

"대략적인 작동 방식입니다."

결제 :

버전 제어 시스템 - 1

"이제 파일 B를 변경하고 서버에 업로드하고 싶다고 가정해 보겠습니다. 이렇게 하려면 Commit 명령 을 사용해야 합니다 ."

버전 제어 시스템 - 2

" 업데이트 명령이 작동하는 방식은 다음과 같습니다 ."

버전 제어 시스템 - 3

"흥미롭다! 다른 명령어는 없나?"

"네, 꽤 있습니다. 하지만 어떤 버전 제어 프로그램을 선택하느냐에 따라 다릅니다. 그래서 일반적인 원칙만 설명하려고 합니다."

"병합이라는 작업도 있습니다. 두 문서의 합집합입니다. 두 명의 프로그래머가 동시에 같은 파일을 수정했다고 가정해 보겠습니다. 그러면 서버의 프로그램이 두 변경 사항을 모두 커밋할 수 없습니다. 먼저 커밋한 사람이 자신의 파일을 추가하게 됩니다. 또는 그녀의 변화."

"그럼 상대방은 어떻게 합니까?"

"그 또는 그녀는 서버에서 최신 변경 사항을 가져오기 위해 업데이트 작업을 수행하도록 초대될 것입니다 . 그건 그렇고, 커밋하기 전에 업데이트를 수행하는 것은 좋은 습관입니다."

"그런 다음 업데이트 작업 중에 클라이언트 프로그램은 로컬 변경 사항을 서버에서 받은 변경 사항과 병합하려고 시도합니다."

"프로그래머가 파일의 다른 부분을 변경한 경우 버전 제어 프로그램은 이를 성공적으로 병합할 수 있을 것입니다.  변경 사항이 동일한 위치에 있는 경우 버전 제어 프로그램은 병합 충돌을 보고하고 사용자에게 수동으로 묻는 메시지를 표시합니다. 변경 사항을 병합합니다."

"예를 들어, 이것은 두 프로그래머가 파일 끝에 무언가를 추가할 때 자주 발생합니다."

"알겠습니다. 전반적으로 합리적인 것 같습니다."

"그리고 한 가지가 더 있습니다. 가지입니다."

"한 팀의 두 프로그래머가 동일한 모듈을 다시 작성하는 임무를 맡고 있다고 상상해 보십시오. 또는 더 좋은 방법은 처음부터 다시 작성하는 것입니다. 이 모듈이 완료될 때까지 프로그램은 실행될 수 없으며 컴파일조차 되지 않을 수 있습니다."

"그래서 그들은 무엇을 해야 합니까?"

"그들은 저장소에 분기를 추가하여 앞으로 나아갑니다. 대략적으로 말하면 이것은 저장소가 파일이나 디렉토리가 아니라 버전별로 두 부분으로 나뉜다는 것을 의미합니다."

" 전기가 발견되지 않았고 로봇이 발명되지 않았다고 상상해보세요. 그랬다면 3차 해방전쟁도 일어나지 않았을 것이고, 인류 역사 전체가 완전히 다른 길을 갔을 것입니다. "

"이 길은 역사의 대안적인 갈래입니다."

"또는 단순히 리포지토리의 복사본으로 분기를 그려볼 수 있습니다. 즉, 어느 시점에서 우리는 서버에 리포지토리의 복제본을 만들었으므로 기본 리포지토리(종종 트렁크라고 함 ) ), 다른 분기 가 있습니다 ."

"글쎄요, 그게 더 이해가 가는 것 같군요.

"왜 우리가 리포지토리를 복사했다고 말할 수 없습니까?"

"이것은 단순한 복사가 아닙니다."

"이 가지는 줄기에서 분리될 수 있을 뿐만 아니라 줄기에 합쳐질 수도 있습니다."

"즉, 일부 작업은 브랜치에서 수행할 수 있으며 작업이 완료되면 저장소 트렁크에 리포지토리 브랜치를 추가할 수 있습니까?"

"네."

"그리고 파일은 어떻게 될까요?"

"파일이 병합됩니다."

"글쎄, 멋진 것 같군. 행동도 멋지길 바래."

"그럼 좀. 좋아, 쉬자."

" 여기에 유용한 정보가 많이 있습니다  "