지난 글에 이어서 여러가지 실습을 해보면서 사용법을 익히도록 해봅시다.

1) Git설치.

2) Git으로 버전관리 할 디렉토리인 'git Study'를 생성

3) 'git Study' 디렉토리 내에서 'git init' 명령어를 통해 이 디렉토리가 git으로 관리됨을 선언

4) 'git Study' 디렉토리 내에서 'test.c'라는 파일을 만들고, add, commit 해보기.

여기까지가 지난 글에 했던 작업입니다.

이번 글은 add와 commit에 대한 좀 더 자세한 사용법에 대한 실습을 하겠습니다.




오늘 실습을 하기전에 먼저 commit을 하려면 add를 먼저 해야된다는 것을 알아야합니다.

그리고 여러 파일에 대해 git add를 하고 commit를 하게되면 add한 파일이 한꺼번에 commit됩니다. (즉, 한꺼번에 commit했으므로 이전 Version으로 돌아가려면 add한 파일들 모두 다 이전 Version으로 돌아갑니다.)

그러므로 각 파일에 대해 따로 버전관리를 하려면

git add test.c    -> git commit

git add test2.c   -> git commit

이런식으로 각각 따로 add와 commit을 해 줘야합니다.

이해하기 어려웠다면 실습을 통해 보여드리겠습니다.



git add,commit에 대해 좀 더 자세히 소개하고자

현재 디렉토리 내에 'test.c' 파일을 수정하였고, 'test2.c' 파일을 추가적으로 생성하였습니다.


1)  'git status' , 'git log'  

< test.c가 변경되었다는 것과 test2.c가 추적되고있지 않다는 status를 볼 수 있습니다>

<현재 Version 1까지 commit된 것을 확인할 수 있습니다.(version1은 test.c를 commit하고 test.c를 수정하기 전>


2) git add test.c -> git add test2.c  -> git commit

<현재 상태>

위의 상태에서 git add test.c  , git add test2.c 를 하고 git commit를 해보겠습니다.

즉, 두 파일을 add하고 한꺼번에 commit하는 것입니다.

두 파일을 add하고 commit하니까 새로운 Version2가 '1개' 생긴 것을 볼 수 있습니다.

이것은 'add한 파일들이 같이 버전 갱신이 된다'입니다.

만약 test.c에 대해 Version1으로 돌아가고싶다 -> test2.c도 test.c와 같이 commit 했으므로 test2.c는 commit되지 않은 상태로 돌아가는 것입니다.

Version1으로 되돌린 후 디렉토리 모습입니다.

Version1은 test2.c가 없고 test.c가 수정되기 전 버전이므로 이 버전으로 돌아가는 것입니다.

(이전으로 돌리는 방법은 추후에 포스팅 할 예정입니다)


3) git add test.c -> git commit -> git add test2.c -> git commit

<현재 상태>

위의 상태에서 git add test.c -> git commit -> git add test2.c -> git commit을 해보도록 하겠습니다.

test.c를 수정했으므로 commit message를 'Fix test.c'로 하였고, test2.c를 추가했으므로 'Add test2.c'로 하였습니다.

이렇게 되면 'Fix test.c'의 상태로 돌아가도 test.c까지 commit된 것은 남아있고 test2.c가 commit 된 내용만 삭제.

이렇게 각 파일을 따로 add와 commit을 하게되면 좀더 확실히 버전 관리를 할 수 있습니다.


결론 : git add를 통해 commit할 파일을 선택할 수 있다.


Git 설치 ( https://git-scm.com/ )

위의 사이트에서 아래의 사진과 같이 Download를 누르고 다운받으면 된다.






다운을 받고 'git bash'를 실행시켜보자.

git bash를 실행시키고, 'git'을 입력하면 사용할 수 있는 명령어들이 다음과 같이 나온다.


이 명령어들은 차근차근 알아보도록 할 것이다.
그리고 먼저 할 작업은 git으로 관리할 디렉토리를 먼저 생성하겠다.


1) git으로 버전 관리를 할 디렉토리를 생성(이미 프로젝트 폴더가 있으면 그 위치로 이동하면 됨)


저는 위와 같이 Documents 디렉토리 내부에 gitStudy라는 디렉토리를 생성했습니다




2) 'git init'


 git init을 하게되면 .git 디렉토리가 생성된다. 

Git init은 뭘까?

- '현재 디렉토리에 작업을 진행하겠다'라고 Git에게 알려주는 것. 현재 디렉토리를 git의 버전 저장소로 만드는 것.

- init을 하게되면 .git 디렉토리가 생성되고 .git 내부에는 버전 관리하면서 생기는 정보가 저장된다. .git을 지우면 마지막 소스코드는 남아있지만 버전에 대한 정보는 다 지워진다.



3) 관리할(추적할) file생성과 'git status'

 'test.c' 파일을 생성하고, 'git status'를 입력해 보았습니다.


git status를 입력하게되면 위와 같이 뜨게됩니다.
'Untracked files : test.c' 라고 되어있는 것을 볼 수 있습니다.  이 것은 "git이 test.c에 대한 버전 관리를 하고 있지 않다" 라고 볼 수 있습니다. 
따라서 이 test.c 파일을 git에게 관리하도록 요청해보겠습니다.

 ※ git status : 현재 저장소의 상태를 확인하는 명령어 






4) 'git add'


 git에게 test.c 를 관리하도록 하기 위해 git add test.c 를 해줍니다.
그리고 git의 상태를 보기위해 git status를 입력해보면
위와 같이 test.c가 새로운 파일이라는 것을 git이 인식하게 되고 이제 추적하도록 하는 것이다.

git add란?
 - git에게 파일을 추적하도록 명령하는 것.
 - 새로 만든 파일에 대한 추적, 수정된 파일을 관리하기 위한 추적 모두 add 명령어를 사용한다.
 


 commit를 하기전에
git config --global user.name "자신의 닉네임"
git config --global user.email "자신의 이메일"
 을 입력해서 버전에 포함될 버전을 만든 사람에 대한 정보를 설정해줍니다. 이 설정은 ~/.gitconfig 파일에 저장 되고 1번만 해주면 됩니다.


5) git version 만들기 = 'git commit'

git version을 만들어보겠습니다.

git version을 만드려면 git commit 명령어를 사용하면 됩니다.
아래와 같이 git commit를 해보겠습니다. 
그리고 현재 버전이 잘 만들어 졌는지 확인을 하기위해 'git log'를 하게되면 다음과 같은 정보가 나오는 것을 확인 할 수 있습니다.  (언제, 누가  commit 했는지가 commit message와 함께 나오는 것을 확인)


 저는 -m 옵션으로 commit message를 입력했지만
git commit만 입력해서 commit message를 입력 할 수 있습니다.


 1~2년간 풀어온 알고리즘 문제를 Github에 저장해오고 있었는데, 얼마전 포멧하고 다시 세팅하는 과정에서

repository를 다 날려 먹었다. (push가 안되서 Stackoverflow에서 글은 읽지않고 명령어만 따라쳤음...)

BOJ, SWExpert 등 합쳐서 600~700개의 코드 파일을 날리고 나니까 Git에 대해 잘 모르고 

쓰고 있었다는 것을 알았다. ( commit, pull, push 밖에 사용하지 않았기때문...)

따라서 오늘부터 Git에 대해 기본적인 것부터 공부하려고한다. 완전 파헤쳐보기 보단 필요한 개념들만 알아가보도록 하자.




Git이란?

- Git은 버전 관리 시스템이다.

예를 들면, 우리가 긴 레포트나 논문을 쓸 때, 한글 파일을  '201102448_사명기_미완성' -> '201102448_사명기_수정완료'

 -> '201102448_사명기_진짜마지막'  이런식으로 여러 Version들로 저장하는 경우가 있다. 

Git은 이런 경우에 하나의 파일만 만들고 변경사항만 저장, 관리하는 기능을 한다.


- Git은 버전 관리 외에도 Backup, Recovery, Collaboration 기능을 한다.

 Backup : 소스코드를 백업해서 만약의 사태에 대비할 수 있다.

 Recovery : 소스코드를 이전 상태(Version)으로 쉽게 돌아갈 수 있다.

 Collaboration : 다른사람과 협업 할 수 잇다.




버전 관리란?

- 버전 관리 시스템은 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.

 위의 Git 설명 예에서 레포트나 논문 작업을 완료하고 나서 '201102448_사명기_미완성'인 Version을 다시 꺼내 올 수 있다는 것이다.

- 버전 관리는 로컬 버전관리, 중앙집중식 버전관리, 분산 버전 관리 시스템이 있지만, 필자는 Git의 시스템인 '분산 버전 관리 시스템'만 소개하려고 한다.



분산 버전 관리 시스템 

  분산 버전 관리 시스템은 각 개발자가 중앙 서버에 접속하지 않은 상태에서도 코드 작업을 할 수 있다.

클라이언트가 원격 저장소 파일의 마지막 스냅샷을 가져오는 것이 아니라 저장소를 히스토리와 더불어 전부 복제한다. 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다. 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다.

추후에 git의 작동원리에 대해 자세히 다룰 예정입니다.


Git? Github? 뭐가 다른거지?

- Git은 위에서 말한대로 '버전 관리 시스템'이다. 

  Github는 Git 버전 관리 시스템을 위해 원격 저장소를 제공하는 git호스팅 서비스이다. 




 다음 글에서는 Window에서 Git 설치와 실습을 해보겠습니다!



+ Recent posts