Git & Github

황인용·2020년 1월 23일
0

Git

목록 보기
1/1

VCS(Version Control System) !?

Git은 VCS(Version Control System)의 플랫폼 중 하나이다. 여기서 VCS는 소스코드(sourcecode)의 변경사항 내역(version)을 관리하는 시스템(system)이다.
VCS의 기능은 다음과 같다

  • 코드 변경 사항 내역 기록 및 관리
  • 필요시 이전 상태로 rollback
  • 팀단위 개발시 체계적이고 효과적인 협업

VCS 종류

많은 사람들이 버전 관리하기 위해 디렉토리로 파일을 복사하는 방법을 사용한다. 디렉토리 또는 파일에 이름과 시간을 넣는다. 하지만 이 방법도 실수로 파일을 잘못 수정할 수도 있고, 잘못 복사할 수도 있어서 디렉토리나 파일관리가 어렵다. 따라서 VCS를 사용하는데 그 사용하는 종류는 크게 3가지로 나누어 진다

로컬 버전 관리

image.png

  • 로컬 버전 관리 시스템은 간단한 데이터베이스를 사용하여 파일의 변경 정보를 관리한다.
  • 로컬VCS로 가장많이 사용하는 도구가 RCS(Revision Control System)이다
  • RCS는 기본적으로 Patch Set(파일에서 변경되는 부분)을 관리한다.
  • Patch Set은 특별한 형식의 파일로 저장하고, 일련의 Patch Set을 적용해서 모든 파일을 특정 시점으로 되돌릴 수 있다.

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

image.png

  • 여러사람이 한 프로젝트를 진행하다 보면 다른 개발자들과 함께 작업해야하는 경우가 많다. 그때 생기는 문제를 해결하기 위해 CVCS(중앙집중식 VCS)가 개발되었다.
  • CVS, Subversion, Perfoce 같은 시스템은 파일을 관리하는 서버가 별도로 있고, 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)gksek.
  • 관리자는 누가 무엇을 할지 꼼꼼하게 관리할 수 있다.
  • 다만, 중앙 서버에 문제가 발생하면 다른 사람들과 협업할 수 없는 문제가 있다.
  • 서버의 데이터베이스 하드디스크에 문제가 있을 경우, 백업할 방법도 없으며 모든 히스토리를 잃어버릴 수 있다.

분산 버전 관리 시스템

image.png

  • DVCS(분산 버전 관리 시스템)은 Git, Mecurial, Bazaar, Darcs 가 대표적이다
  • DVCS에서의 클라이언트는 단순히 파일의 마지막 스냅샷을 Checkout 하지않고, 그냥 저장소를 히스토리와 더불어 전부 각자의 local에 복제한다.
  • 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다.
  • 대부분의 DVCS 환경에서는 다양한 리모트 저장소가 존재하는데, 각각의 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다.

Git

image.png

Git은 앞에서 설명했듯이 DVCS(분산버전관리시스템) 중 대표적인 한 시스템으로, Linux개발자인 Linus Torvalds가 개발한 시스템이다.
git의 작업은 local과 github라는 중앙시스템에서 사용가능하며, 폴더는 모두, 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하고 완전한 형태의 저장소를 갖는다.

Git 주요 용어

image.png

  • Repository : 저장소를 의미하며, 저장소는 히스토리(history), 태그(tag), 소스의 가지치기(branch)에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스트리를 확인 할 수 있다.

image.png

image.png

  • Remote Repository(원격 저장소) : 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소.
  • Local Repository(로컬 저장소) : 내 PC에 파일이 저장되는 개인 전용 저장소.

image.png

  • Commit : 현재 변경된 작업 상태를 점검을 마치면, 확정하고 저장소에 저장하는 작업.
    - 버그 수정, 기능 추가 등 특별한 의미가 있는 업데이트를 작업 별로 구분해서 각각 커밋하면, 나중에 이력을 보고 특정 변경 사항을 찾기 쉽다.
    • commit시 메세지를 꼭 남겨야한다. 메세지가 없으면 실행이 되지 않는다.

image.png

  • Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점.
  • Staging Area : 저장소에 커밋하기 전에 커밋을 준비하는 위치.
  • index : commit을 실행하기 전의 저장소와 작업 트리사이에 존재하는 공간.
  • stage : commit작업은 작 working tree에 있는 변경 내용을 저장소에 바로 기록하는 것이 아니라 index에 저장하는데, index에 저장할때 파일 상태를 'stage'라 한다.
    image.png
  • push : 내 local repository의 내용을 remote repository에 공유하려면, github로 업로드를 하여야한다. 이것을 Push라 한다.
  • clone : remote repository의 내용을 local에 복제하는 것을 clone이라 한다.

image.png

  • pull : remote repository에 있는 내용을 local repository에 업데이트를 하려면 pull을 실행한다. 원격 저장소의 최신 변경사항 이력을 다운로드하여 내 로컬 저장소에 적용하는 것이다.

image.png

image.png

  • Head : 현재 작업중인 Branch를 가리키는 것.
  • Branch : 가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을때 Merge를 하여 작업한다.
  • Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미.

image.png

image.png

  • confict : remote repository와 local repository 양쪽에서 동일한 부분을 변경하고 merge한 경우, 두 변경내용중 어느쪽을 저장할 것인지 git은 자동적으로 판별이 되지 않기 때문에 사용자에게 confict(충돌) 라고 알려준다.

Basic Git Commands

git init

  • 프로젝트를 git repository로 만들기 위해서 사용하는 명령어
  • 프로젝트란 개발하고자 하는 소스코드들이 모여있는 디렉토리

git add

  • 소스코드 수정 사항들 즉, modified 파일들을 staged 상태로 옮기고자 할때 사용하는 명령어
  • git repo에 새로 추가된 파일들을 staged 상태로 옮길때도 사용
  • 새로 추가된 파일들은 'untracked' 파일 이라고 함

git commit

  • stated 된 파일들을 commit하고자 할때 사용하는 명령어

git diff

  • 어떤 수정사항들이 적용됬는지 보고자 할때 사용하는 명령어
  • statged 된 수정사항들은 볼 수 없음.
  • modified된 파일들만 git diff로 볼 수 있음

git status

  • 현재 상태를 보여주는 명령어
  • 어떠한 파일들이 modified가 되었는지, 어떠한 파일들이 staged가 되었는지 등의 전체적인 상황을 보여줌

git log

  • commit 내역들을 보여줌.(Commit history)
  • tig 추천

git rm

  • 원하는 파일을 git repo에서 삭제

git mv

  • 원하는 파일을 git repo 상에서 이동 시킬때 사용.
  • 주로 rename할때 사용

git branch

  • Branch를 생성할 때 사용.

git checkout

  • 어떤 Branch를 Checkout 할때 사용되는 명령어.

Branching & Merging

image.png

  1. Matser Branch를 Checkout 한다
  2. 자신만의 feature branch를 만든다.
  3. feature branch에서 개발 수정한다.
  4. 완료되면 commit한다
  5. master branch에 feature branch를 merge한다

.gitignore File

git repo에 있는 모든 파일을 전부 commit해야 하는 것은 아니다. 파일들중 commit해야하지 말아야할 파일도 존재한다. 예를들어 개인정보가 들어갈 수 있는 my_settings.py라든지 vim파일이라든지, 또는 csv파일등이 있다. 따라서 이러한 파일들은 commit하지 못하도록 .gitignore 파일을 만들어 미리 지정할 수 있다.

profile
dev_pang의 pang.log

0개의 댓글