본문 바로가기

Git

git이란

반응형

형상 관리 도구, version 관리 system들 그리고 git에 대한 설명이 담겨 있는 글이다. www.git-scm.com을 참조하여 작성했다.

:bug: VCS(Version Control System)


  • 설명 File 변화를 시간에 따라 기록했다가 나중에 특정 시점의 version을 다시 꺼내올 수 있는 system이다. 이를 이용하면 각 file을 변경하기 이전 상태로 되돌릴 수 있고, 문제의 원인이 누구인지 추적할 수도 있으며, 누가 file을 언제 만들었는지 알 수 있고, file이 소실 또는 잘못된 수정이 되었을 때도 쉽게 복구할 수 있다.

 

  • Local VCSVersion을 관리하기 위해 directory로 file을 복사하여 back up 해놓는 방식은 많은 사람들도 사용하는 매우 흔한 방식이다. 하지만 원본이 잘못되었을 때 이를 복사한 directory도 오염되어 있을 수도 있어 잘못 복사하게 되고, 복사한 file을 잘못 고칠 수도 있다. 이와같은 여러 실수들이 발생했을 때 directory나 file들를 다시 지우거나 수정하는 번거로움 등을 덜어주기 위해 programmer들은 이와같은 개념을 고안했다. 방법은 간소한 database를 사용, file들의 변경 정보를 관리했다.[출처][1] : git 공식 home page
  • ![로컬 버전 관리](https://git-scm.com/book/en/v2/images/local.png)
  • CVCS(Central VCS Server) or SVN(Subversion)큰 Project의 경우 다른 개발자와의 협업이 필연적이다. 이는 여러 신경쓸 점들이 발생할 수 있는데 예를 들어 여러 개발자가 하나의 원본file을 복사해 각자 다른 기능을 구현한 뒤 원본에 모두 합쳐야 되는 경우 서로의 file안에 code들을 최대한 독립적으로 수정하여 원활히 원본 file에 타격이 가지 않도록 해야한다. 이런 골머리 썩을 자잘한 문제의 원인들이 될 것들을 묶어 관리 system을 만들었는데 이것이 CVCS(중앙집중식 VCS)또는 SVN이다. 이는 file을 관리하는 server가 별도로 있고 client가 중앙 서버에서 file을 받아 사용한다. 한 때 인기가 많았다고 한다.[출처][2] : git 공식 home page
  • ![중앙집중식 버전 관리(CVCS)](https://git-scm.com/book/en/v2/images/centralized.png)
  • DVCS(Distributed version control systems)Git에서 사용하는 system이다. client는 server로 부터 단순히 file의 마지막 snapshot을 checkout하는 것이 아닌 저장소를 history와 더불어 모두 복제하며 server에 문제가 생겼을 때 이 복제물로 다시 작업을 시작할 수 있다. client마다 복제가 되어 있기 때문에 이들 중 아무거나 골라도 server를 원래대로 복원 가능하다. 복제하는 방법은 git의 원격 저장소에서 clone하는 것이다. 이는 모든 file, directory, history들을 복제하여 자신의 local 저장소에 저장하는 명령어다.[출처][3] : git 공식 home page
  • 대부분의 DVCS 환경에서는 remote 저장소가 존재한다. remote 저장소가 많을 수도 있다. 그래서 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다. 계층 모델 같은 중앙집중식 시스템으로는 할 수 없는 work flow를 다양하게 사용할 수 있다.
  • 사진;

:bug: git이란?


형상 관리도구(Configuration Management Tool)또는 VCS들 중 하나. Source code를 효율적으로 관리할 수 있게 해주는 무료 공개(open source) software다.

도오대체 git이 뭐길래 사람들이 git, git할까.. 공식문서들을 참고해 읽어보니 git은 다른 vcs system과 다르긴 다르더라.

  • Git의 특성가장 큰 차이점은 data를 다루는 방식이다. VCS system 대부분은 관리하는 정보가 file들의 목록이다. 이들 system은 각 file의 변화를 시간순으로 관리하며 file의 집합을 관리한다. git은 분산형 관리 system(DVCS)으로서 source code를 여러 pc와 저장소에 분산하여 저장하며, data를 file system snapshot의 연속(stream)으로 취급하며 크기가 아주 작다. 또한 사본을 local에서 관리하며 최종적으로 source를 원본과 합칠 때만 network 통신을 사용하기 때문에 매번 명령어를 사용할 때마다 통신을 사용하는 svn에 비해 매우 빠르다. git은 data를 저장하기 전에 SHA-1 hash 기법을 사용, checksum을 만든다. 따라서 git없이는 이 checksum을 이해할 수 없으며 어떤 file이나 directory도 변경할 수 없다. 모든 file 은 이 checksum된 hash값으로 식별되고 저장된다. file을 저장할 때는 이름으로 저장하지 않는 것이 특징이다.
  • Git의 file 관리방법Git은 파일을 *Committed*, *Modified*, *Staged* 이렇게 세 가지 상태로 관리한다.
    • Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.
    • Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
    • Staged란 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.
    ![Working tree, staging area, and Git directory.](https://git-scm.com/book/en/v2/images/areas.png)
  • [출처][4] : git 공식 home page
  • Git 명령어에 따른 변경
    • Working Directory : 현재 자신이 작업하고 있는 공간이다.
    • Staging : local의 database에 올릴 준비를 하는 공간.
    • Local Repository : local database이다. file의 변경사항을 최종적으로 마무리지어 기록하여 원격 저장소에 올릴 준비를 하는 공간이다.
    • Remote Repository : web에 통신을 통해 자신의 file 변경사항들을 올리는 곳이다. 수정이 되었고 기능이 추가가 되었다는 것을 확인했으면 master branch로 merge하며 최종적으로 project에 변경사항이 반영된다.
    ![diagram of where files in working directory sit before git command](https://www.jrebel.com/wp-content/uploads/2016/02/GitHub-cheat-sheet-graphic-v1.jpg)

:bug: git hub란?


온라인 상에서 사람들과 git을 이용해 협업할 수 있도록 하는 web hosting service이다.

1 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(https://git-scm.com/book/ko/v2/ Local VCS 사진

2 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(https://git-scm.com/book/ko/v2/ CVCS사진

3 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(https://git-scm.com/book/ko/v2/ DVCS사진

4 https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88(https://git-scm.com/book/ko/v2/시작하기-Git-기초) git상태관리 사진