일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 웹해킹기초
- 워게임추천
- 이진탐색트리
- 자바문제풀이
- 웹해킹
- node.js
- 포렌식
- 이진트리
- mongoose
- 웹개발
- 웹기초
- 그래프
- 뷰
- 자료구조
- nodeJS
- bootstrap
- node
- CTF
- 자바
- MongoDB
- gitbash
- wargame.kr
- Express
- 포렌식워게임
- NavBar
- 워게임
- 자바기초
- 써니나타스
- materialize
- GIT
- Today
- Total
보안 전공생의 공부
버전 관리, Git 기초 본문
출처 : pro git - https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F
▶ 버전 관리
- 버전 관리 시스템(Version Control System, VCS)은 파일의 변화를 시간에 따라 기록하여 과거 특정 시점의 버전을 다시 불러올 수 있는 시스템이다.
- VCS를 사용하면 개별 파일or프로젝트 전체를 이전 상태로 되돌리거나 시간에 따른 변경 사항을 검토 가능하고, 파일을 쉽게 복구할 수 있다.
· 로컬 버전 관리 시스템
- 간단한 데이터베이스를 사용해서 파일의 변경 사항을 기록한다.
- 어느 디렉토리에서 작업하고 있었는지 까먹고 엉뚱한 파일을 덮어쓰거나 의도치 않았던 위치로 복사하는 실수를 해결해준다.
- 파일을 관리하는 서버가 별도로 있고, 클라이언트가 중앙 서버에서 파일을 받아서 사용(checkout)한다.
- 많이 쓰는 VCS 도구 중 RCS(Revision Contrl System) : 각 revision들 간의 patch set(파일에서 변경되는 부분)을 관리한다. 특별한 형식의 파일에 저장, 특정 시점의 파일 내용을 보고 싶을 때 해당 시점까지의 패치들을 모두 더하여 파일을 만들어내는 것
· 중앙집중식 버전 관리(CVCS)
- 다른 개발자와 함께 프로젝트를 작업할 때 생기는 문제를 해결하기 위해 개발되었다.
- 모두 누가 무엇을 하고 있는지 알 수 있다.
- 모든 클라이언트의 로컬 데이터베이스를 관리 < VCS 하나를 관리
- 중앙 데이터베이스에 있는 하드디스크 문제가 생기면 프로젝트의 모든 히스토리를 잃는다.
· 분산 버전 관리 시스템 (DVCS)
- 클라이언트는 히스토리를 포함한 저장소를 전부 복제하여 checkout한다.
- 서버에 문제가 생기면 이 복제물로 다시 작업을 할 수 있다.
- clone은 모든 데이터를 가진 진정한 백업이다.
- 대부분의 DVCS 환경에서는 리모트 저장소가 존재한다 -> 협업 가능
- git, mecurial, bazaar, darcs 등
▶ Git 기초
· VCS시스템의 대부분(CVS, Subversion, Preforce, Bazaar 등)의 데이터를 다루는 방법
- 관리하는 정보가 파일들의 목록이다.
- 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다(델타 기반)
· Git의 데이터를 다루는 방법
- 데이터를 파일 시스템 스냅샷의 연속으로 취급하고, 크기가 아주 작다.
- commit(코드 변화를 기록하는 것)하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요시한다.
- 파일이 달리지지 않으면 새로 저장하지 않는다. 이전 상태의 파일에 대한 링크만 저장한다.
- 데이터를 스냅샷의 스트림처럼 취급한다.
· Git 브랜치를 사용하면 얻게 되는 이득
- 대부분의 명령을 로컬에서 실행 : 대부분의 명령이 로컬 파-일과 데이터만 사용해서 네트워키에 있는 다른 컴퓨터가 필요 없다. 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 모든 명령이 순식간에 실행된다.
-> 오프라인 상태이거나 VPN에 연결하지 못해도 작업을 할 수 있고, commit도 가능하다.
- 무결성 : 데이터를 저장하기 전에 항상 checksum(40자 길이의 16진수 문자열)을 구하고 그 checksum으로 데이터를 관리한다. SHA-1해시(ex.24b9da6552252987aa493b52f8696cd6d3b00373)를 사용하여 파일내용이나 디렉토리 구조를 이용해 checksum을 구한다. git에서 사용하는 가장 기본적인 데이터 단위이자 기본철학이 checksum이기 때문에, 이것 없이는 어떠한 파일이나 디렉토리로 변경 할 수 없다.
- 데이터의 추가만 : git으로 무엇을 하든 데이터베이스에 데이터가 추가된다(데이터를 삭제할 방법 X) 일단 스냅샷을 commit하고 나면 데이터를 잃어비리기 어렵다.
- 세가지 상태 : git은 파일을 세 가지 상태(->committed, modified, staged)로 관리한다.
(1) committed : 데이터가 로컬 데이터베이스에 안전하게 저장됨
(2) modified : 수정한 파일을 아직 로컬 데이터베이스에 commit하지 않음
(3) staged : 현재 수정한 파일을 곧 commit할 거라고 표시한 상태
위의 세 가지 상태는 git 프로젝트의 세가지 단계(->git 디렉토리, 워킹 트리, staging area)와 연결되어 있다.
▷git 프로젝트 세 단계
- git 디렉토리 : git이 프로젝트의 메타데이터와 객체데이터베이스를 저장하는 곳. git의 핵심이다.
다른 컴퓨터에 있는 저장소를 clone할 때 만들어진다.
- 워킹 트리 : 프로젝트의 특정 버전을 checkout한 것.
-> git 디렉토리는 지금 작업하는 디스크에 있고, 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹트리를 만든다.
- staging area : git 디렉토리에 있다. 단순한 파일이다. 곧 commit할 파일에 대한 정보를 저장한다.
▷git이 기본적으로 하는 일
1. 워킹 트리에서 파일을 수정한다. >modified
2. staging area에 파일을 stage해서 commit할 스냅샷을 만든다(모든 파일 추가 or 선택하여 추가) >staged
3. staging area에 있는 파일들을 commit해서 git 디렉토리에 영구적인 스냅샷으로 저장한다. >committed
'SCM > GIT' 카테고리의 다른 글
수정하고 저장소에 저장하기 + 브랜치 (2) | 2022.01.04 |
---|---|
git 저장소 만들기 (0) | 2021.12.29 |
git 최초설정, git 레파지토리 생성 및 소스 올리기 (git bash) (1) | 2021.12.28 |