Study/Frontend

[Git & GitHub] 왕초보를 위한 깃과 깃허브 사용 튜토리얼

xiubin 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

 

 

반응형