지옥에서 온 Git (1)

수업 소개

  • git은 버전 관리를 위한 시스템이자 프로그램
  • 우리는 report.doc, report_final.doc, report_final_real_final.doc과 같이 여러 개의 버전(네이밍)으로 이미 버전 관리를 경험한 적이 있음
  • What is the Version Control System?
    • 여러 가지 역할과 의미를 가지고 있기 때문에 한 번에 이해하기는 힘듦
    • 가장 핵심은 고정된 파일의 이름으로 버전 관리가 가능하다는 것
    • 그 외에도 Backup, Recovery, Collaboration의 기능을 사용할 수 있도록 도와줌
  • 여러 가지 버전 관리 시스템들이 존재
    • CVS - SVN - GIT 의 순서로 발전한 버전 관리 시스템
    • Dropbox, Google Drive 등도 버전 관리 시스템의 일종
  • git은 많은 기능 때문에 복잡할 수 있음
    • 그러나 복잡한 프로젝트일수록 git의 도움으로 Complexity를 줄일 수 있음
    • 따라서 git을 아는 것은 실무 프로젝트의 복잡성을 줄여주는데 큰 도움이 됨

저장소 만들기

# 프로젝트 디렉토리 생성
mkdir git_devfon

# 프로젝트 디렉토리로 이동
cd git_devfon

# 현재 디렉토리를 git의 버전 저장소로 초기화
git init 


  • .git 디렉토리에 버전 관리 정보가 저장되기 때문에 중요한 디렉토리!

git이 관리할 대상으로 파일 등록

  • git은 기본적으로 새로운 파일을 관리하지 않음
  • 파일을 관리하기 위해서는 관리 대상으로 따로 등록을 해주어야 함
  • 파일을 이렇게 선택적으로 관리하는 이유는 프로젝트를 진행함에 있어 주가 되는 파일과 임시 파일 등이 있기 때문
    • 임시 파일의 경우 굳이 버전 관리 해줄 필요가 없음
# 새로운 파일을 생성
vim test.txt

# git이 파일을 추적하도록 명령
git add test.txt

# 프로젝트 디렉토리의 상태를 확인
git status


버전 만들기 (commit)

# git 닉네임 설정
git config --global user.name "자신의 닉네임"

# git 이메일 설정
git config --global user.email "자신의 이메일"

# commit message 작성 in Vim
git commit

# log 확인으로 committer와 committer의 이메일, commit 날짜 확인 가능 
git log



  • 닉네임과 이메일 설정은 최초 1번만 해주면 됨
  • 파일 생성 및 수정 후, 버전 만들기 전 add를 재설정해주어야 함
    • add만 사용하면 선택적으로 파일에 대한 commit 수행 가능
    • add로 디렉토리를 추적시키면, 해당 디렉토리는 commit 대기 상태(stage area)가 됨
    • commit이 된 결과가 저장되는 곳이 repository
    • git commit -a 로 수정된 모든 파일에 대한 commit 수행할 수도 있음(add된 파일에 한해서만)
    • git commit -m 'message' 통해 vim editor 들어가지 않고 commit message 바로 전달 가능

변경사항 확인하기

  • 버전 간 소스 코드의 차이점과 과거 내용을 알 수 있음
  • 과거 버전으로 돌아갈 수 있음

# 버전 간의 코드 차이를 출력하고 싶을 때
git log -p



  • 빨간색 네모는 version 4에서의 test3.txt
  • 파란색 네모는 version 5에서의 test3.txt

# 버전 간 차이점을 비교할 때
git diff 'version id'..'version id2'
  • 각각의 commit id는 중복되지 않는 고유한 것
  • 버전 간 비교를 할 때 이전 버전에서 없었던 파일은 /dev/null 과 같이 표기됨

# git add 하기 전 자신의 수정 내용을 이전 버전의 것과 비교할 때
git diff 



  • 모든 수정 파일들의 add 후에는 아무 것도 출력하지 않음
    • 새로운 파일의 생성 이후에는 비교값이 없으므로 작동 X

과거 버전으로 돌아가기

# 해당 버전 id로 돌아가는 명령어
git reset --hard "commit id"



  • second commit 이후 정보들이 log에 나타나지 않는 것을 볼 수 있음
  • --hard 옵션 외에도 --soft, --mixed 옵션 등이 있음
  • git은 어떠한 정보도 잘 삭제하지 않음. 따라서 눈에는 해당 버전 id 이후의 log가 보이지 않지만, commit 내용은 사실 남아있음(차후 다시 공부)
  • repository를 공유한 이후부터는 절대 reset 명령어를 사용하면 안 됨. 자신의 local에서 작성할 때 까지만 reset 명령어의 사용 가능

# 해당 버전 id의 commit을 취소한 내용으로 새로운 버전을 만드는 명령어
git revert "commit id"



  • second commit에서 'test for github'를 'test for github2'으로 수정
  • second commit을 revert한 결과 'test for github2'로 수정한 commit이 취소되고 다시 'test for github'으로 변경되어 저장되는 것을 확인 가능


'Software Convergence > Git' 카테고리의 다른 글

지옥에서 온 Git (3)  (0) 2018.08.27
지옥에서 온 Git (2)  (0) 2018.08.24

+ Recent posts