Computer Science/Open Source

Git : 1장 깃과 버전 관리

2024. 6. 9. 00:18
목차
  1.  
  2. 1. 버전 관리
  3. 1.1. 버전이란?
  4. 1.2. Why 버전관리?
  5. 2. 버전 관리 시스템
  6. 2.1 버전 관리 소프트웨어
  7. 2.2 버전 관리 소프트웨어(시스템)의 대표적 종류
  8. 3. 깃(Git)
  9. 3.1 깃(Git)이란?
  10. 3.2 깃(Git) 의 특징
  11. 3.3 깃의 동작 한눈에 보기
728x90

Git

 

1. 버전 관리

1.1. 버전이란?

  • 버전 : 이전과 약간씩 다른 변화들을 구분하는 표시
    • 꼭 숫자만 사용해야 하는 것은 아님. (ex. 윈도우 XP)
  • 서브 버전 : 버전과 버전 사이에 변화된 것
    • 1.0 버전과 2.0 버전 사이에는 1.01, 1.02, 1.03 처럼 수많은 서브버전이 있다.
  • 버전의 숫자나 기호 역시 일련의 규칙들이 있으며 버전을 부여하려면 소스 코드를 구별할 수 있는 의미있는 변화가 있어야 한다.
    • 즉, 개발 도중 임시로 작업한 것을 버전이라고 말하지 않는다.

1.2. Why 버전관리?

  • 프로그래밍은 컴퓨터 언어로 글을 작성하는 창작 활동이라고 할 수 있다.
  • 프로그래밍 개발 과정은 수많은 코드를 변경하고 테스트하는 것이다. 따라서 지속적으로 변경되는 과정 속에서 코드는 잠시 불안정한 상태와 안정된 상태를 반복한다.
  • 개발자는 안정된 상태의 코드와 불안정한 상태의 코드를 인지하고, 항상 안정된 상태를 유지하도록 노력해야 한다. 개발 또는 테스트 하는 과정에서 불안정한 코드가 있다면 계속 이어서 작업하기 불안하거나, 때에 따라 더 이상 작업하기 어려울 수도 있다. 이 때는 이전 상태로 돌아가 다시 시작할 수 있는 코드의 복귀(포인트) 지점이 필요하다.

코드 복귀 지점

  • 이러한 코드 복귀 지점은 반드시 안정된 코드 상태를 기준으로 설정해야 하며 복귀 지점을 기록해두면 좀 더 자유롭고 안정적으로 개발할 수 있다.

 

2. 버전 관리 시스템

2.1 버전 관리 소프트웨어

  • 버전 관리 시스템(VCS, Version Control System) : 코드와 콘텐츠의 변화를 관리하고 추적하는 소프트웨어
  • 최조의 버전관리 시스템은 유닉스 환경에서 사용 가능한 SCCS(Source Code Control System)이다.
    • SCCS는 1970년대 마크 로치킨드(Marc J. Rochkind)가 개발했으며, 이후 다양한 VCS 프로그램이 등장했다.
  • 저장소(repository)(레포지터리) :  VCS에서 버전들을 관리하고 저장하는 공간

2.2 버전 관리 소프트웨어(시스템)의 대표적 종류

1. 집중형

  • 집중형 시스템은 말 그대로 모든 소스 코드가 한 곳에 집중되어 있는 형태이다.
  • 하나의 메인 중앙 서버에서 개발 구성원의 모든 소스 코드를 통합적으로 관리한다.
  • 클라이언트-서버 모델이라고 한다.
  • 대표적인 집중형 관리 시스템(시대순) : SCCS, RCS, CVS, 서브버전
장점 저장소 하나를 중심으로 관리하기 때문에 시스템을 운영하기 수월하다.
단점 * 중앙 저장 공간인 서버에 문제가 생기면, 소스 코드가 있는 메인 저장소에 모든 개발자가 접근할 수 없는 심각한 상황이 발생할 수 있다.
* 동시에 여러 개발자가 접근하면 충돌이 발생하기에 코드 수정을 안정적으로 할 수 있게 잠금 모델을 적용해야 한다.
* 파일을 변경하려면 개발자들은 순서대로 대기하고 있어야 한다.

2. 분산형

  • 분산형 버전 관리 시스템(DVCS, Distributed Version Control System)은 집중형 시스템과 달리 저장소가 여러개 있다.
  • 여러 저장소에 각 버전별 소스를 개별 보관한다.
  • 분산 저장소는 P2P(Peer-to-Peer) 방식으로 공유하며, 각 개발자에게 공유 가능한 저장소 사본을 제공한다.
  • 서버는 각 저장소 자료를 동기화하고 중개하는 역할만 수행한다.
  • 대표적인 분산형 관리 시스템 : 깃(Git), 머큐리얼, 비트키퍼
장점 메인 서버에 문제가 생기더라도 지속적으로 개발할 수 있다.
단점 익숙해지는데 시간이 걸리는 단점이 있다.

 

3. 깃(Git)

3.1 깃(Git)이란?

  • 2005년에 리눅스 개발자인 리누스 베네딕트 토르발스가 개발했다.
  • 깃의 모든 소스는 깃허브에 공개되어 있다. ( https://github.com/git/git ) 
  • 대표적인 분산형 버전 관리 시스템이다.
  • 원격 저장소(remote repository)와 별개로 개발자 각각의 로컬 컴퓨터에 완벽한(원격 저장소의 내용과 동일한) 복제본 소스 코드를 저장할 수 있다. 이는 매번 중앙 저장소를 조회하지 않아도 개발을 진행할 수 있는 장점이 있다.
  • 네트워크나 인터넷이 연결되어 있지 않은 상태에서도 로컬 컴퓨터의 소스 코드만으로 버전을 관리할 수 있다. 작업 후 나중에 인터넷에 연결되었을 때 동기화만 하면 된다.
  • 원격 저장소로 많은 개발자의 저장소와 연결하거나 동기화 작업을 할 수 있다. 또 직접 만든 새로운 소스 코드를 배포하거나 내려받은 소스 코드를 수정한 후 다시 병합(merge)할 수 있다.

3.2 깃(Git) 의 특징

  • 백업 기능
    • 분산형 깃은 자신의 로컬 컴퓨터에서 독립적으로 소스의 버전 관리를 할 수 있다.
      • 독립적이라는 것은 로컬 컴퓨터에서 자체적으로 버전을 기록하고 관리할 수 있는 시스템을 의미한다.
    • 깃을 사용하면 코드를 원격 저장소에서 저장할 수 있다. 즉, 로컬 컴퓨터의 저장소를 동기화하여 원격 저장소에 백업할 수 있다.
    • 사무실, 집 등 여러 공간에서 원격 저장소에 저장된 내용을 다시 내려받아 프로젝트 개발을 이어서 할 수 있다.
  • 협업 개발
    • 코드 공유
      • 깃은 다수의 개발자와 코드를 공유하여 협업할 때 매우 유용하다.
      • 예전에는 코드 공유를 위해 팀 내에서 외부 저장 장치를 이용하곤 했다. 이는 번거로운 작업이었는데 깃 덕분에 네트워크를 통해 코드를 좀 더 쉽게 공유할 수 있다.
    • 책임과 기록
      • 깃은 변경된 모든 이력을 저장한다.
      • 누가 언제 어떤 파일을 수정했는지 기록하기 때문에 코드를 좀 더 책임감 있게 작성하고 유지할 수 있다.
      • 깃은 커밋(commit)을 거쳐 모든 코드의 수정 이력을 기록한다. 이 때 깃의 커밋은 신중하게 작업해야 한다.
      • 커밋으로 저장된 원본 객체는 수정할 수 없다.
    • 원격 공유
      • 분산된 여러 저장소 간에 정보를 주고 받으려면 중앙 서버가 필요하다. 이 때 깃에서는 원격 저장소가 중앙 서버 역할을 한다.
      • 자신의 코드 저장소를 원격 서버에 푸시(push)하여 저장(동기화)할 수 있다.
      • 또 다른 개발자의 소스를 원격 서버에서 풀(pull) 또는 페치(fetch)하여 언제든지 내려받을 수 있다.
      • 이러한 특징을 이용해서 깃을 사용하면 개발 구성원 간에 소스 코드를 쉽게 주고받을 수 있다.
      • 원격 저장소로 전송된 코드는 여러 개발자와 소스 코드를 공유한다.
      • 협업하여 코드를 개발할 때 공유 기능은 매우 중요하다.
    • 협업 개발
      • 깃은 하나의 소스 코드를 여러 가지 브랜치로 분기하여 독립된 기능을 구현할 수 있다.
      • 독립적으로 구현된 소스를 주고받으며, 필요하다면 각 브랜치를 하나로 병합할 수도 있다.
      • 독립적으로 구현된 코드들을 수작업으로 병합하는 것은 어려운데, 깃에서는 다양한 병합 알고리즘을 제공하기 때문에 이를 이용하여 소스 코드의 충돌을 최소화하고 최종 코드를 쉽게 유지할 수 있다.
    • 공개
      • 원격 저장소를 사용하여 개발 중인 코드를 외부로 공개할 수 있다.
      • 코드를 공개함으로써 내부 개발자가 만든 기능 한계를 극복하고 외부 개발자와 협업할 수 있다.
      • 공개된 프로젝트는 많은 개발자 간의 협력으로 프로젝트를 빠르게 성장 및 발전시킬 수 있다.
      • 외부 개발자는 원격 저장소를 포크(fork)하여 소스 코드의 버그를 수정하거나 기능을 개선할 수 있다. 수정한 소스 코드를 풀 리퀘스트(pull request)하여 기존 코드에 병합할 수도 있다.

Fork & Pull Request 관계

 

3.3 깃의 동작 한눈에 보기

깃의 다섯 단계

  • 초기화: 폴더를 깃 저장소로 변경
  • 커밋: 변경된 코드의 이력을 기록
  • 브랜치: 분리 격리된 코드 이력을 기록
  • 병합: 기존 이력과 분리된 이력을 통합
  • 푸시: 로컬 저장소의 이력을 서버로 전송 및 공유
저작자표시 (새창열림)

'Computer Science > Open Source' 카테고리의 다른 글

git 공부 내용 & 명령어 정리  (0) 2024.06.13
Open Source Software에 대해서  (0) 2024.06.08
  1.  
  2. 1. 버전 관리
  3. 1.1. 버전이란?
  4. 1.2. Why 버전관리?
  5. 2. 버전 관리 시스템
  6. 2.1 버전 관리 소프트웨어
  7. 2.2 버전 관리 소프트웨어(시스템)의 대표적 종류
  8. 3. 깃(Git)
  9. 3.1 깃(Git)이란?
  10. 3.2 깃(Git) 의 특징
  11. 3.3 깃의 동작 한눈에 보기
'Computer Science/Open Source' 카테고리의 다른 글
  • git 공부 내용 & 명령어 정리
  • Open Source Software에 대해서
JuniTech
JuniTech
프로그래밍을 정복하기 위한 좌충우돌 코린이의 기록
JuniTech
Juni IT Technology
JuniTech
전체
오늘
어제
  • 분류 전체보기 (83)
    • Develop (29)
      • C, C++ (13)
      • Python (9)
      • Java (1)
      • JavaScript (0)
      • Arduino Uno (6)
    • CodingTest (38)
      • Baekjoon (36)
    • Project (0)
    • IT Issue (1)
    • Computer Science (11)
      • 프로그래밍 언어론 (3)
      • Open Source (3)
      • Data Structure (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 🧑‍💻Github
  • 😎Juni의 잡동사니(일상 블로그)
  • 💰Juni의 투자일기(주식 블로그)

공지사항

인기 글

태그

  • 프로그래밍 어론
  • 문자열
  • 아두이노 우노
  • 11000
  • 프어론
  • 10810
  • 백준
  • 10811
  • 10813
  • pygame
  • 13241
  • 생존시간
  • 10812
  • 구문법
  • Backjoon
  • 파스트리
  • 27866
  • 파이썬
  • c++
  • 10988
  • 포인터
  • 25206
  • C
  • 프로그래밍어론
  • 10797
  • 2083번
  • Python
  • 프로그래밍 역사
  • 10798
  • LCD

최근 댓글

최근 글

hELLO · Designed By 정상우.
JuniTech
Git : 1장 깃과 버전 관리
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.