본문 바로가기
Computer Science

VCS, Git

by songmoro 2024. 8. 12.
728x90

VCS

소프트웨어 팀이 시간이 지남에 따라 소스 코드의 변경 사항을 관리하는 데 도움이 되는 소프트웨어 도구

 

 

CVCS, DVCS

  • 중앙 집중식 버전 관리 시스템, CVCS(Centralized Version Control System)
    • 프로젝트 파일이 서버 한 곳에만 위치해 있어 파일의 버전이 일관적이고 관리자는 서버의 파일만 신경 쓰면 되므로 관리하기 편하다. 커밋 시에는 수정사항이 바로 서버로 올라가게 된다.

 

  • 분산 버전 관리 시스템, DVCS(Distributed Version Control System)
    • 프로젝트의 전체 파일이 참여자들의 각 컴퓨터와 서버에 분산되어 저장된다. 파일을 서버와 각 참여자들의 컴퓨터에 분산하여 저장할 수 있기 때문에 문제가 생길 시 다른 컴퓨터 혹은 서버의 파일을 통해 복구할 수 있다.

 

 

git

git (깃) 은 분산 버전 관리 시스템(DVCS)으로, 소프트웨어 개발 과정에서 소스 코드의 변경 사항을 추적하고 관리하는 데 사용된다.

다른 소스 코드 관리 시스템(SCM)과 차별화 되는 기능은 브랜칭 모델.

 

파일 상태

  • Untracked: 관리 대상이 아님
  • Unmodified: 현재 아무것도 수정하지 않은 상태
  • Modified: 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
  • Staged: 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.

 

명령어

remote: 현재 프로젝트에 등록된 리모트 저장소를 확인할 수 있다. -v 옵션을 주어 단축이름과 URL을 함께 볼 수 있다.

log: Git에는 히스토리를 조회할 수 있다.

clone: 새로운 디렉토리에 저장소를 복제한다.

 

Github

깃허브(GitHub)는 루비 온 레일스로 작성된 분산 버전 관리 툴인 깃 저장소 호스팅을 지원하는 웹 서비스이다. 깃허브는 영리적인 서비스와 오픈소스를 위한 무상 서비스를 모두 제공한다.

 

Git vs Github

Git이 버전관리 시스템을 위한 도구라면 Git hub는 Git을 사용하는 프로젝트를 위한 호스팅 서비스라고 할 수 있다.

 

Repository

Git으로 관리하는 프로젝트 저장소로 두 가지 종류로 나뉜다.

 

Local Repository: 본인의 컴퓨터에 저장된 로컬 버전의 프로젝트 저장소.

Remote Repository: Local Repository와는 반대로 내 컴퓨터가 아닌 (일반적으로 원격 서버) 버전의 프로젝트 저장소.

 

 

Hash

  • 해시 함수(hash function): 해시 알고리즘(hash algorithm), 해시함수알고리즘(hash function algorithm)은 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다.
    • 큰 파일에서 중복되는 레코드를 찾을 수 있기 때문에 데이터베이스 검색이나 테이블 검색의 속도를 가속할 수 있다.
    • 예를 들어서, DNA sequence에서 유사한 패턴을 찾는 데 사용될 수도 있다. 또한 암호학에서도 사용될 수 있다.
    • 암호용 해시 함수는 매핑된 해싱 값만을 알아가지고는 원래 입력 값을 알아내기 힘들다는 사실에 의해 사용될 수 있다.
    • 또한 전송된 데이터의 무결성을 확인해주는 데 사용되기도 하는데, 메시지가 누구에게서 온 것인지 입증해 주는 HMAC를 구성하는 블록으로 사용된다.
    • 해시 함수는 결정론적으로 작동해야 하며, 따라서 두 해시 값이 다르다면 그 해시값에 대한 원래 데이터도 달라야 한다.
    • (역은 성립하지 않는다) 해시 함수의 질은 입력 영역에서의 해시 충돌 확률로 결정되는데, 해시 충돌의 확률이 높을수록 서로 다른 데이터를 구별하기 어려워지고 검색하는 비용이 증가하게 된다.
    • 암호학적 해시함수(Cryptographic Hash Function)와 비암호학적 해시함수로 구분되곤 한다.
    • 암호학적 해시함수의 종류로는 MD5, SHA계열 해시함수가 있으며 비암호학적 해시함수로는 CRC32등이 있다.
  • 해시 값(hash value): 해시 함수에 의해 얻어지는 값은 해시 값, 해시 코드, 해시 체크섬, 해시라고 한다. 해시 테이블이라는 자료구조에 사용되며, 매우 빠른 데이터 검색을 위한 컴퓨터 소프트웨어에 널리 사용된다.
  • 해시 충돌(hash collision, hash clash)
    • 서로 다른 두 개의 입력값에 대해 동일한 출력값을 내는 상황을 의미한다.
    • 해시 함수가 무한한 가짓수의 입력값을 받아 유한한 가짓수의 출력값을 생성하는 경우, 비둘기집 원리에 의해 해시 충돌은 항상 존재한다.
    • 해시 충돌은 해시 함수를 이용한 자료구조나 알고리즘의 효율성을 떨어뜨리며, 따라서 해시 함수는 해시 충돌이 자주 발생하지 않도록 구성되어야 한다.
    • 암호학적 해시 함수의 경우 해시 함수의 안전성을 깨뜨리는 충돌 공격이 가능할 수 있기 때문에 의도적인 해시 충돌을 만드는 것이 어렵도록 만들어야 한다.
  • 해시 맵(hash map) : 키(Key)와 값(value)쌍을 저장하는 자료 구조이다.

 

 

git objects

Git은 Content-addressable 파일시스템이다. Git의 핵심은 단순한 Key-Value(예, 파일 이름과 파일 데이터) 데이터 저장소라는 것이다.

어떤 형식의 데이터라도 집어넣을 수 있고 해당 Key로 언제든지 데이터를 다시 가져올 수 있다.

 

git hash-object 명령은 주어지는 데이터를 저장하고 이 데이터에 접근하기 위한 key를 반환한다. -w 옵션을 줘야 실제로 저장한다. -w 가 없으면 저장하지 않고 key만 보여준다. 그리고 --stdin 옵션을 주면 표준입력으로 입력되는 데이터를 읽는다. 이 옵션이 없으면 파일 경로를 알려줘야 한다.

git hash-object 명령이 출력하는 것은 40자 길이의 체크섬 해시다. 이 해시는 헤더 정보와 데이터 모두에 대한 SHA-1 해시이다

 

Tree 개체

  • 하위 디렉토리의 트리 객체를 재귀적으로 참조할 수 있다.
  • 객체에 대한 접근 권한, 파일 이름을 관리한다.

 

Blob 개체

  • 파일이름이나 파일 형식은 저장되지 않는다.
  • 파일의 메타 정보를 제외한 파일의 내용 전체가 포함된다.

 

Commit 개체

  • 작성자
  • 커밋 실행자
  • 커밋 날짜
  • 로그 메시지
  • tree 객체 : 해당 커밋에서의 dir/file의 상태를 알 수 있다.

 

Tag 개체

  • 객체종류
  • 태그이름
  • tagger
  • 태그메시지
  • PGP 서명정보

 

 

참고

[Git] VCS에 대해서 알아보자 (CVCS와 DVCS)

Git vs Git Hub

[git] 깃의 속사정, 4대 원소를 파헤치기

2.2 Git Basics - Recording Changes to the Repository

 

 

 

 

 

 

 

728x90

'Computer Science' 카테고리의 다른 글

SQL, Database  (0) 2024.08.12
HTTP  (0) 2024.08.12
결합도, 응집도  (0) 2024.08.12
Observer 패턴, Publisher-Subscriber 패턴  (0) 2024.08.12
Event Bus 패턴  (0) 2024.08.12