티스토리 뷰

Git

[Git] 깃과 버전관리

씌워터 2020. 9. 19. 20:04

참고: Git 교과서 1장. 깃과 버전 관리

 

< 버전 관리>

1. 의미

 - 버전(version): 이전의 것과 다른 또는 약간 비슷한 것 

 - 서브버전: 버전과 버전 사이에 변화된 것 (ex. 1.01, 1.02 ...)

 

2. 필요성

- 코드의 복귀 지점 기록.

- 코드의 복귀 지점은 반드시 안정된 코드 상태를 기준으로 설정

 

3. 버전 관리 시스템(VCS, Version Control System)

 - 한 파일에 덮어쓰면서 저장하는 것이 아님

   ex) 과제.hwp , 과제_수정.hwp , 과제_수정2.hwp , 과제_진짜수정.hwp , 과제_마지막.hwp , 과제_진짜진짜마지막.hwp..

   --> 이름의 규칙성을 잊어버리기 쉽고 버전을 알아보기 어렵다.

 - VCS(version control system) : 코드와 콘텐츠의 변화를 관리하고 추척하는 소프트웨어  

 - 저장소(리포지터리, repository) : 버전 파일들을 관리하고 저장하는 공간

 

4. 버전 관리 시스템의 종류 (집중형, 분산형)

(1) 집중형

 - 모든 소스코드가 한곳에 집중되어 있는 형태

 - 하나의 메인 중앙 서버에서 개발 구성원의 모든 소스코드를 통합적으로 관리

 - 클라이언트-서버 모델

 - 장점: 저장소 하나로 운영하므로 시스템 운영이 수월하다.

 - 단점: 서버에 문제가 생기면 메인 저장소에 모든 개발자가 접근할 수 없다. 잠금모델을 적용해서 파일 변경시 개발자들이 순서대로 대기해야한다. (잠금모델: 누군가 파일 수정중에는 다른 사람이 수정할 수 없음.)

 

(2) 분산형

 - DVCS (Distributed Version Control System)

 - 여러 개의 저장소에 각 버전별 소스를 개별보관한다.

 - 분산 저장소는 P2P(Peer-to-Peer)방식으로 공유하며 각 개발자에게 공유 가능한 저장소 사본을 제공한다.

 - 서버는 각 저장소 자료를 동기화하고 중개하는 역할만 한다.

 - 종류: 깃, 머큐리얼, 비트키퍼 등

 

 

<깃 Git>

1.  깃이란?

 - 2005년 리눅스 베네딕트 토르발스 개발

 - 오픈소스

 - 대표적인 분산형 버전 관리 시스템

 - 원격 저장소(Repository)와 별개로 개발자 각각의 로컬 컴퓨터에 완벽한 복제본 소스 코드(원격 저장소의 내용과 동일)를 저장할 수 있음

   --> 매번 중앙 저장소를 조회하지 않아도 개발 진행 가능

 - 많은 개발자의 저장소와 연결하거나 동기화 작업 가능

 - 직접 만든 새로운 소스코드 배포 / 내려받은 소스 코드를 수정한 후 다시 병합(merge) 가능

 

 

2. 백업 기능

 - 깃을 사용하여 코드를 원격 저장소에 저장할 수 있음

 - 로컬 저장소를 동기화 해서 원격 저장소에 백업

 - 원격 저장소의 내용을 다시 내려받아 여러 공간에서도 프로젝트 개발을 이어서 할 수 있음

 

 

3. 협업에서의 깃(Git)

(1) 코드 공유

 - 팀원 간 네트워크를 통해 코드를 쉽게 공유 가능

 - 심지어 인터넷이 연결되지 않은 상태에서도 코드 이력을 관리하고, 다른 개발자와 공유하여 협업 가능

 

(2) 책임과 기록

 - 깃에서는 커밋(commit)을 거쳐 모든 코드 이력과 누가 언제 어떤 파일을 수정했는지 모두 기록하므로 책임감있는 코드 작성 가능

 - 커밋으로 저장된 원본 객체는 수정할 수 없음

 

(3) 원격 공유

 - 원격 저장소가 분산된 여러 저장소 간 정보를 주고 받기 위한 중앙 서버 역할을 한다.

 - 푸시(push): 자신의 로컬 저장소에서 원격 저장소로 업로드 하는 것.

 - 풀(pull): 원격 저장소의 변경 사항을 자신의 로컬 저장소에 적용하는 것

 - 페치(fetch): 원격저장소의 변경 사항을 내려받는것, 적용(병합)은 하지 않음.

 - 풀과 페치를 통해 다른 개발자의 소스를 언제든지 내려받을 수 있음

 - 팀원 간 소스 코드를 쉽게 주고 받을 수 있다.

 

(4) 병합

 - 하나의 소스 코드를  브랜치로 나눠 독립된 기능 구현 가능

 - 브랜치(branch): 메인 개발 라인에서 분기된 하나의 갈래로, 새로운 기능을 안전하게 개발하고 싶을 때 추가로 메인 개발 라인을 만들어 개발하고 나중에 다시 메인 개발 라인에 병합한다.

 - 수작업으로 하기 힘든 병합작업을 다양한 병합 알고리즘을 제공해 쉽게 해줌.

 - 소스코드의 충돌을 최소화

 

(5) 공개

 - 원격 저장소에서 소스코드를 외부로 공개가능

 - 내부 개발자의 개발 한계를 극복, 외부 개발자와 협업 가능 --> 프로젝트의 빠른 성장 가능.

 - 포크(fork): 다른 사람의 원격 저장소를 복사하여 자신의 원격 저장소를 만드는 것

 - 풀 리퀘스트(pull requst): 자신의 로컬 저장소에서 수정한 사항을 원본 저장소에 반영해 달라고 요청

 - 외부 개발자가 포크와 풀 리퀘스트를 할 수 있다.

 

 

4. 깃에서의 동작

(1) 초기화: 폴더를 깃 저장소로 변경

(2) 커밋: 변경된 코드 이력을 기록

(3) 브랜치: 분리 격리된 코드 이력을 기록

(4) 병합: 기존 이력과 분리된 이력(브랜치)를 통합

(5) 푸시: 로컬 저장소의 이력을 서버로 전송, 공유

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함