Git, 어렵지 않게 시작하기 3 - 필수 명령어

2020. 1. 24. 02:38ETC/GIT

개발자라면 피할 수 없는 협업 도구인 Git. 진입장벽은 높지만 배우면 크게 도움이 되는 도구이기 때문에 소개해 드리고자 합니다. git을 처음 보는 사람을 위해서 git이 무엇인지 알아가고 사용하기 까지 발 맞춰 배워가는 것이 이 글의 목표입니다.

 

---------------  INDEX  ---------------

 

🔥 Git을 사용하는 이유

🚀 Git을 시작하는 방법

🌈 Git 활용하기

💻 Git으로 협업하기

🎠 그 밖에 할 수 있는 것들

 

--------------------------------------

 

이 글은 Git, 어렵지 않게 시작하기 2 에 이은 두 번째 후속편입니다. 1, 2편을 먼저 보고 오시는 것을 추천해드립니다.

 


 

이 번 포스팅에서는 Git 활용하기에 대해서 알아보는 시간을 가져보도록 하겠습니다. 지난 포스팅에서는 Git프로젝트를 시작하는 방법에 대해서 알아보았습니다. 다시 한 번 기억을 되살려보면 아래와 같이 있었습니다.

 

  1. 로컬에서 먼저 생성하는 방법인 git init
  2. 원격 저장소에 있는 프로젝트를 가져오는 방법인 git clone

 

지금부터는 이렇게 생성한 프로젝트를 관리하고 활용하는 방법에 대해 알아보도록 하겠습니다.

 

 

그림을 보면 working directory, staging area, local repository, remote repository라는 단어가 보입니다.

파일들이 저장되는 장소를 나타내고 있는데요, 눈에는 보이지 않지만 Git은 ‘로컬’ 내부에서 working directory, staging area, local repository로 장소를 나눕니다.

 

 

🗂  파일들이 저장되는 장소 

 

working directory

현재 눈에 보이는 작업 디렉토리. 다른 말로 프로젝트의 특정 버전에 checkout한 상태라고도 합니다.

 

 

staging area

원격 저장소로 올리기 전, 로컬 상 최종단계인 local repository에 올리기 전에 원하는 파일들을 선택하여 스냅샷을 만들고 담아둔다. git 디렉토리에 존재하며 Index라고도 부릅니다.

 

 

local repository

원격 저장소로 올리기 전, 로컬에서 마지막으로 저장되는 곳입니다.

 

 

 

파일이 어느 위치에 있는 지에 따라서 파일의 상태를 Committed, Modified, Staged 의 세 가지로 관리합니다.

같이 살펴볼까요?

 

 

🗒  파일의 상태

 

Modified

수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 의미입니다. 그리고 working directory에서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified 상태라고 합니다.

 

 

Staged

현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미합니다.파일을 수정하고 Staging Area에 추가했다면 Staged 상태입니다.

 

 

Committed

데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미입니다. local repository에 있는 파일들은 Committed의 상태입니다.

 

 

 

 

장소와 상태를 잘 구분해두면 이제 나올 명령어들에 대한 이해와 사용이 더욱 용이해질 것입니다. 설명을 읽고 다시 한 번 그림을 보면 조금 더 이해가 갈 것입니다!

 

자 이젠, 파일을 각 장소 별로 옮기고 원격 저장소에 올리는 명령어 등 Git의 기본 명령어를 알아도록 합시다!

 

 

이 전 포스팅에서 눈에 익히게끔 올려두었던 그림입니다. 뭔가 느낌이 오시나요? 느낌이 오셨으면 다행입니다. 위 그림은 파일들의 상태를 변경하는(장소를 변경하는) 명령어들이 적혀있습니다.

 

 

 

⌨️  기본 명령어

 

$ git status

 

working directory 내 파일의 상태를 확인하는 명령어입니다.

 

아무런 작업이 이루어지지 않으면 nothing to commit, working tree clean이라는 문구를 출력합니다.

변경된 작업이 없다는 의미 입니다. 이제 README.md 파일을 하나 만들어보겠습니다.

 

 

untracked files 라는 문구 아래에 변경된 파일들이 나열됩니다. working directory에서는 파일을 두 가지 상태로 분류합니다. 이미 관리되고 있다는 상태를 나타내는 Tracked files, 관리되지 않고 있던 낯선 파일의 상태를 나타내는 Untracked files이 있습니다. 더 자세하게 설명해보자면 아래와 같습니다.

 

git file state

 

 

“Tracked files”

관리 대상인 파일이라는 의미로, 이미 스냅샷에 포함되어 있던 파일을 말합니다. 쉽게 말하자면 Git이 이미 알고있는 파일입니다.이 상태는 더 작게 Unmodified, Modified, Staged 상태로 나뉩니다.

 

 

“Untracked files”

Tracked files를 제외한 파일들을 의미합니다.

 

 

$ git add

 

git add { files}

 

파일을 추적하고 싶다면 위와 같은 명령어를 사용하면 됩니다. 또, 위의 명령어를 사용하게 되면 staging area로 옮겨지는 역할까지 합니다. 만약 모든 파일을 추적하고 싶다면

 

git add .

 

명령어를 사용하면 됩니다. 이 때 .는 ‘모든 파일’을 의미합니다. 파일들을 필터링하고 부분적으로 선택하는 방법에 대해서는 Glob pattern을 알아보시면 해결할 수 있습니다.

 

 

git add 명령어를 사용하고 나서 보면 다음과 같이

“Changes to be committed : ” 라는 의미는 staged 상태라는 의미입니다.

staging area에 올라간 파일을 수정하면 어떻게 될까요?

 

 

Tracked file로 바뀌어 modified라는 상태로 바뀐 것을 확인할 수 있습니다.

 

자, 이제 파일을 커밋하여 local repository로 옮겨 보도록 하겠습니다.

 

 

$ git commit 

 

git commit

 

Commit은 변경 사항을 기록하는 역할입니다. Git은 시간순서대로 Commit 사항들을 정리해두기 때문에, 나중에 이력을 확인하면서 변경 사항들을 쉽게 비교/분석할 수 있습니다.

 

위와 같은 명령어를 입력하면 vim 편집기가 실행됩니다. 만약 편집기를 바꾸고 싶다면

 

git config --global core.editor { editor }

 

를 사용해서 바꿀 수 있습니다.

 

 

원하는 메세지를 작성하세요! ‘#’은 주석이기 때문에 # 줄의 메세지는 추가되지 않습니다.

편집기를 편집하려면 i, a, o 중 하나를 누르고 편집하면 됩니다.편집기를 나가려면 :wq 를 입력하세요!

더 자세한 사용법은 vim 편집기 사용법을 검색해보세요!

 

혹은 짧은 commit은 인라인으로 간단히 작성할 수 있습니다.

 

 

$ git commit -m

git commit -m “ write commit message”

 

commit은 Tracked file이 있어야만 가능합니다. Untracked file은 commit되지 않으니 꼭 바꿔두고(git add) 실행하세요!

 

 

commit 까지 마쳤으니 이제 원격 저장소로 옮기면 되겠죠?

 

 

$ git push

 

git push <리모트 저장소 이름> <브랜치 이름>

 

이 명령은 Clone 한 리모트 저장소에 쓰기 권한이 있어야만 실행됩니다.

 

git push origin master

 

리모트 저장소의 이름의 디폴트값은 origin이며, 많은 경우에 origin을 사용합니다. 혼자 사용하는 저장소에는 대부분 위와 같은 명령어만 사용하면 됩니다. 여기서 나오는 브랜치는 다음 포스팅에서 다룰테니, 일단 브랜치라는 것에 master가 포함되는 구나 만 알아주세요!

 

 

명령어를 입력하고 다음과 같은 안내문이 뜨면 성공입니다. 잘올라갔는지 확인을 해봐야겠죠? git remote -v명령어로 연결된 원격 저장소의 를 확인해보세요!

 

commit 의 수가 늘어나고 새로운 파일이 업데이트 된 것을 확인할 수 있어요.

첫 번째 빨간 박스를 누르면 commit된 이력 (commit hisory)를 확인할 수 있어요.

 

자, 지금까지는 로컬 저장소에서 원격저장소로 저장하기까지의 과정을 알아보았습니다.

그 과정을 정말 간단히 표현한다면 add -> commit -> push 입니다.

사실, 무작정 따라해서 성공해도 성공한 것이니 이해가 안된다고 해서 포기하지 마시길 바래요😁

 

 

이제 반대로 원격 저장소에서 로컬 저장소로 받아오는 방법에 대해 알아가보고자 해요.

대부분 협업을 할 때 자주 사용하는 명령어이고, 협업 시 습관적으로 하는 게 좋은 명령어입니다.

 

 

$ git pull

 

git pull <리모트 저장소 이름> <브랜치 이름>

 

원격 저장소에 있는 코드를 가지고 와서 현재 내 working directory에 있는 코드를 합쳐주는 역할을 합니다.

 

 

( 비슷한 명령어로 git fetch가 있습니다. 원격 저장소에서 데이터를 가지고 오기는 하지만 merge를 수동으로 해야하는 단점이 있기 때문에 자동으로 pull해주는 명령어를 사용하는 것을 추천합니다. merge라는 개념은 다음 포스팅에서 다루겠습니다.)

 

git pull origin master

 

리모트 저장소의 이름은 거의 대부분 (따로 설정한 저장소 이름이 있지 않다면 ) origin입니다. 브랜치 이름은 바뀔 수 있기 때문에 잘확인해주세요!

 

 

 

협업 시에는 git pull 명령어를 먼저 하고 작업을 해야 충동이 날 확률이 적어집니다 ! git pull 하는 습관을 들이면 참 좋겠죠?

이 번 포스팅에서는 Git을 제대로 활용하는 방법에 대해서 알아가보았습니다. 어느정도 Git을 다룰 수 있게 되셨나요? 다음 포스팅에서는 협업 시 필요한 개념과 명령어에 대해 알아보도록 하겠습니다.