본문 바로가기
개발환경/git

git 사용하기 #1 (부제: GitHub)

by Kibua20 2020. 5. 24.

PC 개발 환경을 세팅하고 그 다음헤 해야 일은 개발 소스 코드를 내 PC로 다운로드 받는 것이다. 예를 들어, 신입 사원이 입사해서 현업에 배치되면 회사 email 계정을 만들고, 본인 PC에 팀에서 개발 소스 코드를 받게 된다. 과거에는 소스 관리 또는 형상관리를 위해서 ClearCase나 SVN 등을 많이 사용했으나, 최근에서 "형상관리 == git 운영" 이라는 등식이 성립할 만큼 대부분 git을 많이 사용하고 있다.

 

SW 개발자들은 Git 서버에서 내 로컬 PC로 소스 코드를 다운로드하고, C+/JAVA/Python 등으로 소스를 수정하고, 내 수정 사항을 다시 Git 서버에 올리는 무한 반복을 하게 된다. 그 과정에 소스의 기준선(Tag) 도 만들고, 임시로 작업 공간을 만드리기 위해서 분기 (branch ) 도 생성하기도 한다.  SW 개발자를 꿈꾸는 분들과 Team Project로 SW를 개발하는 분들은 기본적인 git 개념과 명령어 대해서는 알고 있어야 한다. (※ 신입 사원이 git 을 모르는 경우도 있어도, SW 개발자가 git을 모르는 경우는 없음)

 

인터넷에도 Git에 대한 방대한 자료가 있으며, 그 중  eBook형태로 배포하고 있는 Pro Git Book 을 추천하고자 한다. 본 게시글은 설명은 Pro Git Book 에서 실무에 필요한 내용 위주로 정리하였다. 

설명 순서:

1. Git 개념 파악하기

2. Git repository 만들기 (GitHub 사용)

3. Git 사용 방법  (git clone, git add, git commit, git push, git log)

4. Visual Code와 Git 연동 :  (update 예정)
5. Gerrit 사용하기 (update 예정)


1. Git 개념 파악하기

아래 그림을 이해한다면 Git 에 대한 많은 부분을 이해하고 있는 것이다. 

 

Git 은 "분산 버전 관리 시스템"이다.  현업에서는 Git 서버를 운영을 하고 있기는 하지만,  Git 서버와 Local PC의 git은 동일한 정보를 가지고 있고, 또한 Local PC git을 다른 Local PC도 복제 (clone) 가능하다. git은 수정 이력을 모두 포함하고 있어 서버에 repository 가 없어지더라도 local git 만으로도 복원이 가능하다.  Git 서버의 저장소(repository)는 특정 Project의 SW를 전체적으로 관리할 목적이고, Local PC의 git은 개인 개발용으로 사용된다. 즉 사용 목적으 다르지만 서버나 로컬 PC의 git이 가지고 있는 정보 자체는 모두 동일하다.   

 

Git은 "Delta 기반 버전 관리 시스템" 이다.  Git 정보를 저장할 때 변경 파일 자체를 저장(=snapshot 저장)하는 것이 아니고 변경 부분 (Δ)만 저장한다. Delta 만 저장하기 때문에 각 파일 버전을 관리가 용이하고, 용량도 작으며, 빠르게 연산할 수 있다. SW 개발 실무에서는 diff patchset 만들거나, patchset을 다시 소스에 다시 적용(git apply) 하는 사례가 많다.

 

Git 에서 소스 코드 반영은 "Modified 단계, Staged 단계, Committed 단계" 로 진행된다. 

  • Modified 단계는 파일을 수정했으나, 아직 로컬 git 에 커밋하지 않은 상태를 의미한다.
  • Staged 단계는 수정 사항을 확정하고, 이를 반영 (commit) 예정이라고 정보를 반영하는 것을 의미한다.  (git add
  • Commited 단계는 Staged 단계에서 확정된 내용을 로컬 DB (git)에 반영되었는 것을 의미한다. (git commit)

변경 사항에 대해서 Commit을 만들었으면, Local PC을 수정 사항 diff를 Git 서버 (Remote repository)에 반영을 하게 된다. 이 때 사용하는 명령어가 'git push' 이고,  Git 서버에서는 여러 사람이 수정한 내용을 합쳐 최종 수정 사항을 확정한다.  반대로 Git 서버에서 최종 merged한  수정 사항을  Local git을 내려 받는 것은  'git pull' 이다.  

 

Git 개념: (출처:Pro Git 에서 필요한 내용을 발췌함)

 

 

 

2. Git resposity 만들기 (GitHub 사용 ) 

GitHub는 많은 리눅스 개발자들이 무료로 이미 사용하고 있고, 많은 Open Source 프로그램을 GitHub를 통해서 배포하고 있다. 또한 향후 본 블로그를 통해서 연재하는 소스 코드도 GitHub를 통해서 공유할 예정이다.  Repository를 생성하는 단계는 1) GitHub 계정을 만들고 2) repository 이름을 입력, 3) Public/Private을 선택, 4) URL까지 생성된다.  이러한 과정을 거쳐 생성한 Repository URL은 https://github.com/kibua20/devDocs 이고, 누구나 소스 코드를 받을 수 있다. 

 

현업에서는 Git 서버에 여러 git을 모아서 하나의 repository로 구성하고, 회사 고유의 권한 서버 (permission 서버)를 두어 계정별 소스 code의 access 권한을 조정하고 있다. 또한 코드 품질 향상을 위해서 개발자가 반영하는 code를 git 으로 바로 push하는 것이 아니고, 각 팀 단위의 Code review를 통해서 (e.g. gerrit) 상호 리뷰 후 git repository에 반영하고 있다. (대표적으로 Google)   

 

 

GitHub 에서 repository 만들기

3. Git 명령어 사용

앞서 GitHub 의 repository  https://github.com/kibua20/devDocs 을 기준으로 Git 명령어 설명할 것이다.  우선 Ubuntu에 git 을 설치 해야 한다.  sudo apt isntall git 은 최소 설치하고, git-all 은 git 관련 모든 package (e.g. emac, apatche, 각종 perl) 를 설치를 한다. git 최소 설치만 하더라도 사용에는 큰 문제는 없다.

# Git minimal 설치
$ sudo apt install git

# git 모든 package 설치 --> 최소 설치도 큰 문제는 없다. 
#$ sudo apt install git-all

Git 사용하기 위해서는 User 정보, email 을 반드시 설정해야 하고,  Git commit 진행 시 commit 메시지 작성을 vim editor를 등록한다. (vim 이외의 text editor 도 가능하다)  git config --list를 통해서 확인도 가능하고 ./gitconfig 파일로도 수정이 가능하다.

# Git 초기 정보 구성

$ git config --global user.name "Your Name"
$ git config --global user.email "youemail@company.com"
$ git config --global core.editor vim

# Git config 상태 표시
$ git config --list

 

Git 초기 설정

 


3.1 git clone 

git clone은 <URL>에  위치한 Remote git을 Local git 으로 copy 하는 것이다.  Git 성성부터 최신 수정 내역까지 모두 복사된다. git 을 생성하면 ./git 폴더에서 git head, branch 정도 등이 저장되어 있다. 

 

# git clone

$ git clone https://github.com/kibua20/devDocs

 

git clone
.git 내용 - head 정보, branch 정보가 포함됨

 


3.2. git add   

소스 코드 Hello.py 파일을 만들고 저장한다.  git add . 후에 git status를 확인해보면 stage된 파일 리스트를 확인할 수 있다.

# 수정할 사항을 commit 만들 준비를 한다. Stage 상태로 변경한다.

$ git add .
$ git status

 

git add 에 변경 사항을 fix 한다. (stage 상태)

 


3.3. git commit

stage 된 파일 (반영 파일)을 Commit으로 만든다.  Commit을 만든 push 전에 재 수정이 필요 한 경우 git commit --amend 명령어를 사용해서 commit id는 변경 없이 patchset 만 올릴 수 있다.

# git commit
$ git commit -m  "commit message"

# Remote git에서 push 하기 전에 commit을 수정하는 경우 commit id는 변경 없이 patch set 번호만 올릴 수 있다.
# git add .
# git commit --amend

3.4. git push 

로컬 저장소에 있는 Commit 을 원격 저장소 (Remote repository) git에 반영하는 것이다.  git push 명령어를 사용할 수 있고, gitHub 에는 ID와 password를 입력하면 반영된다.  

# Local git을 원격 저장소의 git에 반영
$ git push orign master

 

git push 명령어를 사용해서 원격 저장소에 수정 사항 commit을 반영

 

Git Hub에서 commit 반영 사항을 확인하면 아래와 같다.

 

Git Hub에 반영된 내용

 


3.5. git log

    Git log를 통해서 수정 내역을 확인할 수 있다. git log에서 상단 숫자가 commit id 이고,  git show <commit id> 는 해당 cocmmit의 상세 내용을 확인 수 있다. 

#수정 사항 확인

#git log
#git show <commit id>

 

git log, git show 를 통해서 수정 내역을 확인

 

< 관련 글>

[개발환경 만들기] 15. Git 사용하기#2 (bat, git-fuzzy, git-delta)

[개발환경 만들기] 14. 우분투 터미널에 Putty 스타일 Copy&Paste 적용 (Terminator)

[개발환경 만들기] 13. 광고 없이 Youtube 동영상 다운로드 방법

[개발환경 만들기] 10. Ubuntu에서 Microsoft 365 '무료'로 사용하기

[개발환경 만들기][Tips] Ubuntu 20.04 키 모음 잠금 풀기 (부팅 후에 표시하지 않도록 수정하기)

[개발환경 만들기] 8. Ubuntu 테마 설치 (맥분투 만들기)

[개발환경 만들기][Tips] 우분투 단축키 (화면 캡쳐, 화면 녹화)




댓글