[5] Git 기본

SeoChanhee·2020년 10월 12일
0

콘솔의 명령어로 공부하는 것이 Git의 개념을 이해하는 데에 가장 도움이 되고 다른 Git 툴을 사용하는 것에 기초라고 생각하여 콘솔로 공부를 진행했다.

원격 저장소와 로컬 저장소

원격이라는 단어 때문에 항상 헷갈렸던 개념인데 이번에 다시 제대로 적립하고 머릿속에 저장해본다.

원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소입니다.
로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소입니다.


초기 설정

Git을 처음에 설치하면 사용자 정보(사용자명, 메일 주소)를 입력해주어야 한다.

$ git config --global user.name "<사용자명>"
$ git config --global user.email "<메일 주소>"

이렇게 config 명령을 사용해 정보를 입력해줄 수도 있고 .gitconfig 파일을 직접 수정해주는 방법도 있다. 이 파일은 vim ~/.gitconfig로 수정해줄 수 있다.

예전에~/.vimrc 파일을 수정하여 vim을 세팅해준 적이 있다. 이때는 아무것도 모르고 그냥 검색해서 찾은 대로 했었는데 이제는 좀 이해가 간다. ~/ 이 경로에는 세팅에 관련된 파일들이 많이 있다. 파일 이름에 .이 붙어있는데 이것은 숨긴 파일이라는 뜻이다.

단축키(alias)도 설정해줄 수 있다고 한다. 나중에 필요에 따라 설정하고 사용해봐야겠다.


깃 명령어

git init

$ git init

backlog에서는 init이라는 명령어에 대해 단순히 폴더를 Git의 저장소로 등록하는 것이라고 말한다.
좀 더 자세하게 알아보기 위해 검색을 해보니 이러한 내용을 찾을 수 있었다.

깃 저장소를 초기화한다. 저장소나 디렉터리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다. 이것을 입력한 후에야 추가적인 깃 명령어들을 줄 수 있다.

출처: Nolboos's Blog - 완전 초보를 위한 깃허브
  1. init을 하면 .git 폴더가 생기는 건지 궁금하다.
  2. 갑자기 생각났는데 git clone에는 git init과 다른 몇 개의 명령어가 포함되어 있어서 clone 명령어 사용 시 init 등의 명령어를 사용하지 않아도 된다. 자세한 내용은 다음에 더 공부해보는 거로. (참고: Git - A3.2 Appendix C: Git 명령어 - 프로젝트 가져오기와 생성하기)

git status

Git의 관리하에 있는 폴더의 작업 트리와 인덱스 상태를 확인하는 명령어.
init을 한 후 파일을 만들면 그 파일은 Untracked 상태이다. 아직 한 번도 커밋되지 않은 파일이라는 것이다. git add를 통해 Tracked 상태로 만들어줄 수 있다.

git add

git add 명령은 파일을 새로 추적할 때도 사용하고 수정한 파일을 Staged 상태로 만들 때도 사용한다. Merge 할 때 충돌이 난 상태의 파일을 Resolve 상태로 만들 때도 사용한다. add의 의미는 프로젝트에 파일을 추가한다기보다는 다음 커밋에 추가한다고 받아들이는 게 좋다.

수정한 파일은 Tracked(“Changes not staged for commit”) 상태이다. 커밋을 위해 add를 통해 Staged(“Changes to be committed” ) 상태로 만들어주어야 한다.
파라미터에 .를 지정하면, 모든 파일을 인덱스에 등록할 수 있다. (git add .)

git commit

$ git commit -m "<메시지>"
$ git commit -am "<메시지>"

commit 관련 옵션

  • -m : vim에서 별도의 메시지를 작성할 필요 없이 인라인 형식으로 바로 커밋 메시지 작성.
  • -a : 별도의 add 명령어를 사용하지 않고 수정된 파일에 대해 add, commit을 한 번에 수행함. (단, 한 번도 add 되지 않은 파일은 add를 따로 작업 해줘야 함.)
  • -am : -a, -m의 옵션을 합친 형태. (단, 한 번도 add되지 않은 파일은 add를 따로 작업해 줘야 함.)
출처: [Git] 메뉴얼 보는법, commit의 옵션, git의 3가지 공간 - 유자콩

git remote

의미도 모르고 사용해야 했던 git remote add origin라는 명령어의 의미를 알게 되어서 정말 좋다.

$ git remote add <name(등록명)> <url(원격저장소의URL)>
$ git remote add origin 

원격 저장소의 주소는 이름으로 기록해 둘 수 있습니다. 기록해두면 push 할 때마다 긴 원격 저장소의 주소를 입력할 필요가 없습니다. 원격 저장소를 추가하려면, remote 명령어를 사용합니다.
콘솔일 경우 pushpull은 실행 시에 원격 저장소명을 생략하면, origin이라는 이름의 원격 저장소를 사용합니다. 그 때문에 원격 저장소에는 origin이라는 이름을 붙이는 것이 일반적입니다.

git push

웹상의 원격 저장소로 변경된 파일을 업로드하는 것을 Git에서는 푸시(Push)라고 합니다. push를 실행하면, 원격 저장소에 내 변경 이력이 업로드되어, 원격 저장소와 로컬 저장소가 동일한 상태가 됩니다. (push = 업로드)

$ git push <repository(push 경로의 주소)> <refspec(push할 브랜치를 지정)>...
$ git push -u origin master

실행 옵션에서 한번 -u를 지정하면, 이후에는 그 브랜치명 지정을 생략할 수 있습니다. 단, 비어있는 원격 저장소에 최초로 push 했을 때는 원격 저장소명과 브랜치명을 생략할 수 없습니다.

git clone

원격 저장소를 복제(원격 저장소의 내용을 통째로 다운로드하는 것)하려면, 클론(Clone)이라는 조작을 수행합니다. 복제한 저장소를 다른 PC에서 로컬 저장소로 사용할 수 있게 됩니다.
변경 이력도 함께 로컬 저장소에 복제되어 오므로, 원래 원격 저장소와 똑같이 이력을 참조하고 커밋을 진행할 수 있습니다.

클론을 할 때 폴더명을 지정하여 다르게 할 수도 있다는 것을 알았다. 이것은 같은 장소에 같은 원격 저장소를 여러 개 복제할 수 있다는 뜻이기도 하다.

$ git clone <repository(원격 저장소의 URL)> <directory(복제대상의 폴더명)>
$ git clone https://github.com/... tutorial2

git pull

pull을 실행하면, 원격 저장소에서 최신 변경 이력을 다운로드하여 내 로컬 저장소에 그 내용을 적용합니다. (pull = 다운로드)

git log

log 명령어로 이력을 확인합니다.

$ git log --graph --oneline

log 관련 옵션

  • graph를 지정하면 선으로 된 그림 형태로 이력 흐름이 표시됩니다.
  • oneline을 선택하면 한 줄로 커밋 정보가 표시됩니다.

변경 이력 병합(Merge)

내가 끌어온 저장소가 최신 버전이 아닌 경우, 즉 내가 pull을 실행한 후 다른 사람이 push를 하여 원격 저장소를 업데이트해 버린 경우에는 내 push 요청이 거부되어 버립니다.
이런 경우 병합(merge)이라는 작업을 진행하여 다른 사람의 업데이트 이력을 내 저장소에도 갱신 해야 합니다. 만약 병합하지 않은 채로 이력을 덮어쓰게 되면 다른 사람이 push한 업데이트 내역이 사라져 버리기 때문입니다.



마침

누구나 쉽게 이해할 수 있는 Git 입문의 내용은 원리를 이해하기에는 좋지만 디테일을 공부하거나 다양한 명령어를 공부하기는 어려웠다.
일단 발전편까지 공부한 후에 깃의 디테일과 명령어를 좀 더 공부할 것이다.

더 공부할 내용

  1. 누구나 쉽게 이해할 수 있는 Git 입문 (발전편) 공부
  2. Git - Book을 통해 디테일 공부
  3. learnGitBranching
    4. 깃 명령어 단축키 지정(alias)([7] Git Branch)
  4. origin의 의미 더 확실하게
    6. init을 하면 .git 폴더가 생기는가? 그렇다. ([7] Git Branch)
  5. git clone에 포함된 명령어들 (Git - A3.2 Appendix C: Git 명령어 - 프로젝트 가져오기와 생성하기)
  6. Resolve 상태란? ("Merge 할 때 충돌이 난 상태의 파일을 Resolve 상태로 만들 때도 사용한다.")


출처: 누구나 쉽게 이해할 수 있는 Git 입문 (입문편),
Git - Book

0개의 댓글