[1장]GIT 시작하기

교재 : Pro Git 2 (2014)

버전 관리란❓

버전 관리 시스템(Version Control System : VCS)은 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템을 말한다.
소스 파일뿐만 아니라 디자이너의 이미지 파일 및 컴퓨터의 거의 모든 것들을 버전 관리 할 수 있다.

로컬 버전 관리(LVCS)

아주 간단한 데이터베이스를 사용해서 파일의 변경 정보를 관리

  • RCS(Revision Control System) - Patch Set(파일에서 변경되는 부분)을 관리

중앙 집중식 버전 관리(CVCS)

여러 개발자와 협업을 해야 할 경우 사용

파일을 관리하는 서버가 별도로 있고, 그 서버에 클라이언트가 접속해 파일을 받아서 사용(Checkout)

👍장점

  • 모두 누가 무엇을 하고 있는지 알 수 있다.(관리자는 누가 무엇을 할지 꼼꼼히 관리 가능)
  • 모든 클라이언트의 로컬 데이터베이스를 관리하는 것 보다 서버 하나를 관리하는게 쉽다.

🤢단점

  • 중앙 서버에 문제가 생기면 모든 작업을 할 수 없다.
    • 협업 불가능
    • 백업 불가능
    • 히스토리 분실

분산 버전 관리(DVCS)

클라이언트는 서버에서 저장소 전부를 복제한다. 따라서 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다. (어떠한 클라이언트의 복제물로도 서버를 복원할 수 있다.)

모든 Checkout은 모든 데이터를 가진 진정한 백업이다.

리모트 저장소가 존재

  • 다양한 그룹과 다양한 방법으로 협업 가능
  • 다양한 워크플로 사용 가능

짧게 보는 Git의 역사

리눅스 커널의 버전 관리를 BitKeeper 라는 DVCS를 이용해 2002년 부터 시작했다. 2005년 Bitkeeper는 이윤을 추구(유료화)하기 시작했고, 이에 반발한 커뮤니티(특히 리누스 토발즈)는 열받아서 자체 도구를 만들게 된다. 이 때 나온 것이 Git.

Git은 Bitkeeper를 사용하면서 배운 교훈을 기초로 아래와 같은 목표를 세웠다.

  • 빠른 속도
  • 단순한 구조
  • 비선형적인 개발(수천 개의 동시 다발적인 브랜치)
  • 완벽한 분산
  • Linux 커널 같은 대형 프로젝트에도 유용할 것(속도나 데이터 크기 면에서)

Git 기초

Git은 정보를 취급하는 방식이 다르다. 따라서 기존 VCS를 사용했던 경험이 있다면 잊어버리고 다시 시작하는게 낫다.

차이가 아니라 스냅샷

  • 기존의 VCS 같은 경우 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리
  • Git 이 다른 시스템과 구분되는 점
    • 데이터를 파일 시스템 스냅샷으로 취급하고 크기가 아주 작다.
    • Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 파일이 달라지지 않았으면 Git은 성능을 위해 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.

거의 모든 명령을 로컬에서 실행

프로젝트의 모든 히스토리가 로컬 디스크(데이터베이스)에 있기 때문에 모든 명령이 순식간에 실행된다.(네트워크 연결이 필수가 아님)

그 후 네트워크에 접속되었을 때 리모트 서버에 연결하면 된다.(옵션)

Git의 무결성

Git의 기본 철학 - 체크섬(해시)

체크섬은 Git에서 사용하는 가장 기본적인(Atomic) 데이터 단위

이 체크섬을 이해하는 Git 없이는 어떠한 파일이나 디렉토리도 변경할 수 없다. 즉 Git 없이는 체크섬을 다룰 수 없어서 파일의 상태도 알 수 없고, 심지어 데이터를 잃어버릴 수도 없다.😱

Git은 데이터를 저장하기 전에 항상 SHA-1 해시를 이용해 체크섬을 구하고 그 체크섬으로 데이터를 관리한다.(체크섬은 40자 길이의 16진수 문자열)

Git은 모든 것을 해시로 식별한다. 따라서 파일을 저장할 때 이름이 아닌 해당 파일의 해시로 저장된다.

Git은 데이터를 추가할 뿐

Git으로 무얼 하든 Git 데이터베이스에 데이터가 추가된다. 단 변경사항을 커밋하지 않을 경우 잃어버릴 수 있다. 하지만 일단 스냅샷을 커밋하고나면 데이터를 잃어버리기가 어렵다.

✨세 가지 상태(중요)

  • Committed

    데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것

  • Modified

    수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것

  • Staged

    현재 수정한 파일을 곧 커밋할 것이라고 표시한 것

✨세 가지 단계

  • Git 디렉토리(Repository) - Git 의 핵심

    프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
    다른 컴퓨터에 있는 저장소를 Clone 할 때 Git Directory가 생성됨(.git)

  • 워킹 트리(디렉토리)

    프로젝트의 특정 버전을 Checkout 한 것

    Git 디렉토리는 지금 작업하는 디스크에 있고, 그 디렉토리안에 압축된 데이터베이스에서 파일을 가져와 워킹 트리를 만드는 것이다.

  • Staging Area

    Git 디렉토리 안에 있다.

    단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다.

Git 으로 하는 일은 기본적으로 아래와 같다.

  1. 워킹 드리에서 파일을 수정
  2. Staging Area 에 파일을 Stage 해서 커밋할 스냅샷을 생성
  3. Staging Area 에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장

Git 디렉토리에 있는 파일들은 Committed 상태이다.
워킹 트리의 파일을 수정하고 Staging Area에 추가했다면 Staged이다.
Checkout 하고 나서 수정했지만 아직 Staging Area에 추가하지 않았으면 Modified 이다.

CLI

CLI를 알아야지만 모든 기능을 사용할 수 있다.

대부분의 GUI 툴은 CLI 일부분의 기능만 구현한거다.

CLI를 이용해 공부하라❗❗❗

Git 설치

윈도에서 설치 방법

  • https://git-scm.com/download/win 으로 접속시 자동으로 설치파일이 다운로드 됩니다. 다운이 완료되면 그냥 냅다 설치하시고, 설치 막판에 이것저것 물어보는 것들은 다음 버튼 클릭 신공으로 설치진행하시면 됩니다.
  • GitHub for Windows

리눅스에서 설치 방법

기본적인 패키지 관리도구를 이용해 설치.

참고 주소 : https://git-scm.com/download/linux

Mac 에서 설치 방법

  • 맥은 사용해 본적이 없네요. 책에서 "Xcode Command Line Tools를 설치하는 방법이 가장 쉽다." 라고 합니다.
  • 최신 바이너리 인스툴러 다운로드 : https://git-scm.com/download/mac
  • GitHub for Mac

Git 최초 설정

Git 설치 후 처음 1회 환경설정 하기

Git 설정파일 경로

설정파일은 총 세 가지가 있다.

  • 전역 : C:\ProgramData\Git\config
  • 글로벌 : C:\Users\사용자경로\.gitconfig
  • 지역 : 워킹 디렉토리 내부의 Git 디렉토리 - .git\config

설정파일은 지역 설정 > 글로벌 설정 > 전역 설정의 순서대로 적용되게 된다.

명령어

  • 설정 내용 확인

      ## 시스템 환경설정 파일
      ## C:\ProgramData\Git\config 파일 - 모두 다 있는 것은 아님
      ## 나머지는 어디 있을까?
      git config --system --list
    
      http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
      http.sslbackend=openssl
      diff.astextplain.textconv=astextplain
      filter.lfs.clean=git-lfs clean -- %f
      filter.lfs.smudge=git-lfs smudge -- %f
      filter.lfs.process=git-lfs filter-process
      filter.lfs.required=true
      credential.helper=manager
      core.autocrlf=true
      core.fscache=true
      core.symlinks=false
      add.interactive.usebuiltin=true
    
      ## 글로벌 환경설정 파일
      ## 사용자 디렉토리(C:\Users\사용자경로)의 .gitconfig 파일에 기록
      git config --global --list
    
      core.autocrlf=true
      core.excludesfile=<사용자경로>\gitignore_global.txt
      user.name=<설정한 사용자 정보>
      user.email=<설정한 사용자 이메일>
      credential.helper=manager
      winupdater.recentlyseenversion=2.24.1.windows.2
    
      ## 통틀어 환경설정 파일
      git config --list ## 위 두 가지 환경 설정 내용을 같이 보여줌

사용자 정보 설정

Git 을 커밋할 때마다 사용될 정보를 입력(한 번 정하면 변경 불가능하다.)

git config --global user.name "사용자 이름"
git config --global user.email "사용자 이메일"

단 프로젝트마다 다른 이름과 메일주소를 사용하고자 한다면 --global 옵션을 제외하고 명령을 실행하면 된다.

git config user.name "사용자 이름"
git config user.email "사용자 이메일"

편집기

시스템의 기본 편집기를 사용한다. 굳이 변경하려면 사용할 편집기의 경로와 인수를 지정해 주면 된다. (아래는 NotePad++ 편집기)

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession"

도움말 보기

아래 명령어를 이용해 브라우저에서 도움말을 확인 할 수 있다. 단 영어 주의😱

git --help 명령어

이렇게 하면 된다고 했는데 내 컴퓨터에서는 안됐다. 😫(기본 크롬 브라우저)

인터넷을 검색하니 나와 같은 증상을 가진 사람들이 많았나보다. 그런데 마땅히 해결책이 없었다. 그런데 그 중 하나를 적용해 해결을 했다. 기본 브라우저를 엣지 브라우저로 변경하라는 거였다...

그렇다고 엣지로 변경하기는 싫고해서

  1. Git이 설치된 디렉토리로 이동한 후(C:\Program Files\Git)
  2. ReleaseNotes.html 파일에서 우측 클릭
  3. 연결 프로그램으로 들어간 후 다른 앱 선택
  4. 엣지 브라우저 선택 후 하단의 항상 이 앱을 사용하여 .html 파일 열기 를 선택
    함으로써 해결했다.

+ Recent posts