Git Is Team, GIT은 곧 팀이다! 생산성있는 협업 방법과 GIT 설치, 명령어 정리
2020.01.09
교육을 목적으로 작성된 글입니다.
Git 설치
Git install (Window)
"git bash"를 데스크탑 검색한 후 실행한다.
Git install (mac)
현재 git version을 확인한다.
Homebrew (Mac OS 패키지 관리자)를 설치한다. 링크
Homebrew를 이용하여 git을 설치한다.
설치된 git 정보 확인
설치 후 전과 동일한 버전 정보가 나온 경우 다음을 명령한다.
기본적인 터미널 명령어 정리
plain text
$ cd ./myFolder # 현재 폴더 안의 myFolder로 들어간다. ("./"는 생략할 수 있다.)
$ cd ../ # 현재 폴더의 부모 폴더로 이동한다.
$ pwd # 현재 어디 디렉토리에 있는지 경로를 표시한다.
$ ls # 현재 디렉토리 안에 있는 파일 목록들을 보여준다.
$ tree # 현재 디렉토리 안에 있는 tree구조를 보여준다.
# brew install tree로 설치해줘야 한다.
$ mkdir myFolder # myFolder 폴더를 현재 경로에 생성한다.
$ touch myFile.html # myFile.html을 현재 경로에 생성한다.
$ rm -rf myFolder # myFolder를 묻지도 따지지도 않고 다 지우기.
$ rm -i myFolder # 파일 하나하나 물어보고 다 지우기.
$ alias 단축명령어="명령어"
git 설정 (git config)
$ git config --global --list
git에 대한 설정을 볼 수 있다.(전역으로)
$ git config --list
으로 저장소별로 설정을 조회할 수 있다.
$ git config --global user.name github-username
git user name 설정 (--global의 의미는 해당 디렉터리뿐만 아니라 전체 모든 디렉터리에 적용된다는 의미이다.)
ex) $ git config --global user.name amamov
$ git config --global user.email github-email
git email 설정
ex) $ git config --global user.email ysangsuk78@gmail.com
github에 코드 저장하기
git 서버 저장소(원격 저장소) 만들기
github에 접속하여 Repositories에 들어가서 New 버튼을 누른다.
Repository를 만들어준다.
git 로컬 저장소 만들기
git bash (Window OS)
또는 터미널(Mac OS)를 실행하고 작업 디렉터리로 들어간다.
plain text
$ cd work-dir
git을 초기화한다.
plain text
$ git init
git local 작업 디렉터리의 모든 변경 사항들을 staging area로 이동시킨다.
plain text
$ git add .
git local 작업 디렉터리의 특정 파일 또는 폴더의 변경 사항들을 staging area로 이동시킨다.
plain text
$ git add filename(or dirname)
git staging area에 있는 변경 사항들을 repository로 이동시킨다.
plain text
$ git commit -m "first commit"
main branch를 생성한다.
plain text
$ git branch -M main
git 서버 저장소(원격 저장소)와 로컬 저장소 연결 & Push & Pull
서버 저장소와 로컬 저장소의 통로를 만든다.
plain text
$ git remote add origin <https://github.com/amamov/git-study.git>
로컬 저장소의 repository를 서버의 origin main의 repository에 올린다.
plain text
$ git push -u origin main
서버 저장소의 repository를 로컬 저장소에 가져온다.
plain text
$ git pull
git 서버 저장소에 있는 Repository를 로컬 저장소에 저장하기
plain text
$ git clone <https://github.com/amamov/git-study.git>
Git 변경사항 확인하기
$ git log
: git에 commit된 변경사항을 확인할 수 있다.
$ git diff commit_1_ID commit_2_ID
: commit_1_ID 기준으로 commit_2_ID와 변경사항을 비교한다.
$ git diff 로컬저장소 원격저장소
: 원격 저장소와 로컬 저장소 간의 변경사항을 비교한다.
$ git diff 비교대상_branch_이름 기준_branch_이름
: 브랜치간의 변경사항을 비교한다.
Git으로 수정사항 reset하기
repository에 올린 상태에서 $ git reset
으로 되돌릴 수 있다.
HEAD : 가장 최근 버전에서
^ : 하나 되돌리기
만약 가장 최근 커밋으로부터 세 개 전으로 되돌리려면 $ git reset --hard HEAD^^^
를 사용하면 된다.
특정 커밋으로 되돌리려면 $ git reset --hard 버전_ID
명령을 사용하면 된다.
$ git add .으로 stage에 올라간 파일들을 $ git reset HEAD로 취소할 수 있다.
reset 대신에 revert를 사용하면 되돌린 버전 이후의 버전들은 모두 유지되고, revert되었다는 사실을 담은 commit만 새로 추가된다. 즉, reset은 과거 자체를 바꾸는 명령어이고, revert는 과거를 변경시켰다는 새로운 commit으로써 새로운 commit을 만드는 명령이다.
Git Branch를 다루는 방법
$ git branch
$ git branch 브랜치이름
$ git checkout 브랜치이름
$ git merge 합치려는_브랜치_이름
$ git branch -d 삭제하려는_브랜치_이름
Github code versioning
git remote (-v)
원격저장소 <b>조회(추가)하기</b>
내 로컬 repository와 상호작용하고 있는 (혹은 할 수 있는) 원격 저장소들의 목록을 조회할 수 있다.
v
옵션 : 단축이름과 URL 같이 보기
$ git remote add <단축이름> <URL>
: 기존 워킹 디렉터리에 새 원격저장소를 추가하는 명령어
$ git remote rm <단축이름>
: 단축이름의 원격저장소와의 연결을 삭제한다.
git push
원격저장소에 밀어넣기
$ git push -u origin main
: 내 repository의 main 브랜치를 origin의 main 브랜치로 push한다.
git pull
원격저장소 갖고 와서 합치기
$ git pull (origin main)
: origin을 내 repository의 main 브랜치로 가지고 온다.(merge)
git fetch
원격저장소 일단 갖고만 오기
$ git fetch (origin main)
: origin을 로컬 repository에 merge하지 말고 일단 가지고 온다.
$ git checkout origin/main
: origin/main 임시 브랜치로 바꾼다. -> origin의 변경된 사항을 확인할 수 있다.
git clone
원격저장소 복사하기
$ git clone <URL>
: URL에 있는 원격 저장소 내용을 현재 디렉터리에 복사해오기.
$ git clone <URL> --branch <branch> --single-branch <folder>
git clone
시에 origin이 자동으로 생성되므로 이를 없애주려면, $ rm -rf .git
명령어를 사용하면 된다.
github에서 협업을 하는 방법
joy라는 팀장과 amamov라는 팀원이 협업을 한다고 가정하자. 팀장이 만든 repository인 프로젝트 REPO를 중심으로 협업을 진행한다고 하자.
amamov는 팀장이 만든 repository를 clone한 후, 로컬의 "amamov/main" branch에서 팀장의 코드를 받아오고 "amamov/newbranch" branch에서 받아온 코드(main)를 병합하여 추가로 작업한 코드와 함께 팀장에게 pull request를 보낸다. pull request를 받은 팀장은 변경 사항을 체크하고 "joy/main"에 최종적으로 병합한다.
1. 협업 대상 repository fork 하기
amamov는 joy/REPO
에 들어가서 fork 버튼을 누른다.
2. fork 해온 곳에서 clone하기
amamov는 자신이 fork한 repository를 clone한다.
3. branch를 만들고 작성하고자 하는 코드(commit) 편집 후에 push
amamov는 clone한 REPO에 들어가서 $ git branch newbranch
명령을 통해 "newbranch"라는 branch를 만든다.
$ git checkout newbranch
명령으로 "newbranch"에 들어간다.
amamov는 newbranch에서 코드를 작성하고 파일을 만드는 등 작업을 한다.
4. pull request
amamov는 자신이 fork한 REPO repository에 들어가기 위해 github에 들어간다.
github의 해당 repository에 들어가서 Compare & Pull request
버튼을 누른다.
그 다음 Create pull request
를 눌러서 pull request를 시도한다.
5. Merge pull request
탐장은 github에 amamov가 pull request한 amamov:newbranch
가 보인다.
만약 충돌이 발생할 경우 충돌을 해결한다.
Merge pull request
버튼으로 병합을 받아준다.
(관리를 위해 amamov는 newbranch를 지우는 경우가 있다.)
6. 팀장(repository 관리자)이 REPO repository를 수정하였을 때 amamov(팀원)가 팀장이 수정한 "joy/main"을 가져와야 한다.
amamov는 자신의 로컬 환경의 REPO에서 다음과 같은 작업을 수행한다.
$ git remote add upstream <joy-URL>
<b>(최초 한 번만)</b>
$ git fetch upstream
$ git checkout main
$ git merge upstream/main
$ git checkout newbranch
$ git merge main