본문 바로가기

잡다/git

[Git 01] 버전관리 시스템

 프로그램을 개발할때 우리는 수없이 많이 코드를 변경하고 테스트한다. 이 과정에서 코드는 불안정한 상태와 안정된 상태를 반복하게 된다. 이런 수많은 상태들은 이전과는 다르지만, 비슷한 형태를 유지할 것이다. 이런 개념이 버전이다.

 

 버전은 이전과 다른 변화를 구분하는데 사용된다. 버전을 관리하는 사람에 따라 다양한 방식으로 이름지을 수 있으며, 동일 버전 속에서도 작은 변화를 구분하는 서브 버전도 사용될 수 있다. 이때 버전에 이름을 부여할 때 일련의 규칙이 있는 편이 좋으며, 어느 정도 큰 변화가 있을 때 버전을 구분하는 것이 바람직하다.

 

 처음 코드에서 수없이 수정되는 코드들은 프로그램의 완성까지 여러번 반복하여 수정된다. 그런데, 수정 및 테스트되는 코드가 항상 안정적이라고 말할 수 없고, 일부 에러나 제약 등으로 인해 만들어도 사용할 수 없는 경우가 있을 것이다. 이 경우 코드를 수정 이전의 안정된 상태로 되돌리는 것이 일반적이므로, 수정 이전의 안정된 상태를 저장하고 해당 복귀점을 추적할 방법, 즉 일종의 버전을 관리하는 시스템이 필요해진다.

 

다양한 버전 관리 시스템

코드의 버전을 관리하는 방식은 여러가지가 있다.

 

파일 시스템 

 

 

코드를 파일을 이용하여 구분하는 방법으로, 각 버전을 다른 이름으로 저장한다. 코드의 중복이 발생하며, 저장의 시간차이가 존재하게 되면 이름 명명 규칙을 잊어 일관성 없는 버전이 발생할 수 있다.

버전 관리 시스템

 코드와 컨텐츠의 변화를 관리하고 추적하는 시스템. 현재 집중형과 분산형 두 종류로 나뉜다

 

집중형 시스템

 

 모든 소스코드가 한곳에 집중되어 있는 시스템. 하나의 메인 중앙 서버에서 개발 구성원들의 모든 코드를 통합 관리한다. client - server 모델이라고도 부른다. 하나의 저장소만을 관리하기 때문에 시스템 운영은 편리할 수 있으나, 중앙 시스템 자체가 망가지면 코드가 한번에 소실될 수 있으므로 위험하며, 동일 코드에 대한 다른 수정본을 방지하기 위해 잠금 모델을 적용하므로, 개발자들은 타인이 파일을 수정하고 있다면 순서대로 대기해야 한다.

 

분산형 시스템

 

 

 저장소가 여러개 존재하는 시스템. P2P 방식으로 공유하며, 각 개발자는 공유 가능한 저장소 사본을 가진다. 서버는 단순 중개 역할만 수행하므로, 메인 서버가 망가지더라도 개발이 가능하다.

 

 Git은 분산형 시스템을 이용하는 버전 관리 시스템으로, 원격 저장소와 별개로 개발자 각각의 컴퓨터에 복제본 소스 코드를 저장할 수 있으므로 중앙 저장소를 조회하지 않아도 되고, 네트워크가 연결되지 않는 상황이더라도 나중에 동기화 하면 되며, 코드의 배포, 수정 및 병합 등의 작업을 다수의 개발자들과 수행할 수 있다.

 

 크게 5단계로 나뉜다.

 

  • 초기화: 폴더를 깃 저장소로 변경한다.
  • 커밋: 변경된 코드 이력을 기록한다.
  • 브랜치: 분리 격리된 코드 이력을 기록한다.
  • 병합: 기존 이력과 분리된 이력을 통합한다.
  • 푸시: 로컬 저장소의 이력을 서버로 전송 및 공유한다.

 

'잡다 > git' 카테고리의 다른 글

[Git 06] Alias  (0) 2021.10.31
[Git 05] remote  (0) 2021.10.30
[Git 04] commit  (0) 2021.10.30
[Git 03] .gitignore 파일  (0) 2021.10.29
[Git 02] 깃 저장소와 파일의 상태  (0) 2021.10.29