깃과 버전관리

버전 관리

버전이란?

버전 : 이전의 것과 다른 또는 약간 비슷한 것.

서브 버전 : 버전과 버전 사이에 변화한 것.

버전 관리는 왜 필요할까?

수많은 작업과 개선을 통해 끊임 없이 발전하는 프로그램

기능이 추가되고 변경 되면서 프로그램이 복잡해짐

변경된 코드 → 불안정 상태 → 테스트를 통한 안정화

이전 상태로 돌아가 다시 시작할 수 있는 코드의 복귀(포인트) 지점이 필요함

버전 관리 시스템

다른 이름으로 파일을 저장하는 방식 → 더 편리하고 정확하게 관리할 수 없을까?

버전 관리 소프트 웨어

코드와 콘텐츠의 변화를 관리하고 추적하는 소프트웨어를 버전 관리 시스템(VCS, Version Control System)이라고 함.

  • 집중형 VCS
    • 모든 소스 코드가 한 곳에 집중되어 있음.
    • 클라이언트 - 서버 모델이라고도 함.
    • 장점
      • 하나의 저장소 중심이라 시스템을 운영하기 수월함
    • 단점
      • 중앙 저장 공간에 문제가 생기면, 메인 저장소에 접근 불가. 여러 개발자가 동시에 접근하면 충돌이 발생하기 때문에 코드 수정을 안정적으로 할 수 있게 잠금 모델을 적용, 개발자는 순서를 대기해야 함.
    • 예시
      • SCCS : 1970년대 최초의 관리 프로그램
      • RCS : 1980년대 정방향/역방향 개념 도입
      • CVS
      • 서브버전(SVN)
  • 분산형 VCS
    • 집중형과는 다르게 저장소가 여러개 존재한다. 여러 저장소에 각 버전별 소스를 개별 보관.
    • 분산 저장소는 P2P(Peer To Peer) 방식으로 공유하며 각 개발자에게 공유 가능한 저장소 사본을 제공.
    • 메인 서버에 문제가 생겨도 지속 개발 가능, 익숙해지는데 시간 소요.
    • 예시
      • 깃(Git)
      • 머큐리얼 : 파이썬으로 개발됨.
      • 비트키퍼 : 상용(유료) 제품

  • 깃의 특징
    • 대표적인 분산형 버전 관리 시스템, 원격 저장소와 별개로 개발자 각각 로컬 저장소가 존재하여 복제본 소스 코드를 저장할 수 있다. 완벽한 복사본이 있다면 매번 중앙 저장소를 조회하지 않아도 개발을 진행할 수 있다.
    • 네트워크나 인터넷이 연결되지 않은 상태에서도 로컬 컴퓨터의 소스코드만으로 버전을 관리할 수 있다. 나중에 인터넷이 연결되면 동기화 하면 된다.
    • 원격 저장소로 많은 개발자의 저장소와 연결하거나 동기화 작업이 가능하다. 직접 만든 소스코드를 배포하거나 내려받은 소스코드를 수정한 후 다시 병합할 수 있다.

백업 기능

자신의 로컬 컴퓨터에서 독립적으로 소스의 버전을 관리할 수 있음.

코드를 원격 저장소에 저장, 로컬 저장소를 동기화 하여 원격 저장소에 백업.

협업 개발

  • 코드 공유
    • 외부 저장 장치를 사용하지 않고 다른 개발자와 공유.
  • 책임과 기록
    • 변경된 모든 이력이 저장됨. 커밋을 거쳐 모든 코드의 수정 이력을 기록.
  • 원격 공유
    • 여러 분산 저장소와 정보를 주고받기 위한 중앙 서버 역할을 원격 저장소가 함.
    • 자신의 코드 저장소를 원격 서버에 푸시(Push)하여 저장하고, 다른 개발자의 소스를 풀(Pull) 또는 페치(Fetch)하여 내려받는다.
  • 병합
    • 여러가지 브랜치로 분기하여 독립된 기능을 구현하고, 필요 시 하나로 병합할 수 있다.
    • 소스 코드의 충돌을 최소화하고 최종 코드를 쉽게 유지할 수 있다.
  • 공개
    • 개발 중인 코드를 외부에 공개할 수 있다. 한계를 극복하고 외부 개발자와 협업할 수 있다.
    • 프로젝트를 빠르게 성장 및 발전 시킬 수 있다.
    • 외부 개발자는 원격 저장소를 포크(Fork)하여 소스 코드의 버그를 수정하거나 기능을 개선할 수 있으며, 수정한 소스 코드를 풀 리퀘스트(Pull Request)하여 기존 코드에 병합 할 수 있다.

깃의 동작 한눈에 보기

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

© 2024. Chiptune93 All rights reserved.