상세 컨텐츠

본문 제목

Pro Git (1) - 기초, 시작

Programming/Git

by 쌩우 2019. 10. 14. 15:08

본문

버전 관리란?

: 버전 관리 시스템은 파일의 변화를 시간에 따라 기록하고, 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.

Git이란?

  1. Git의 핵심
    데이터를 다루는 방법에 특징이 있다.
    데이터를 파일 시스템 스냅샷으로 취급하고, 크기가 아주 작다.
    Git은 커밋을 하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.
    파일이 달라지지 않았다면 성능을 위하여 파일을 새로 저장하지 않는다.
    이전 상태의 파일에 대한 링크만 저장한다.
    (React가 가상 DOM을 이용하여 달라진 곳만 비교하여 재렌더하는 것과 비슷한 느낌이랄까)
    Git은 각 파일의 변화를 시간순으로 관리하지 않는다.
    데이터를 스냅샷의 스트림처럼 취급한다.

  1. 대부분의 명령이 로컬에서 실행
    거의 모든 명령이 로컬 파일과 데이터만 사용하여, 네트워크에 있는 다른 컴퓨터가 필요 없다.
    덕분에 빠른 속도로 작업이 가능하다.
    예를 들어 프로젝트의 히스토리를 조회할 때 서버 없이 조회한다.
    오프라인 상태거나 VPN에 연결하지 못해도 막힘 없이 일 할 수 있다.

  2. Git의 무결성
    데이터를 저장하기 전 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.
    때문에 체크섬을 이해하는 Git없이는 어떤 파일이나 디렉토리도 변경할 수 없다.
    Git없이는 체크섬을 다룰 수 없어서 파일의 상태도 알 수 없고 심지어 데이터를 잃어버릴 수도 없다.

Git은 SHA-1해시를 사용한 체크섬을 만든다.
체크섬은 파일 내용/디렉토리 구조를 이용해 40자 길이의 16진수 문자열로 만들어진다.
ex) 24b9da6552252987aa493b52f8696cd6d3b00373

  1. 세 가지 상태

    • Committed : 데이터가 로컬 데이터베이스에 안전하게 저장됨. Git 디렉토리 내 파일들의 상태.
    • Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것.
    • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태.Staging Area에 추가된 상태.
  2. Git 프로젝트의 세 가지 단계

    • Git 디렉토리 : 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳. 다른 컴퓨터에 있는 저장소를 Clone할 때 생성됨.
    • 워킹 트리 : 프로젝트의 특정 버전을 Checkout 한 것. Git 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 생성함.
    • Staging Area : Git디렉토리에 있음. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장.

Git이 하는 일은 다음과 같다.
1. 워킹 트리에서 파일을 수정
2. Staging Area에 파일 Stage 하여 커밋할 스냅샷을 만듦
3. Staging Area에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장.

파일 무시하기

어떤 파일들은 git에서 관리하지 않도록 무시하게 만들 수 있다.
로그 파일이나 빌드 시스템이 자동으로 생성한 파일들, 혹은
특수한 비밀번호 같은 경우 git으로 관리할 필요가 없다.
때문에 무시되도록 설정하는 것이 필요하다.
이는 .gitignore라는 파일 내에 작성하여 관리한다.
파일에 입력하는 패턴은 아래의 규칙을 따른다.

• 아무것도 없는 라인이나, `#`로 시작하는 라인은 무시한다.
• 표준 Glob 패턴을 사용한다.
• 슬래시(/)로 시작하면 하위 디렉토리에 적용되지(Recursivity) 않는다.
• 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.
• 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.

Glob 패턴은 정규표현식을 단순하게 만든 것으로 생각하면 되고 보통 쉘에서 많이 사용한다.
애스터리스크()는 문자가 하나도 없거나 하나 이상을 의미하고, [abc] 는 중괄호 안에 있는 문자 중 하나를 의미한다(그러니까 이 경우에는 a, b,c).
물음표(?)는 문자 하나를 말하고, [0-9] 처럼 중괄호 안의 캐릭터 사이에 하이픈(-)을 사용하면 그 캐릭터 사이에 있는 문자 하나를 말한다.
애스터리스크 2개를 사용하여 디렉토리 안의 디렉토리 까지 지정할 수 있다. a/**
/z 패턴은 a/z, a/b/z, a/b/c/z 디렉토리에 사용할 수 있다.

Staged와 Unstaged 상태의 변경 내용을 보기
단순히 파일이 변경된 사실을 확인할 땐, git status 명령을 사용하면 되지만,
세부적인 내용을 살펴보려면 git diff 명령을 사용해야 한다.
git diff로는 수정은 했지만 아직 staged 상태가 아닌 파일을 비교해 볼 수 있다.
만약 커밋하려고 Staging Area에 넣은 파일의 변경 부분을 보고 싶다면,
git diff --stage 옵션을 사용한다. 이 명령은 저장소에 커밋한 것과 Staging Area에 있는 것을 비교한다.

Staging Area 생략하기
staging area는 커밋할 파일을 정리한다는 점에서는 매우 유용하다.
하지만 복잡하기만 하고 필요하지 않은 때도 있다.
git commit -a 옵션으로 Git은 Tracked 상태의 파일을 자동으로 Staging Area에 넣는다.
덕분에 git add 명령을 실행하는 수고를 덜 수 있다.

'Programming > Git' 카테고리의 다른 글

Pro Git (3) - 브랜치 part 1  (0) 2019.10.16
Pro Git (2) - 히스토리 조회, 되돌리기, alias  (0) 2019.10.14
Git pull과 fetch의 차이  (0) 2019.10.14

관련글 더보기

댓글 영역