-
[Git & GitHub] 왕초보를 위한 깃과 깃허브 사용 튜토리얼Study/Frontend 2020. 2. 13. 13:00반응형
Git & GitHub 튜토리얼
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 버전 관리 ]
- 버전으로 만들어지기 전 파일을 수정하는곳 : 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 : 모든 브랜치를 한 줄 씩 그래프 형태로 볼 수 있는 명령어이다.
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
반응형'Study > Frontend' 카테고리의 다른 글
React 프로젝트 구조 설계를 넘어서 프론트엔드 아키텍처 설계에 대한 고찰 (0) 2023.05.19 애플처럼 화려한 Parallax Scroll 랜딩 페이지 개발해보기 (0) 2023.01.13 ESLint를 자동화해보자 (feat. husky & lint-staged) (0) 2022.04.14 웹팩 성능 최적화를 통해 개발 효율성을 극대화 해보자 ✨ (0) 2022.04.08 나를 너무나 힘들게 했던 CORS 에러 해결하기 😂 (33) 2021.04.21 - 버전 관리 : 수많은 파일들의 변경 사항 이력을 추적하고 관리할 수 있다.