본문 바로가기
Linux & GIT

Git 기본 개념 정리

by 누워서 코딩 2019. 6. 4.

1. GIT의 역사

Git(깃)

리눅스 커널 개발을 개발한 핀란드 개발자 리누스 토발즈가 만든 

버전 관리 툴(VCS : Version Control System)이다.   

프로그래머가 작업한 소스코드를 압축하여 별도의 저장소(Repository)에

저장해두고 작업한 history를 열람할수 있도록 개발한 툴이 Git이다.

Linux 기반으로 개발되었기 때문에, Bash 명령 기반으로 명령을 입력하여

실행하는 방식이지만, Web과 같은 GUI기반의 툴도 존재한다.

 

Commit의 구조

git commit명령으로 실행 가능하며, Local Repository에 현재 작업한

소스코드를 저장하기위해 사용된다.

하나의 commit이 추가될때는 이전 commit에서 변경된 부분만 추가된다.

즉 commit은 chain 구조로 서로 연결되는 것이다.

이런 구조때문에 이전 commit이 훼손되면 그 이후의 commit도 망가진다.

 

 

2. Git 필수 개념 정리

다음으로 Git을 잘 다루기 위해서는 

제일 먼저 기본 필수개념부터 알아보자.

 

 

Working space(작업 공간)

개인 PC의 Local 작업환경에서 특정 소스코드를 내려받은 위치의 폴더를

일컷는다.

e.g., C:\Work\Project\repo\

 

Repository (저장소)

작업공간의 의미로, Git이 제공하는 자료구조안에 압축시켜 넣은 것이다.

이 저장소는 Local RepositoryRemote Repository로 나뉜다.

일반적으로 Repository라고하면, Local Repository를 가리킨다.

'git init'명령으로 해당 작업공간의 저장소를 생성하면, 

작업공간 하위에 .git이 생성된다.

e.g., 

$git init

 

Remote Repository (원격 저장소)

저장소가 내 PC의 특정폴더가 아닌 외부 서버에 위치해있는 경우를

Remote Repository(원격 저장소)라고 한다.

 

이 원격 저장소가 있기에 여러사람이 이 원격의 저장소를 공유하여

서로 협업으로 작업이 가능한 것이다.

 

Commit (커밋 = Sanpshot) 

명사적 의미 : 

어떤 순간 작업공간의 상태를 저장한것, 

이것은 마치 현재의 상태를 찰나의 순간으로

사진을 찍는것과 비슷하다고하여 Snapshot이라고도 표현한다.

동사적의미 :

"Commit한다"고 표현하며 Commit을 추가한다는 의미다.

즉, 현재의 작업공간의 상태를 Commit으로 만든후에

이를 저장소에 저장한다는 의미이다.

 

 

3. 기본 용어들

 

 

stage (추적)

작업공간에서 변경이 발생한 파일을 다음 commit에 포함되도록 예약하는것을

Stage라고 한다. 

만약 어떤 파일을 추적하면, 그파일을 Stage되었다고 표현한다.

추적되는 파일은 Stage area에 들어가게 된다.

 

unstage (추적해제)

추적하고 있는 파일을 Stage Area에서 제외시키는것을 말한다.

 

commit hash

각 commit을 구분하는 extended SHA-1 포맷의 식별자, 

git log 명령으로 조회 가능하다.

 

branch

commit에서 분기하면 branch가 된다.

 

master

기본 설정된 branch에 붙는 이름이다.

 

origin

원격주소에 기본 설정된 이름이다.

 

Tag

식별하기 쉽게하려는 목적으로 commit에 달아주는 별명이다.

 

HEAD

현시점 기준으로 현재 작업하고 있는 Branch를 가리키는 pointer다.

 

4. git 관련 파일들

.git 

git repository 폴더

 

.gitignor

working space안에서 git이 무시하고싶은 파일을 정의하는 이름이다.

단, .gitignor파일 자신이 commit되어있어야 효력이 발생한다.

.gitignore파일 내부에 stage를 원하지 않는 파일을 넣어주면,

git status목록에서 빨간색으로 나타나지 않아 결과적으로 git add

명령시에도 제외된다.

 

 

5. Git 기본 명령어들

git status

로컬 repository상에서 마지막 commit이후의 변경된 파일의 목록을

나열해주는 명령어다.

현재 stage되고 있는 파일은 초록색으로, 그렇지 않은 파일은 빨간색으로 표시된다.

다른말로 빨간색파일은 stage area내에 포함되지 않는 목록의 파일이다.

 

git add

빨간색으로 표시되는 파일들에 대해 stage area내에 포함시키기 위한 명령이다. 즉 해당 파일을 추적시키는 명령이다.

stage되고 있는 파일만 commit에 포함된다. git add . 로 사용되며 변경된 모든 파일을 추적하게 된다.

 

git rm

해당 파일들을 추적해제 시키는 명령으로, git add의 반대개념의 명령어이다.

 

git commit

커밋을 추가하는 명령어이다. 커밋을 추가하는것을 가리켜 "커밋한다'라고 표현한다. git commit -m "comment" 로 사용

 

git log

commit된 이력을 열람할수 있는 명령어이다.

 

git checkout

해당 commit을 불러오는 명령어이다. 

git checkout (commit hash) 형식으로 사용한다.

commit hash는 모두 적을 필요없고, 중복되지않아 unique한 앞의 몇자리만 입력해도 불러올수 있다.

Tip : 가장 최근의 commit을 기준으로 작업공간에서 발생한 변경사항을 모두 rollback하는 명령으로 "git commit -." 를 사용하면 된다.

 

git diff

commit과 commit사이의 변경사항을 확인할수 있는 명령어이다.

 

6. Git remote command

 

git remote

local과 remote를 연결시키는 명령어이다.

 

git clone

local에서의 git init에 해당하는 명령어이다.  remote 저장소에서 local로 최초로 가져올때 git pull이 아닌 git clone명령을 사용해야한다.

 

git fetch

remote에서 업데이트된 repository들을 가져와서 내 local

repository를 갱신하는 명령이다.

 

git pull

git petch한 다음 working space까지도 갱신하는 명령이다.

 

git push

remote에 내 local repository를 올리는 명령어이다. remote와 remote repository사이에 변경사항이 있는경우 덮어쓰기 해버린다.

 

7. Brand별 git 구분

Git : git은 버전 관리 소프트웨어다.

GitLab : remote repository를 생성하고 관리하는 일을 도와주는 Tool이다.

GitHub : GitHub는 GitHub라는 회사의 서버를 빌려서 remote repository를 생성하고 관리하는 web site이다.

open project에 한해서만 무료로 제공한다. 전용으로 프로젝트를 진행해야 경우에는 GitLab을 사용한다. 먼저 git이 설치되어있어야 사용 가능하다.

 

댓글