ABOUT ME

-

Today
-
Total
-
  • [Git & GitHub] 왕초보를 위한 깃과 깃허브 사용 튜토리얼
    Study/Frontend 2020. 2. 13. 13:00
    반응형

    Git & GitHub 튜토리얼


     

     

    Initial revision of "git"

     

    Git은 리눅스의 창시자 Linus Torvalds가 개발한 도구이다.

    위는 깃허브에 Linus가 올린 첫 번째 수정 커밋인데 커밋 메세지가 눈길을 끈다.

     

    Initial revision of "git", the information manager from hell 

     

    지옥에서 온 정보 관리자...

    ㅋㅋㅋㅋ 얼마나 소스코드를 공동으로 관리하는 것이 힘들었는지 알 수 있는 메세지다.

     

     

     

     

    Git

    is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

     

    깃은 한마디로 버전 관리 시스템이라고 할 수 있다.

    방대한 소스코드를 공동으로 관리하기 위해 만들어진 시스템이며,

    깃의 용도는 버전관리, 백업, 협업을 위주로 한다.

     

    • 버전 관리 : 수많은 파일들의 변경 사항 이력을 추적하고 관리할 수 있다.

      여기서 commit 이라는 단어가 등장하는데, 커밋은 새로운 버전을 생성한다는 의미이고,
      하나의 버전에서 여러 종류의 파일을 함께 관리할 수도 있다.

    • 백업 : 컴퓨터라는 하드웨어는 언젠가는 손상되기 때문에, 다른 공간에도 작업 파일을 보관해야한다.

      Local Repository는 내 컴퓨터의 내부 저장소를 의미하고,
      Remote Repository는 서버 등 네트워크 상의 원격 저장소를 의미한다.
      기본적으로 로컬 저장소에서 작업을 진행하고 그 결과를 원격 저장소에 동기화 시킨다.
      여기서 push 라는 단어가 등장하는데 파일을 추가하거나 변경 내용을 원격 저장소에 업로드 한다는 의미이다.

    • 협업 : 모두 다른 공간에 있어도 원격 저장소를 매개로 함께 작업을 동시에 진행할 수 있다.

      여기서 pull 과 branch라는 단어가 등장하는데,
      다른 사람이 작업하던 것을 내 컴퓨터로 가져와서 작업해야할 때는 pull 을 사용한다.
      branch는 여러 사람이 공통된 파일을 기반으로 서로 다른 작업을 병행해야 할 때 사용하는 기능이다.

     

     


     

     

    git workflow

     

    [ Git 버전 관리 ]

     

    • 버전으로 만들어지기 전 파일을 수정하는곳 : working directory
    • 버전관리를 원하는 파일을 모으는 곳 : staging area
    • 만들어진 버전들이 모인 곳 : repository

     

    git config : Git 사용자 정보를 설정한다. (최초 1회만 실행)

    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com

     

    git init : 버전관리 원하는 폴더 위치에서 명령어를 실행해야 한다.

    $ git init

    폴더 내에 생긴 .git 폴더는 버전관리를 진행할 폴더이다. 절대 삭제하지 말아야 한다.

     

    git status : 저장소의 상태 / working tree status 를 확인

    $ git status

     

    git add 파일명 : 해당 파일을 staging area로 추가한다.

    git add 폴더명 : 해당 폴더를 staging area로 추가한다.

    git add . : 현재 디렉토리에 있는 모든 파일을 staging area로 추가한다.

    $ git add work.js
    $ git add ./works/
    $ git add .

     

    git commit -m "메시지" : 작업 후 특정 메시지를 작성하여 버전을 생성한다.

    git commit -am "메시지" : git add와 git commit 한 번에 할 수 있다.

    git commit : 여러 줄의 커밋 메시지를 편집기를 통해 편리하게 작성할 수 있다.

    git commit --amend : 이전 커밋 메시지를 편집기를 통해 수정한다.

    $ git commit -m "first commit"
    $ git commit -am "first commit"
    $ git commit
    $ git commit --amend

     

    git log : 로컬 저장소의 커밋 히스토리를 탐색한다. (보고 나가려면 q 버튼을 누른다)
    git log --stat : 버전마다 관련된 파일들을 그룹핑하여 확인할 수 있다.

    git log -p : 아주 복잡한 코드일 경우 문제가 생긴 코드를 추적할 때 확인하기 좋다.

    $ git log
    $ git log --stat
    $ git log -p

     

    git checkout 커밋ID : 해당 커밋ID 를 입력하면 그 커밋의 작업 시점으로 돌아갈 수 있다.

    즉, head를 이동하면서 과거와 현재를 왔다 갔다 하면서 탐색할 수 있다.

    head=>master 가 붙어있는 커밋이 가장 최근 커밋이다. 
    git checkout 브랜치명 : 로컬 저장소에서 해당 이름의 브랜치로 전환한다.

    $ git checkout 4357289475
    $ git checkout main

     

    git diff : 변경사항을 볼 수 있다. 커밋하기 전에 활용하면 좋다.

    $ git diff

     

    git reset --hard 원하는버전커밋ID : 현재 작업 내용을 삭제하고 원하는 버전으로 복원할 수 있다.
    이 명령어는 공유되기 전 단계의 버전만 할 수 있다.

    git reset --hard HEAD^ : 최종 커밋 취소하고 파일 까지 복구한다.

    $ git reset --hard 45352451
    $ git reset --hard HEAD^

     

    git revert 현재버전커밋ID : 기존의 커밋은 내버려두고 이전 커밋으로 복원시키는 것이다.

    기존 커밋은 사라지지 않는 것이 reset과는 다른 점이다.

    그리고 네번째 커밋에서 첫번째 커밋으로 복원시키려면 revert를 네번째 부터 3번 진행해야 첫번째 커밋으로 복원된다.

    $ git revert 2341345

     

     


     

    [ Git branch & conflict ]

     

    지금까지 만들던 버전에 이어서 서로 다른 작업을 병행하며 진행해야할 때, 

    저장소를 복제하지 않고도 이러한 효과를 낼 수 있는 것이 바로 branch 이다.

    즉, 똑같은 작업물을 가진 공통 저장소를 기반으로 각자 다른 작업을 병행하며 진행할 수 있다.

     

    git branch : 브랜치 목록을 보여준다. 레포지토리를 생성하면 기본으로 master라는 기본 브랜치가 있다.
    git branch 브랜치명 : 특정 이름을 가진 브랜치를 생성한다.
    git checkout 브랜치명 : 다른 브랜치로 이동할 수 있다.

    $ git branch
    $ git branch login
    $ git checkout main

     

    git log --all --graph --oneline : 모든 브랜치를 한 줄 씩 그래프 형태로 볼 수 있는 명령어이다.

     

    출처: https://devblogs.microsoft.com/devops/updates-to-the-git-commit-graph-feature/

     

    git merge : 현재 브랜치에서 다른 브랜치를 병합할 때 사용한다.

     

    <merge 하는 방법>

     

    1. git checkout master : 합치려고 하는 공통의 조상인 base 브랜치로 체크아웃한다.

    2. git merge 브랜치명 : base 브랜치에 특정 브랜치를 머지한다.

    $ git checkout master
    $ git merge bug-fix

     

    <conflict 해결 방법>

     

    깃은 알아서 병합해주긴 하는데, 같은 곳을 수정해서 충돌이 일어나면 알아서 인식해서 알려준다.

    즉, 같은 곳을 동시에 수정해서 머지했을 때 충돌이 일어났다면,
    1. 충돌이 일어난 코드 부분을 수동으로 수정한다.

    2. git add 와 git commit 실행하면 정상적으로 병합된다.

    깃이 충돌을 처리하는 방법은 3 way merge 방식이다.

    출처: 생활코딩

     

     


     

    [ Git Backup ]

     

    소스코드와 버전을 안전하게 백업하고 싶을 때, 여러 컴퓨터를 옮겨가며 작업해야할 때, 

    다른사람들과 협업을 해야할 때 필요한 작업이다.

     

    원격 저장소를 임대하는 것을 git hosting 이라고 하는데, Github, Gitlab 등 여러 사이트가 있다.

    그 중 가장 많이 활성화되어 있는 것이 바로 Github이다.

     

    깃허브에서 private 또는 public으로 repository를 생성하면 원격 저장소를 쓸 수 있게 된다.

     


    git remote add [원격저장소 이름] [자신의 Github 원격저장소 주소] : 로컬 저장소와 Github 원격저장소를 연결한다. 

    원하는 디렉토리 위치에서 실행한다.
    git remote -v : 원격 저장소에 대한 자세한 목록들 보기

     

    $ git remote add origin https://github.com/anxiubin/TIL.git
    $ git remote -v 

     

    git push 이름 브랜치명 : 로컬 저장소의 변경사항을 깃허브 원격저장소에 반영한다.

    처음에만 git push -u origin master 라고 입력해준다.

    git push origin master

     

    git clone [원격저장소 주소] [원하는 폴더 이름 (생략가능)] : 이미 존재하는 원격저장소를 로컬저장소로 복제해온다.

    git clone https://github.com/anxiubin/TIL.git TIL-Clone

     

    git pull : 원격 저장소의 변경사항을 가져올 때 사용한다.

    예를 들어 공동 작업물을 로컬저장소에서 작업해야할 때 이 명령어를 먼저 실행한 후에 작업한다.

    브랜치를 master로 체크아웃 한 후에 git pull 명령어를 실행한다.

    $ git pull origin master

    * 여러 명이 함께 작업할 때 프로세스 : pull - 작업 - commit - push

     

     


     

    [ GitHub 협업 ]

     

    깃허브 collaborators에 공동작업자를 추가하고 승인하면 된다.

    작업을 빠르게하고 commit과 push 를 자주하고,
    작업 시작 전에 무조건 pull을 해야만 충돌의 확률이 적다.

     


    <오픈 소스 프로젝트에서 소스 수정하고 협업하기>

    fork - 작업 - commit- push - create pull request - 저장소 주인이 풀리퀘스트 보고 merge pull request 

    이 과정을 거치고 나면 내가 수정한 작업이 origin 저장소에 반영이 된다.

     

     

    [ 기본적인 Git 작업 ]

     

    파일 수정 - git add - git commit - git push

     

     

    반응형

    댓글