티스토리 뷰
참고: 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) 푸시: 로컬 저장소의 이력을 서버로 전송, 공유
'Git' 카테고리의 다른 글
[Git] 커밋(Commit) 과정, HEAD 포인터, 스냅샷, 커밋메시지, 로그확인 (0) | 2020.10.07 |
---|---|
[Git] 커밋(Commit) - 파일 생성, 깃에 등록, 등록 취소, 파일 이름 변경 (0) | 2020.10.07 |
[Git] 터미널에서 VSCODE 바로 실행 (0) | 2020.10.03 |
[Git] 깃 저장소 (0) | 2020.09.23 |
[Git] 깃 실행 (0) | 2020.09.23 |