6-1) 버전 관리 시스템의 개요
6-2) 분산 버전 관리 시스템: 깃
6-3) 웹 기반 버전 관리 저장소: 깃허브
과거에는
중앙 집중식(CVCS,Centralized VCS)방식으로 버전을 관리했다.
(한 컴퓨터로만 저장소를 담당하여 모든 파일을 관리 하는 것)
해당 방식은 여러 문제점이 존재했다.
- 모든 커뮤터가 네트워크에 연결돼 있어야만 작업이 가능하다.
- 서버에 문제가 생기면 작업이 불가하다.
- 지속적인 통신으로 네트워크가 느리면 효율이 떨어진다.
이러한 문제점들을 보완하고자 나온 방식이
분산 방식(DVCS, Distributed VCS)이다.
더이상 한 컴퓨터에서만 저장소를 담당하는 것이 아닌, 모든 컴퓨터가 저장소로서 버전을 관리한다.
- 하지만 이를 오류 없이 활용하기 위해선, 반드시 양쪽 시스템 간의
동기화를 실시 해주어야 한다.
- 동기화 방식은 Merge(병합) / pull(가져오기) 를 채택하여 사용한다.
1) 깃은 폴더내에서 "
git init" 명령어를 실시할 시.git 파일이 생성됨과 동시에해당 폴더의 변경이력을 관리한다.
2) 폴더 내에 A B C 라는 파일이 있을 때, 세 개 파일 중 어느 파일이라도변경이 감지되면, 폴더 전체를 저장한다.
-> 이는 마치 스크린샷을 찍어 저장하는 것과 같아스냅샷(Snapshot)이라고 칭한다.
3) 수많은 스냅샷을 관리하면서 변경을 감지하고, 버전을 관리한다.
깃은 3개의 작업 영역을 이용하며, 스냅샷을 관리한다.
작업 공간(working directory)
-> 현재 작업하고 있는 폴더를 말한다.
-> "git add" 명령어를 사용시, 스테이징 영역으로 작업 파일을 올릴 수 있다.
스테이징 영역(staging area):
-> 내부 저장소로 가기 전 임시로 보관해두는 공간이다.
-> "git commit" 명령어를 사용시 스냅샷을 찍는 명령어라고 보면된다. 스냅샷을 찍어 내부 저장소로 보낸다.
내부 저장소(local repository)
-> 최종적으로 .git 폴더 안에 저장되는 스냅샷 저장 공간이다.
-> 로컬 환경에서 버전 관리(스냅샷 관리)가 된 것이다.우리는 해당 의문점을 가질 수가 있다. '엥? 굳이 스테이징 영역이 왜 필요해? 그냥 작업공간에서 원할 때 바로 스냅샷 찍어서 내부저장소로 옮기면 되잖아.' 이는, 변경이 너무 빈번하게 일어나기도 하고, 앞서 말했듯 "폴더 전체"를 관리하며 폴더 자체를 저장하는 것이기 때문에,
스테이징에 임시로 올려 원하는 파일만 스냅샷 관리하기 위함이라고 생각하면 될 것 같다!
내 컴퓨터에 있는 프로젝트 변경 내역을 다른 개발자에게 공유하기 위해선 어떻게 해야할까?
메신저를 활용해서 폴더나 코드를 보낼 수도 있겠지만 이는 너무 위험하며 비효율적이다.
그래서 생긴 방식이깃허브 : 외부 저장소이다.
깃허브를 통해서서로 다른 개발자들이 모두가 최신 버전의 파일을 가지고 작업할 수 있다.
-> 서로 다른 개발자들끼리 스냅샷끼리 비교하며 관리하기 때문에충돌을 피하기 위한동기화작업은 필수다!깃에 대해 좀 더 알고 싶다면,
기초) 커밋 , 브랜치와 관련된 다양한 명령어를 학습하고, 충돌에 부딪혀봐라.
심화) 브랜치 관리 전략을 학습하라. ex) git flow / github flow / gitlab flow 등