ToolChain/VCS - git,github

git - 1 시작하기

TimeSave 2022. 12. 11. 03:40

https://git-scm.com/book/ko/v2

 


목차


    1. 시작하기

    1.1 버전 관리(시스템)란?

    • 무엇 : 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템
      • 각 파일/프로젝트 이전 상태로 rollback
      • 시점 별 수정 내용 비교(누가 문제를 일으켰는지, 누가 언제 만들어낸 이슈인지)
      • 파일 손상, 분실 복구
    •  로컬 버전 관리
      • 디렉토리로 파일 복사 -> 간단한 데이터베이스로 파일 변경 정보 관리 = 로컬 VCS
      • RCS(Revision Control System) :  Patch Set(파일에서 변경되는 부분) 관리.
    •  중앙집중식 버전 관리(C-VCS) : 중앙 서버 연동
      • CVS, Subversion, Perforce
      • 파일 관리 서버 별도. 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)
      • 치명적인 결점
        • 중앙 서버 문제 : 서버 다운 -> 협업/백업 불가.
        • 중앙 하드디스크 문제 : 모든 히스토리 분실
    • 분산 버전 관리 시스템(DVCS)
      • Git, Mecurial, Bazaar, Darcs
      • Clone = 모든 데이터 백업
        • 저장소 + 히스토리(마지막 스냅샷만 Checkout X, 복제물 백업 가능, 진정한 백업)
      • 클라이언트로 서버 복원 가능
      • 리모트 저장소 존재
        • 다양한 그룹과 다양한 방법으로 협업(계층 모델...)

     

    1.2 Git 역사 : Linux 커널

    • 1991–2002 : Patch와 단순 압축 파일로 관리
    • 2002 ~ 2005 : BitKeeper라고 불리는 상용 DVCS를 사용
    • BitKeeper 유료화 -> Linux 개발 커뮤니티(특히 Linux 창시자 Linus Torvalds)가 자체 도구 개발
      • 빠른 속도단순한 구조/비선형적인 개발(수천 개의 동시 다발적인 브랜치)/완벽한 분산/대형 프로젝트 핸들링(속도, 데이터 크기 면)
    • 2005 ~ : git 탄생
     

    1.3 Git 기초

    • Subversion이나 Perforce 같은 다른 VCS를 사용하던 경험을 버려야 한다.
      • 미묘하게 다름(정보를 취급하는 방식)
      • 차이점을 이해하기 -> 쉬워짐
    • diff X, Snapshot O(데이터를 다루는 방법)
      • Subversion과 차이점 : 스냅샷 저장관리
        • VCS 시스템 관리정보 = 파일목록
        • CVS : 파일 변화를 시간순 관리 (= 델타 기반 버전관리 시스템)
        • Git :  데이터 = 스냅샷의 스트림(연속, 매우작은 크기). 
          • Commit , 저장기준 : 파일의 존재 순간이 중요
          • 파일이 바뀌지 않으면 새로 저장하지 않는다. 이전 상태의 대한 링크만 저장
    • 거의 모든 명령을 로컬에서 실행
      • 대부분 로컬 파일과 데이터만 사용(다른 컴퓨터는 불필요)
        • 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 -> 빠르다.
        • CVCS : 네트워크의 속도에 영향
      • 프로젝트의 히스토리 조회 : 서버 없이 조회
        • ex) 한 달 전의 상태 : 로컬에서 찾는다. 리모트 서버에서 예전 버전을 가져올 필요가 없다.
        • 오프라인 상태/VPN에 연결하지 못해도 가능
        • 네트워크에 접속하고 있지 않아도 커밋(로컬 저장소)
    • Git의 무결성
      • Git은 데이터 저장 전 항상 checksum을 생성, 그 checksum으로 데이터 관리.
        • Git = checksum 해석도구, 파일을 해당 파일의 해시로 저장(이름으로 저장 X)
        • 체크섬
          • Git의 (Atomic) 데이터 단위, 기본 철학이다.
          • Git은 파일의 내용이나 디렉토리 구조를 이용 SHA-1 해시를 사용하여 체크섬 생성
          • 체크섬은 40자 길이의 16진수 문자열이다.
          • SHA-1 ex)24b9da6552252987aa493b52f8696cd6d3b00373
          • git이 해석을 해줘야 commit등 작업이 된다.

    CVCS(왼쪽) vs DVCS

     

    • Git은 데이터를 추가할 뿐
      • Git으로 무얼 하든 Git 데이터베이스에 데이터가 추가 된다. 되돌리거나 데이터를 삭제할 방법이 없다.
      • Git도 커밋하지 않으면 변경사항을 잃어버릴 수 있다. 
      • Git을 사용하면 프로젝트가 심각하게 망가질 걱정 없이 매우 즐겁게 여러 가지 실험을 해 볼 수 있다.
      • 되돌리기 : 을 보면 Git에서 데이터를 어떻게 저장하고 손실을 어떻게 복구하는지 알 수 있다.
    • 세 가지 상태
      • Git "파일 상태" 관리 : Committed, Modified, Staged
        • Committed : 데이터가 로컬 데이터베이스에 안전하게 저장됐다
        • Modified  : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것.
        • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태
        • git 프로젝트 단계와 연계해서 이해
      • Git "프로젝트 세 가지 단계"
        • Git 디렉토리 : Git의 핵심
          • 프로젝트의 "메타데이터, 객체 데이터베이스"를 저장하는 곳
          • 다른 컴퓨터에 있는 저장소를 Clone 할 때 Git 디렉토리 생성
          • 지금 작업하는 디스크에 존재
        • 워킹 트리 : 프로젝트의 "특정 버전"을 Checkout 한 것
          • Git 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 트리를 만든다.
        • Staging Area : 단순한 파일이고 곧 커밋할 "파일에 대한 정보"를 저장한다.
          • Git 디렉토리에 있다.
          • Git에서는 기술용어로는 “Index” 라고 함
      •  Git에서 하는 일
        • 1. 워킹 트리에서 파일을 수정.
        • 2. Staging Area에 파일을 Stage 해서 커밋할 스냅샷을 만든다. 모든 파일을 추가할 수도 있고 선택하여 추가할 수도 있다.
        • 3. Staging Area에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장한다.
        • Git 디렉토리에 있는 파일들은 Committed 상태이다. 파일을 수정하고 Staging Area에 추가했다면 Staged이다. 그리고 Checkout 하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified이다.

     

    워킹 트리, Staging Area, Git 디렉토리.

    1.4 CLI

    • CLI/ GUI 모두 사용 가능 하지만, Git의 모든 기능을 지원하는 것은 CLI 뿐
      • GUI 프로그램의 대부분은 Git 기능 중 일부만 구현

     

    1.5 Git 설치 - Linux, Mac, Window or SourceCode -> Self Compile

     

    1.6 Git 최초 설정 : Git의 사용 환경 설정. 한 컴퓨터에서 한 번만 하면 됨

    • 설정한 내용은 Git을 업그레이드해도 유지
    • 'git config’라는 도구 사용 :  설정 내용 확인/변경(git 동작 설정)
    • 사용하는 설정 파일 세 가지
      • /etc/gitconfig 파일
        • 시스템의 모든 사용자와 모든 저장소에 적용
        • . git config --system 옵션으로 이 파일을 읽고 쓸 수 있다. (수정하려면 관리자 권한 필요)
      • ~/.gitconfig, ~/.config/git/config 파일
        • 특정 사용자(즉 현재 사용자)에게만 적용되는 설정
        • git config --global 옵션으로 이 파일을 읽고 쓸 수 있다.
        • 특정 사용자의 모든 저장소 설정에 적용.
      • .git/config
        • 이 파일은 Git 디렉토리에 있고 특정 저장소(혹은 현재 작업 중인 프로젝트)에만 적용된다. 
        • --local 옵션을 사용하면 이 파일을 사용하도록 지정(default값)
        • 이 옵션을 적용하려면 Git 저장소인 디렉토리로 이동 한 후 적용
      • 설정 우선순위  .git/config > ~/.gitconfig, ~/.config/git/config >  /etc/gitconfig
    •  사용자 정보 : 사용자이름, 이메일 주소 설정
      • Git 설치하고 나서 가장 먼저 해야 하는 것
      • Git은 커밋할 때마다 이 정보를 사용
      • 커밋 후 정보 변경 불가
    • 편집기
      • Git에서 사용할 텍스트 편집기를 고른다.
      • default : 시스템의 기본 편집기
      • Git은 같은 키를 여러 파일(/etc/gitconfig 와 ~/.gitconfig 같은)에서 읽기 때문에 같은 키가 여러 개 있을 수도 있다. 그러면 나중 값을 사용한다.

     

    1.7 도움말 보기 : $ git help <verb> or $ man git-<verb>

     

     

     

     

     

     

     

    ========================================

     

    8. Git 맞춤

    • Git 설정
    • Git Attributes
    • Git Hooks
    • 정책 구현하기


    9. Git and other VCS

    • Git: 범용 Client
    • Git으로 옮기기


    10. Git의 내부

    • Plumbing 명령과 Porcelain 명령
    • Git 개체
    • Git Refs
    • Packfile
    • Refspec
    • 데이터 전송 프로토콜
    • 운영 및 데이터 복구
    • 환경변수

     

    'ToolChain > VCS - git,github' 카테고리의 다른 글

    git - 2 Git의 기초(핵심)  (0) 2022.12.17
    Github 적응하기  (0) 2022.11.27