immersive prep 스프린트를 진행하면서 처음으로 같은 프로젝트를 함께 코딩하는 경험을 했다. 이전에 github 에서 풀리퀘스트 하는 방법을 정리했는데 그때는 혼자 작업을 위한 과정이었음. 앞으로도 자주 사용하게 될 깃에 대한 개념을 정리해본다.
Git 이란?
"Distributed Version Control System"
소스 관리를 위한 분산 버전 관리 시스템으로 편리한 버전관리, 백업, 협업을 위한 도구.
- 작업 내용의 변화를 기록하고 특정 시점의 작업을 불러올 수 있어 버전 관리가 된다.
- 작업물이 서버 저장소에만 있는 것이 아니라 각각의 로컬 저장소에 분산되어 있다.
- 한 프로젝트의 코드를 여러 사람이 함께 작업 할 수 있도록 도와주고 공동작업 시 발생한 충돌을 처리해 준다.
그럼, GitHub란?
git 사용자를 위한 소셜 플랫폼.
git 저장소 서버를 대신 유지 및 관리해주는 서비스.
페어 프로그래밍을 위한 Git Workflow
1. 함께 작업할 프로젝트의 저장소(Repository)에서 멤버 각각 fork로 자신의 저장소에 복사한후 로컬에 clone한다.
//로컬에 클론하기
$ git clone http://github.com/<user_name>/<repository_name>.git
2. 페어의 원격 저장소와 내 로컬 저장소를 연결한다.
$ git remote add pair <pair's repository_name>
3. 연결 상태를 확인한다.
//원격 저장소 이름과 URL 출력하기
$ git remote -v
//출력 예시
origin https://github.com/<username>/<project_name>.git (fetch)
origin https://github.com/<username>/<project_name>.git (push)
pair https://github.com/<pair's username>/<project_name>.git (fetch)
pair https://github.com/<pair's username>/<project_name>.git (push)
4. 페어 프로그래밍을 진행 하고 내 저장소에 push한다.
$ git push origin master
5. pair 쪽에서는 진행된 프로젝트를 pull해서 변경사항을 내려받고 이어서 작업한다. (1번 부터 반복 진행)
$ git pull pair master
git init 이란?
깃 저장소를 초기화한다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더. 초기화를 한 후에야 추가적인 깃 명령어들을 줄 수 있다. 터미널에 아래 명령어를 입력하면 폴더 안에 .git이라는 숨겨진 폴더가 생성됨.
$ git init
Initialized empty Git repository in <경로>
branch (가지치기)
여러 명이 하나의 프로젝트를 진행하기위해서는 작업자들이 분리된상태에서 작업을 진행하고 완료 후 합치는것이 효율적. 저장소를 새로 만들면 기본으로 master branch가 만들어진다. 일반적으로 작업자들은 메인 프로젝트의 브랜치를 따와서 자신이 변경하고 싶은 버전을 만들고 작업을 진행, 작업을 끝낸 후 프로젝트의 master에 브랜치를 merge한다.
//branch 목록보기 (*가 현재 브랜치)
$ git branch
//branch 만들고 바로 checkout (체크아웃이란 내가 사용할 브랜치를 지정한다는 의미)
$ git checkout -b <branch_name>
//branch 삭제
$ git branch -d <branch_name>
//master branch로 돌아가기
$ git checkout master
//특정 버전으로 이동하기
$ git checkout <version>
//branch 이름을 A에서 B로 변경하기
$ git branch -m A B
//모든 branch 보기
$ git log --branches
merge (갱신과 병합)
나누어 작업한 파일을 원격 저장소에 갱신하고 병합하면 한 사이클이 종료된다.
//원격 저장소의 프로젝트를 로컬 저장소로 동기화하고 merge 하기
$ git pull
//branch에 있는 변경 내용을 master에 병합하기
$ git merge <branch_name>
//변경 내용을 병합하기 전에 변경사항 확인하기
$ git diff <원래 branch_name> <비교할 branch_name>
//작업이 잘못된 경우 로컬의 변경 내용 되돌리기
$ git checkout -- <file_name>
stash
branch에서 작업하다가(add를 한번 이상 등록한 파일) 다른 branch로 옮겨야할 경우 commit하지 않고 작업하던 것을 저장해둘 때 쓰는 명령어. 급하게 수정이 필요하거나 한 경우에는 완료되지 않은 파일을 commit하는 대신 stash를 활용한다.
//하던 작업을 다른 곳에 저장해 두고 가장 최근 commit상태로 만든다
$ git stash
//저장된 작업 중 가장 퇴근의 stash를 불러올 때
$ git stash apply
//stash 목록 확인
$ git stash list
레퍼런스
github 참고 영상 : https://youtu.be/w3jLJU7DT5E
'Coding > TIL (Today I Learned)' 카테고리의 다른 글
Data Structure 01: Stack & Queue (0) | 2019.12.07 |
---|---|
OOP 01: 객체지향 프로그래밍의 컨셉 (0) | 2019.12.06 |
npm, Package.json (0) | 2019.11.29 |
Javascript runtime, Node.js, NVM (0) | 2019.11.28 |
[Reference] 현직 개발자들의 이야기 (0) | 2019.11.27 |