- VCS 버전관리 시스템
- 분산형 버전 관리 시스템.
- 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 불러올 수 있는 시스템을 의미함.
- 과거부터 많은 VCS가 있었고 git이 가장 대표적.
- git
- 속도, 데이터 무결성, Linux 커널과 같은 대규모 프로젝트를 지원하는 능력에 초점을 맞춤. git은 다양한 명령어와 옵션을 제공해 높은 유연성을 제공하지만 배우는데 시간이 걸림
작동 구조:
1. 내가 작업한 것들 (로컬 저장소)
2. 원격 저장소로 밀어내거나 -> push
3. 원격 저장소의 최신 형상을 내 작업 공간으로 당겨온다. -> pull
git의 버전 관리 원리
1. 어떠한 코드를 각 완성도 마다 버전 관리를 한다고 하자. 간단하게 덧셈하는 프로그램을 만든다.
#include <iostream>
using namespace std;
int add(int a, int b){
}
int main(){
}
먼저 이 상태를 1번 상태라고 하자. 함수를 채워넣지는 않았다.
#include <iostream>
using namespace std;
int add(int a, int b){
return a + b;
}
int main(){
}
위 상태가 2번상태, 함수를 모두 채웠다.
#include <iostream>
using namespace std;
int add(int a, int b){
return a + b;
}
int main(){
cout << add(1, 2);
}
위 상태가 3번 상태, 프로그램을 완성했다.
그럼 저장된 상태는 총 1,2,3 번이 존재한다. 각 작업들의 순서를 매겨줘서 버전 순서를 기억하게 된다. 하지만 git은 숫자로 인덱싱하지 않고 해시값으로 인덱싱을 한다.
그러나 해시값으론 순서를 알 수 없기 때문에, 트리 처럼 부모를 각 노드마다 기록해주어 진행 순서를 알 수 있다.
즉,
1번 코드 -> 해시값 12BCA , 부모 없음
2번 코드 -> 해시값 ~~~~~, 부모 : 12BCA
3번 코드 -> 해시값 ,,,,@#@#, 부모 : 2번코드해시값
그리고 2번을 가져와서 다른 코드를 만들 수 있다.
#include <iostream>
using namespace std;
int add(int a, int b, int c){
return a + b + c;
}
int main(){
}
이 이제 이 코드의 해시값이 AVDE라면 부모는 ~~~~~가 된다. 즉 분기가 나누어졌다. 나뉜 분기를 구분하기 위해 이름을 붙혀준다.
기존 분기는 2add, 새로운 분기는 3add라고 부를 수 있다.
- GitHub
- Repository
스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳. git은 원격 저장소와 로컬저장소 두 종류의 저장소를 제공한다.
- File
로컬 저장소는 내 PC에 파일이 저장되는 개인 전용 저장소다. 스테이지의 내용은 .git/index 파일에 저장되고, 저장소의 내용은 .git/HEAD에 저장된다. 즉, add 명령어를 통해 index 파일에 저장되고 commit 명령어를 통해 HEAD 저장한다.
- SHA
git은 commit id를 hash로 사용하는데 이 hash함수를 sha1을 사용하게 된다. sha1 알고리즘으로 생성된 hash 값은 2의 80승 분의 1의 확률로 발생한다.
- staged
add 명령어에 의해 인덱스 파일로 들어간 상태
- tracking
추적되는 파일로 버전 관리 시스템에 의해 관리되고 있는 파일을 의미, 이는 파일이 커밋에 포함되어 있다는 의미임.
- modified
수정된 파일이라는 의미로 작업 디렉토리에서 변경되었지만 아직 스테이징 영역에 추가되지 않은 파일을 의미.
'CS 학습 정리' 카테고리의 다른 글
OSI 7계층과 TCP/IP 방식 , Echo Server란 (0) | 2024.08.07 |
---|---|
HTTP 요청 방식과 파일과 디렉터리, SQL, DataBase / js의 파일생성, 수정 방식 (0) | 2024.08.05 |
비동기 문법과 병렬처리, Node.js의 병렬처리 방식에 대해 (0) | 2024.07.29 |
프로세스와 스레드/멀티스레드 개념과 자바스크립트의 동작원리 (0) | 2024.07.25 |
함수형 프로그래밍의 정의와 사용해야하는 이유 (0) | 2024.07.24 |