Ch.1 Getting Started

2021. 5. 29. 16:54개발공부/Pro Git Book


Git을 배우고 싶어서 교재를 찾던 중 인강보다 문서로 배우면 시간은 더 들지만 다시 찾아보거나 기억이 오래 남을 것 같아 공식 Git 사이트에서 무료 제공하는 Pro Git Book으로 정했습니다. 


1.1 Getting Started - About Version Control

형상관리는 파일이나 파일들에 대한 변경을 기록하여 기간이 지나도 특정 버전을 찾아볼 수 있는 시스템입니다. 가령 작업 시 틀리더라도 쉽게 되돌릴 수 있고 적은 노력으로 할 수 있단 장점이 있습니다.

LVCS(Local Version Control System)

이전에 개발자들은 로컬 형상관리 시스템을 만들어 단순한 DB구조로 파일들의 변경들을 기록하기도 했습니다.

출처 : https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control

CVCS(Centralized Version Control Systems)

수년간 형상관리 표준이 된 시스템인 CVCS는 다른 시스템들에서 개발한 파일들을 관리하기 위해 개발되었습니다. CVCS는 버전 파일들이 담긴 단일서버를 가지고 있고 여러 사용자들이 서버로부터 파일들을 체크아웃 할 수 있습니다.

출처 : https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control

LVCS에 비해 관리자들이 사용자들 중 누가 어떤 파일을 작업 중에 있는지 파악하기가 용이합니다. 그에 반해 LVCS는 사용자별 로컬 DB를 모두 확인해야 합니다.

하지만 단일 서버라는 특징이 단점이기도 합니다. 만일 서버가 1시간 동안 다운된다면 그동안 작업은 중지되어야 합니다. 혹은 서버 DB에 장애가 발생한다면 백업해둔 것 외에 모든 작업을 날릴 수도 있습니다.

DVCS(Distributed Version Control Systems)

DVCS(Git, Mercurial, Bazaar, Darcs)는 CVCS와 달리 사용자들은 최신 스냅샷만을 체크아웃 하지 않습니다. 대신 모든 변경 기록들이 포함된 레퍼지토리 전체를 체크아웃 합니다. 그래서 만일 서버 장애가 생긴대도 사용자들이 클론한 레퍼지토리 중 어떤 것이든 서버를 복구하기에 충분한 백업 파일이 됩니다.

출처 : https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control

그리고 DVCS는 여러 원격 레퍼지토리들이 같은 프로젝트를 동시에 작업해도 형상관리에 문제가 없습니다. 따라서 계층적인(hierarchical) 모델의 워크플로우도 가능케 합니다.


1.2 A Short History of Git

Git은 2005년 오픈소스 소프트웨어인 리눅스 커널의 형상관리를 위해 처음 만들어졌습니다. 개발 당시 아래와 같은 특징들을 포함시키고자 했습니다.

속도, 쉬운 설계, 비선형(수천개의 병렬 브랜치;parallel branches) 개발 지원, 완전 분산화, 대형 프로젝트 처리가능


1.3 Getting Started - What is Git?

Git과 다른 형상관리 툴의 차이점은 다른 시스템들은 정보들을 파일 기반 변경리스트로 저장하는 것에 비해 깃은 정보들을 파일시스템 스냅샷들의 묶음으로 저장합니다. 커밋을 할때마다 파일들의 당시 형태를 사진으로 저장해 그 스냅샷에 레퍼런스를 저장하는 것입니다. 효과적으로 파일에 변경사항이 없다면 Git은 그 파일을 저장하지 않고 기존의 파일 레퍼런스에 연결시킵니다. 따라서 Git은 데이터를 스냅샷들의 연속으로 생각합니다.

다른 VCS 시스템

출처 : https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F

Git 시스템

출처 : https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F

거의 모든 동작이 로컬기반

Git은 로컬 디렉토리에 프로젝트의 모든 히스토리가 담긴 리소스들이 저장되어 있기 때문에 타 시스템들에 비해 뛰어난 속도를 자랑합니다. 이런 속도는 기록이 저장된 서버와 통신할 필요가 없기 때문에 가능합니다.

또한 인터넷이 없는 환경에서도 커밋이 가능하다는 장점이 있습니다.

Git의 완전성

Git은 저장되기 전 중복검사(checksum)가 이루어지기 때문에 Git이 모르는 변경이 일어날 수 없습니다. 중복검사에 SHA-1 해시를 사용하는데 사실 Git은 파일 내용(contents)를 문자가 아닌 해시로 저장합니다.

Git의 세 가지 상태

 - modified : 파일에 변경이 있었지만 DB로 커밋되지 않은 상태입니다.

 - staged : 다음 커밋 스냅샷에 들어가도록 마크해둔 상태입니다.

 - committed : 데이터가 성공적으로 로컬 DB에 저장된 상태입니다.

출처 : https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F


1.4 The CommandLine

Git CLI를 사용하는 이유 : GUI는 모든 기능을 사용하기엔 제한이 따르기 때문입니다. CLI를 사용할줄 알면 GUI는 쉽지만 반대의 경우엔 그렇지 않습니다.


1.6 First-Time Git Setup

Git을 인스톨한 뒤 user, branch, text-editor 등 초기 설정을 진행해줍시다. Git은 git config이란 툴과 함께 제공됩니다. config를 이용해 Git 설정 변수들을 변경하고 읽을 수 있습니다.(lets you get and set configuration variables that control all aspects of how Git looks and operates.) 그리고 설정 변수들은 세 곳에 나뉘어 저장됩니다.

 - [path]/etc/gitconfig : 시스템 안의 모든 user에 적용되는 설정입니다. git config 뒤에 --system을 붙여 Git에 해당 설정변수들을 수정할 수 있는 권한을 부여합니다. 시스템을 관리하기 때문에 관리자 권한이 필요한 명령어 입니다. 저의 경우엔 window를 사용중이기 때문에 C:\Program Files\Git\etc 이 경로에 저장돼있습니다.

 - ~/.gitconfig or ~/.config/git/config : 현재 user의 모든 Repository에 적용되는 설정입니다. git config 뒤에 --global을 붙여 Git에 해당 설정변수들을 수정할 수 있는 권한을 부여합니다. 저의 경우 C:\Users\klyhy 경로에 저장돼있습니다.

 - config file in the Git directory (that is, .git/config) of whatever repository you’re currently using : 현재 사용중인 Repository에만 적용되는 설정입니다. git config 뒤에 --local을 붙여 Git에 해당 설정변수들을 수정할 수 있는 권한을 부여합니다.  경로는 로컬 Repository 디렉토리 안에 저장돼있습니다.

설정 적용의 구조는 이전 레벨을 오버라이드(상속)해 하위 레벨이 우선 적용되는 구조입니다.(e.g. .git/config 설정이 [path]/etc/gitconfig 설정에 앞서 적용됩니다.


Config 명령어

1
$ git config --list --show-origin
cs

모든 config setting과 로컬경로를 함께 출력해주는 명령어 입니다.

Create Repository 명령어

1
2
$ git init
cs

Repository로 사용하고자 하는 workspace에서 입력합니다.

Commit 전 변경된 staged 파일 확인하는 명령어

1
$ git diff
cs


Remove & moving files 명령어

1
2
$ git rm --cached README.md //unstage하고 working tree(로컬 디렉토리)에는 남김
$ git mv [filename] [changed_filename]
cs

Creating repository

1
2
3
4
5
6
touch README.md
git init
git add README.md
git commit -"first commit"
git remote add origin git@github.com:alexpchin/<reponame>.git
git push -u origin master
cs

❗Make SSH(Secure Shell Protocol) Key in Github

 SSH형식으로 원격 저장소를 연결하기 위해선 SSH 키를 Github로부터 발급받아야 사용 가능합니다.


출처 : Pro Git Book

'개발공부 > Pro Git Book' 카테고리의 다른 글

[Git] intellij(인텔리제이) .gitignore 추가하기  (0) 2022.05.16
git reset  (0) 2021.07.01