TIL - Session: Git / Github (1)

Magit·2020년 4월 1일
0

TIL

목록 보기
7/16

What You Will Learn

  1. Git/GitHub 이란? VCS(Version Control System)이란?
  2. repository 생성 + 관련 명령어(git init, git add remote, git remote -v)
  3. local repository / remote repository
  4. git clone vs. git pull 개념 및 차이점
  5. branch의 개념 + 관련 명령어(branch 생성, branch 이동, branch 제거)
  6. git staging 설명 + 관련 명령어(add, commit, push)
  7. conflict는 왜 발생하는가? 어떻게 해결하는가?

Git / Github

  • Git은 VCS(Version Control System)중에 하나이다. 여기서 version은 우리가 작성한 소스코드 파일의 버젼을 말한다. git 또한 Linus Torvals가 개발했다.
  • Git은 도대체 왜 이렇게 많은 사람들이 사용하는 걸까? 바로 협업이다. 협업을 할 때 편리하게 만들었기 때문이다.

  • Github란?
    • Git을 인터넷에서 관리할 수 있는 중앙시스템이다.
    • 예를들어 10명의 개발자가 같이 개발을 한다고 가정해보자. 개발을 할 때 기준이 되는 저장소가 repository 저장소라고 말한다. 기준이 되는 저장소가 인터넷으로 접근되기때문에 매우 편리하다.
    • 깃허브는 중앙서버라고 할 수 있다. 깃은 우리의 컴퓨터. 즉, 로컬환경에서 사용하는것을 의미한다.
    • 깃허브와 깃은 분리된 환경이고, 이처럼 로컬환경과 중앙서버라는 명확한 차이가 있다.

Github 이용방법

  • 깃허브에 있는 기준 코드를 내 로컬환경에 다운받으려면 git clone 이라는 명령어를 이용해야하고, clone은 복제를 의미하고 이는 remote 환경에 있는 소스를 복제한다는 의미이다.
  • 이후 다운받아 작업한 내용을 중앙서버에 업로드 하려면 push 해야한다. 내 로컬에 있는 소스 수정내용을 중앙서버로 밀어넣는다는 의미이다.
  • 다른 개발자가 내가 수정해서 업로드한 상황을 다운받으려면 pull 해야한다.
  • pull vs clone? clone은 처음 소스를 다운받을때만 사용하고, 이미 다운 받은 소스의 변동사항을 다운받으려면 pull 해야한다.


Git Basics

깃을 버전 관리를 할 때 3개의 상태중 하나의 상태에 있게 된다.

  • Modified
    • 처음 수정이 일어나서 변화를 감지했을때의 상태. 이름 그대로 수정된 파일이다. 아직 commit되지 않은 상태의 파일이다.
  • Staged
    • 중간세이브라고 말할 수 있다. modified 파일에서 한 단계 더 나아가서 곧 commit될거라고 mark 해놓은 상태이다.
    • commit 하기전에 중간상태를 저장하고 혹시라도 잘못 수정되었을 경우 다시 되돌리도록 임시저장하는 기능이다.
    • staging이 되었단 의미는 곧 commit된다는 뜻이다.
  • Committed
    • 깃 기본 상태 3가지 중 마지막에 해당한다. commit이 되었을 때 비로소 push를 할 수 있는 준비가 되었다고 볼 수 있다.

git flow

  1. 소스코드를 clone 한다. (소스코드를 다운로드 받는 다는 의미이며, 전문언어로, "git repository를 checkout한다" 라고 표현한다.)
  2. 소스코드를 수정한다. 즉, 개발한다.
  3. 수정한 파일들을 stage 한다.
  4. 계속해서 소스코드를 수정해 나간다.
  5. 작업이 완료될때까지, commit 할 준비가 될 때까지 3번, 4번을 반복한다.
  6. 완료되면 commit 한다.


Basic Git Commands

git init
프로젝트를 git repository를 만들기 위해 사용하는 명령어. 최초의 프로젝트를 생성한다고 생각하면 좋다. 여기서 프로젝트라 함은 개발하고자 하는 소스코드들이 있는 디렉토리를 말한다. git init 을 해서 git repo로 만들어야 git으로 버전 관리가 시작된다.

git add
modified, 즉 수정된 파일을 staged된 상태로 옮기고자 할 때 사용하는 명령어이다. 무언가 수정하게 되면 그것에 대해서 중간저장을 하기 위해서 commit을 하기 전에 git add을 해야한다. 또한, git repo에 새로 추가된 파일들은 staged 상태로 옮길때도 사용된다. 새로 추가된 파일들을 'untracked' 파일이라고 하는데, git 에서는 이들도 수정사항으로 본다.

git commit
add된 파일들은 하나의 commit으로 만들어서 commit 메세지를 부여하고, commit 하는 작업을 말한다.

git diff
modified 상태에서만 결과물이 나오는데, 말그대로 수정사항들을 보여준다.

git status
현재 git repository 내부안에 있는 상태를 보여준다. modified인지 staged인지 알려준다.

git log
commit 내역들을 보여준다. commit history라고도 한다. 이제까지 commit한 내역들을 모두 볼 수 있는데, 보기가 쉽지 않아서 tig 같은 툴을 사용하면 더 편리하다.

git rm
git에 등록된 파일을 삭제하는데 사용한다.

git mv
git에 있는 파일을 이동시킬 때 사용한다. 주로 rename 할 때 사용된다.

git branch
branch를 생성하고 삭제하고 관리하는 명령어이다.

git checkout
어떤 branch에서 checkout 할 때 사용되는 명령어 이다. branch를 이동할 때 사용한다.



Branch & Merging

branch는 가지이다.
git은 commit 내역을 tree 형태로 관리한다. 기준이 되는 history인 master는 기본적으로 우리가 이용하는 소스 가지이다. 우리가 뭔가 수정을 하고 싶을 때는 master에서 하지 않고, branch를 새로 만들어서 작업한다. 이유는 기존에 있는 소스가 영향을 받지 않고 안전하게 관리하기 위해서다. 또한, 여러 사람이 동시에 master에 수정을 하게 되면 변동사항에 영향을 받아서 문제가 생긴다.
이렇게 생성하는 branch를 feature branch 혹은 기능 브랜치라고 한다. 우리가 branch를 생성하게 되면 branch의 명칭은 feature/ 와 같이 앞에 붙이는 걸 권장한다.

merge는 기존의 코드와 수정사항을 합치는 걸 의미한다. 이 과정은 master branch에 feature branch에서 작업한 commit을 병합하는 것이다. 과정에 따라 충돌이 발생할 수 있다. 충돌은 conflict 라고도 부르는데, conflict는 에러가 아니라 소스를 수정하고 합치는 과정에서 필연적인 과정이다. conflict가 발생하면 해당 부분을 git에서 가이드 해준다. 해당 가이드 부분을 확인하고 수정한 뒤 merge하면 된다.

순서를 정리해보자.
1. Matser branch를 check out 한다.
2. 자신만의 feature branch를 만든다.
3. Feature branch에서 개발을 한다.
4. 완료되면 commit 한다.
5. Master branch에 feature branch를 merge 한다



.gitignore File
git repo에 있는 모든 파일을 전부 commit해야하는 것은 아니다. 파일들중에 commit 하지 말아야 하는 파일들도 있는데, 이런 파일들을 git에서 자동으로 skip하도록 설정하는게 좋다. .gitignore 파일을 만들어서 관리하게 되는데, .gitignore 파일에 *.un~ 같이 라인을 추가하면 된다.


What You Will Learn

  1. Git/GitHub 이란? VCS(Version Control System)이란?
    • git : 버젼관리를 위해 리눅스 커널의 창시자인 리누스 토발스가 직접 만든 프로그램. 서버에 의존하지 않고, 자신의 로컬 PC에서 소스코드를 관리한다. 작업의 기록을 남겨서 수정 및 보완 등의 이력을 추적할 수 있게되서 협업하기 쉬워진다. 게임의 세이브 포인트를 남긴다고 생각하면 좋다.
    • github : git은 프로그램이지만 github은 파일의 버젼 관리를 다른 사람이 볼 수 있게 정보 교환이 이뤄지는 일종의 서버라고 볼 수 있다. 협업을 하고 소스에 대한 이력을 관리할 수 있어서, 다른 사람들이 개발한 코드를 볼 수 있고, 진행되는 프로젝트에 참여해서 수정 및 보완 작업을 협업할 수 있다.
    • VCS : 소스코드 등의 변경점을 관리해주는 소프트웨어를 말한다. 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버젼을 다시 꺼내올 수 있는 시스템을 의미한다. 버젼을 통해 변경 사항과 작업자를 추적할 수 있다.

  2. repository 생성 + 관련 명령어(git init, git add remote, git remote -v)
    • git init : 해당 폴더에서 git init 명령어를 실행하면 새로운 저장소가 생성된다. 저장소 구성을 위한 .git 폴더가 생성되며, 이 폴더에는 프로젝트 관리를 위한 파일들과 해당 프로젝트에만 적용할 config 파일 등이 들어 있다.
    • git add remote : 기존의 워킹 디렉토리에 새로운 remote repository(원격저장소)를 추가한다. git add remote <remote_repo_name> <remote repository url> 명령을 사용한다. git add remote exam https://github.com/[이름]/gitExam 이라는 명령어가 의미하는 것은 exam 이라는 이름으로 원격 저장소 주소를 등록하게 된다.
    • git remote -v : (일단 git remote 가 원격 저장소를 관리할 수 있는 명령어이다.) git remote -v 는 등록된 저장소 이름과 url을 표시한다.

  1. local repository / remote repository

    • Remote repository : 파일이 Remote repository 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소. 여럿이 같이 쓰는 클라우드 느낌이다.

    • Local repository : 내 PC에 파일이 저장되는 개인 전용 저장소

  2. git clone vs. git pull 개념 및 차이점

    • git clone : 서버의 프로젝트를 내려받는 명령어. git clone [저장소 주소] 를 하면 된다. 저장소의 내용을 다운로드 받고 자동으로 init도 된다.
    • git pull : 이 명령어는 git fetchgit merge 를 합친 명령어라고 볼 수 있다. 원격 저장소의 변경사항 중 로컬 저장소에 반영되지 않은 내용을 가져와서 현재 branch에 병합한다. 옵션을 주지 않으면 원격 저장소의 master branch를 갖지고 온다.

  3. branch의 개념 + 관련 명령어(branch 생성, branch 이동, branch 제거)

    • branch의 개념 : 독립적으로 어떤 작업을 진행하기 위한 개념. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다.

    • branch 생성 명렁어 : git branch issue 라는 명령어도 issue 라는 branch를 생성한 것이다.
    • branch 이동 명령어 : 위에서 생성된 issue 라는 branch에서 작업하려면 이 branch를 사용하겠다고 명시적으로 지정해줘야한다. 그때 명령어가 checkout이다. git checkout issue 라고 작성하면 된다.

      git checkout -b <branch_name>
      checkout 명령어에 -b 옵션을 넣어주면 브랜치 작성과 체크아웃을 한번에 할 수 있다.

    • branch 제거 명령어 : 삭제는 branch 명령어에 -d 옵션을 주면 된다. git branch -d issue 라고 작성하면 issue 브랜치가 삭제된다.

  4. git staging 설명 + 관련 명령어(add, commit, push)

    • git staging : staging areaindex 라고도 불리는 장소인데, commit 이 되기전에 거쳐가는 공간이다. git add 명령어를 통해서 index 장소로 올라간다.

    • add : working directory에서 수정된 파일을 staged area 에 올리는 명렁어이다. git add <파일 이름> 으로 사용한다.

    • commit : staging 된 파일을 로컬저장소에 기록하는 작업이다. staged 상태인 파일을 git commit 명령어로 로컬 저장소에 저장할 수 있다.

    • push : 로컬저장소에서 원격저장소로 보내는 작업을 담당하는 명령어이다.
      git push <remote_name> <branch_name> 이라는 명령어로 사용하는데, 상황에따라 문법이 달라질 수 있다.
      git remote add origin <원격 서버 주소> 는 기존에 있던 원격 저장소를 복제한 것이 아닐 때, 원격 서버의 주소를 git에게 알려줘야하기 때문에 이런 문법을 사용한다.

      git commit -m "comments"
      commit 명령어에 -m 옵션을 주면 커멘트를 달 수 있다.

  5. conflict는 왜 발생하는가? 어떻게 해결하는가?

    • confilct(충돌)은 merge 과정에서 파일의 이름이 같으면 충돌한다.
    • 파일이 다르면 무조건 자동으로 합쳐준다.
    • 파일이 같아도 수정한 부분이 다르다면 자동으로 합쳐준다.

    이부분은 아직 더 추가할 예정


Git 단어 정리

HEAD는 현재 브랜치를 가리키는 포인터이며, 해당 브랜치에 담긴 커밋 중 가장 마지막 커밋을 가리킨다. 단순하게 HEAD는 마지막 커밋의 스냅샷이라고 생각하면 편하다.

profile
이제 막 배우기 시작한 개발자입니다.

0개의 댓글