1. git 구조 공부하기

Posted by ITPangPang
2017. 1. 29. 01:43 메모하기/git


1. git 구조 공부하기



working directory


ㆍ staging area


ㆍ local repository(git directory)


ㆍ remote repository





Git 이란?

git은 버전을 관리해주는

버전관리시스템이다


VCS(Version Control System)


버전을 다르게 생각하면

시점이라고 생각하면 될 것 같다.


저장하는 시점?

오늘 계획이 완료되는 시점?

어떤 기능이 끝나는 시점?


어떤 프로젝트를 하나 완성시키는데

10단계의 절차가 필요하다고 하면


1단계 완료

2단계 완료

3단계 완료

이렇게 쭉 저장될 것이다.


만약 버전관리시스템을 사용하지

않고 프로젝트를 진행하게 된다면


마지막 10단계를 완료한 순간

딱 10단계짜리 프로젝트파일이 하나

남아있을 것이다.

(중간중간 따로 빼놓지 않는이상)


그런데 여기서

회사자금사정이라던가

외부요인에 의해서


8단계까지 계획한 상태로

출시를 하려고 한다면


개발자는 9단계, 10단계를

구현하기 위해 적었던 코드들을

일일이 찾아서 다 지워야 하는

상황이 오게 된다.


또, 아니면

9단계까지 진행이 되었는데

중간에 7단계부터 기획이

바뀐다면?


또, 아니면

한 프로젝트의 규모가 커서

10명이 동시에 진행을 하게 되는

경우라면? 프로젝트 하나의 파일을

때마다 주고받으면서 진행을 해야하는가?


또, 아니면

6단계까지는 이상이 없었는데

7단계 개발을 마쳤는데 갑자기

생각지도 못한 에러가 발생한다면?



뭐 이러한 상황들을

대비하기 위해서 나온것이

버전관리 시스템이다.


이전에는 SVN이라는

버전관리시스템을 써봤었는데

요즘에는 git이 대세라

새로 배우고 있는 중이다.


기본적인 init, add, commit, push

등등의 명령어만 쓰면서 몇달이 지났지만..


이번에

이렇게 새로 정리를 해보면서..

공부하려고 한다.


일단 먼저 Git의 구조를

알아보려고 한다.



Git 기본구조




일단 내 머릿속에 있는

구조를 한번 그려봤다.


Git은 크게

Local과 Remote로

나눌 수 있다.


Local은 말 그대로

내 컴퓨터이다.


Remote는 단어 그대로

원격이다.


Local은 내 컴퓨터에

존재하는 파일들이고


Remote는 원격(서버),

내 컴퓨터가 아닌

다른 장소를 말한다.

(말 그대로 백업이다.)



먼저 Local을 보면,


Working Directory


첫번째로 Working Directory라는게 있다.

말 그대로 작업하고 있는 영역이다.


다음글에서 정리하겠지만

init라는 명령어를 사용하면


Working Directory, Staging Area, Local Repository

라는 영역이 각각 생성된다.


예를 들어서 [C 드라이브]에

폴더를 하나 만들어 보면



이렇게 만들어 질 것이다.


여기서 init라는 명령어를 사용하게 된다면


이렇게 .git이라는 폴더가 하나 생성된다.


이제부터 itpangpang이라는 폴더는

Working Directory가 된다.


여기에서 파일이

생성되게 된다면,

git이 이 변화를 감지하게 된다.



Staging Area


자 Working Directory에서는

변화를 감지한다고 정리했다.


이 말은,

말 그대로 감지만 한다는 것이다.


그럼 감지가 아닌 git이

관리를 해주길 원한다면


관리받고 싶은 파일을

 Working Directory에서 Staging Area로

옮겨주면 된다.


(옮기기 위해서는 add라는 명령어를 사용하면 된다.

이것 역시 다음글에서 알아볼 것이다.)


이제,

Staging Area에 올라간 파일들은

git이 관리를 하게 된다.


파일안의 내용이 추가되거나,

삭제되거나, 수정된다는

사실을 git이 알고 있는 상태가 된다.


한글문서를 열어서 작업을 하다가

혹시 실수로 엑스 버튼을 누르게 되면

변경된 내용을 저장하시겠습니까?

라는 버튼이 뜨는걸 볼 수 있을것이다.


이는 한글이 이전내용과 달라진 것을

알고 유저한테 알려주는 것이다.


Staging Area는 이와 비슷한 상태가

된다고 보면 된다.



Local Repository


말 그대로 저장이다.


Repository가 저장소라는 의미이다.


위에서 한글문서를 예를 들었으니

컨트롤 S 누른것과 마찬가지라고

생각하면 된다.


다음글에서 정리하겠지만

Staging Area에서 Local Repository로

이동시키기 위해서는 commit라는 명령어를

써주면 된다.


하지만,

여기서부터 Git과 한글은

다를 수 있다.


한글에서는

이전에 작업한 파일을 열어서

500자를 추가하고 저장을 하게 되면

그 파일이 합쳐지게 된다.


하지만 git에서

commit를 통해서 Repository에

옮기게 되면


이전에 생성된 파일은 그대로 유지되고

+ 그 위에 변경된 파일까지 저장되게 된다.


파일이 2개가 되는 것이다.


그리고 더 나아가

유저가 이전 파일과 변경된 파일에

대해 어떤 부분이 다른지 눈으로 쉽게

확인할 수 있다.



이제 Remote를 보면,


Remote Repository



Local Repository와 일단

똑같다고 보면 된다. 


대신에 내 컴퓨터가 아닌

다른 장소에 저장되는 것이다.

(다음에 github를 알아볼 것이다.)


다른 장소에 저장이 되니 당연히

내 컴퓨터가 고장나거나, 누군가 훔쳐가서

때려부시더라도 작업하던 내용을

다시 원격으로 가져올 수 있다.


Local Repository에서 Remote Repository로

옮기는 방법은 push라는 명령어를 이용하면 된다.


음..

협업...까지 정리하기에는

너무 이른것 같으니 

오늘 내용은 여기서 마치고..




다음글은 위에서 언급했던

init, add, commit 명령어를 사용하는 방법과


Source Tree(소스트리)라는 GUI 관리도구가 있는데

(버튼을 통해서 모든 명령을 내리는 도구)


이를 통해서 파일들이

Working Directory, Staging Area, Local Repository로

이동하는 모습을 볼 것이다.


물론 버튼은 사용하지 않고 눈으로 확인하는 용도..

모든 작업은 명령어로 진행!!




* 개인적으로 공부하면서 정리하는 내용이니

틀린내용이 포함되어있을 수 있습니다.

ㅠㅠ.

'메모하기 > git' 카테고리의 다른 글

2. git init, add, commit + git status, log  (1) 2017.01.29