SEB Section 1 git
Git
- 멋쟁이 사자처럼에서 해커톤을 했을 때, git을 사용한적이 있고, 학교 과제물로 git에 대해서 제출을 한 적이 있다.
- 하지만 나는 github desktop을 사용해서, 제대로 된 사용법을 모르고 있었다.
- 이번 수업 내용은 git에 관련된 내용이었는데, 이번에 제대로 공부를 해보면서 git에 대한 사용법을 익혀야 겠다.
버전관리를 왜 할까?
- 작업하고 있는 파일을 편집 전 상태로 되돌리고 싶으면, 편집하기 전 파일을 미리 복사를 해서 남겨둘 것이다. 하지만 파이을 편집 할 때마다 매번 복사하는 일은 번거롭고 실수가 많을 것이다.
- 만약 여러 사람들이 같은 파일로 동시에 작업 하거나, 이전 상태로 다시 되돌려야 할 경우가 생긴다면 어떻게 해야 할까? 아마 감이 잡히기 힘들 것이다. 이럴때, 버전 관리를 할 수 있다면 손쉽게 이전 상태로 돌아갈 수 있을 것이다.
버전관리
- 버전 관리는 각 버전 별로 변경된 이력들을 저장 하는 작업 이다.
- 변경 사항을 저장을 할 때, 어떤 변경 사항이 있는지에 대한 코멘트를 작성 하는 것이 중요하다.
- 이런 버전 관리를 해주는 Github, GitLab, Bitbucket 등 여러가지 원경 저장소가 있다.
Git 이란?
- Git 이란 개발자의 코드를 효율적으로 관리하기 위해서 개발된 ‘분산형 버전 관리 시스템’ 이다.
- 변경 사항이 있을 때 마다 백업 복사본을 만들게 되는데, 이 복사본을 스냅샷 이라고 부른다. 이렇게 하나하나 스냅샷을 만드는 작업을 commit 이라고 한다.
Git vs Github
- Git은 소스 코드 기록을 관리하고 추적할 수 있는 버전 관리 시스템이다.
- Github는 Git Repository르 관리할 수 있는 클라우드 기반 서비스 이다.
- 즉 Git으로 버전을 관리하는 폴더에 대해서 Github를 통해 여러 사람들이 공유하고 접근할 수 있는 것이다.
- Github는 개발자 SNS 이다.
Git Repository
- Git으로 관리되는 폴더를 말한다.
- Remote Repository와 Local Repository 두 종류의 저장소가 있다.
-
작업 할 때는 Local Repository에서, 내가 작업한 코드를 공유하려면 Remote Repository에 업로드해 여러 사람이 함께 공유를 할 수 있다. 또한 다른 사람이 Remote Repository에 올린 소스 코드를 내 Local Repository로 가지고 올 수 있다.
- 상대방의 코드나 오픈 소스 코드를 가져오기 위해서는 상대의 원격 저장소를 내 원격 저장소로 가지고 오는 작업이 필요한데, 이 과정을 Fork라 부른다.
- 이렇게 내 원격 저장소에 코드를 가지고 왔고, 이 코드를 수정 하기 위해서는 다시 내 컴퓨터로 가져와야 하는 과정이 필요하다. 이 과저을 Clone이라고 한다.
- 코드를 수정을 하고 commit을 통해 원격저장소에 올려줘야 하는데, 이를 Push 라고 한다.
- 이렇게 push를 완료 하면, Fork를 했던 상대의 원격 저장소에 내 수정된 코드를 보여주고 반영을 할 것이냐 물어보는 과정을 Pull request 라고 한다.
[github workflow]
협업에서의 github workflow
- 만약 내가 만들고 있는 작업물들을 다른사람과 협업을 하는 과정이라고 생각 해보자.
init (기존 디렉토리를 Git Repository로 변환)
- 작업물들은 내 컴퓨터에만 존재하기 때문에 버전 관리를 위해 Git Repository로 변환을 시켜줘야 한다.
- 작업물들을 Git의 관리 하에 들어가게 만들어 주는 명령어는 git init 이다.
- 이 과정을 통해 Local Repository가 생성이 된다.
remote add origin (나의 Remote Repository에 연결)
- 변환한 Local Repository를 Github에서 원격으로 관리하면 나중에 협업을 할 때도 편리할 것이다.
- 원격으로 관리하기 위해서는 Local Repository 와 Remote Repository와 연결하는 작업이 필요하다.
- 이 때 git remote add origin 명령어를 사용한다.
remote add pair (Pair의 Remote Repository에 연결)
- 혼자서 작업을 하는 것이 무리라고 생각해 다른 사람과 협업을 하기로 했다.
- 이때 다른 사람의 Repository와 연결을 할 수 있다.
- git remote add ‘상대방 repository 주소’ 를 입력한다.
remote -v (연결된 Remote Repository 확인)
- 잘 연결이 되었나 확인을 하려면 git remote -v 를 통해 알 수 있다.
pull (Remote Repository의 작업 내용 가져오기)
- 페어가 서버 작업을 완료해서 Repository의 master 브랜치에 작업한 코드를 올려 놓았다고 한다.
- 이 작업한 코드를 가져오기 위해서는 git pull ‘shortname’ ‘branch’ 를 사용하여 받아올수 있다.
- 받아오는 내용은 자동으로 병합이 된다. 이때, 페어의 작업한 내용을 가져오는 과정에서 내가 수정한 부분과 동일하다면, 자동 병합이 실패하게 되고, 충돌이 발생한다.
- 어느곳에서 충돌이 발생했는지 알기 위해서는, git status를 사용한다.
- 충돌이 일어난 부분은 하나하나 직접 확인 후 수정이 필요하게 되는데, 내가 수정한 내용으로 파일에 반영 할 수 있고, Remote Repository의 내용으로 파일에 반영 할 수 도 있다. 변경 사항을 모두 반영 할 수 도 있다.
commit 후 push
- 충돌한 파일 수정이 완료를 했다면 staging area에 파일을 추가 해야 한다.
- git commit 명렁어로 commit을 한 후, git push를 통해 Remote Repository로 push를 한다.
git에 올리기 싫은 파일
- git에 파일을 올릴 때 올리지 말아야 할 것 들도 있다. 예를들어 secret_key나 jwt 같은 토큰들에 대한 정보를 올리면 안된다. 이 정보를 올리면 해킹을 당할 위험성이 있기 때문이다.
- 이렇게 올릴 때, 무시 할 것들을 ‘.gitignore’ 이라는 파일을 만들어 설정 해주면 된다.
# 확장자가 .a인 파일 무시
*.a
# 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음
!lib.a
# 현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음
/TODO
# build/ 디렉토리에 있는 모든 파일 무시
build/
# doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음
doc/\*.txt
# doc 디렉토리 아래 모든 .pdf 파일 무시
doc/\*_/_.pdf
git branch
- 작업한 파일을 git에 관리를 받기위해 git init을 할 것이다. 그러면 자동으로 master branch에 등록이 된다.
- 만약 내가 어떠한 기능을 만들고 commit을 했다고 가정하자. 그렇다면 이전에 commit 했던 파일들 위로 덮어 씌어 질 것이다.
- 이때, 따로 따로 저장하기 위해 즉, 여러 개발자 들이 동시에 다양한 작업을 할 수 있기 위해 사용하는 기능이다.
main branch
- 저장소를 처음 만들게 되면 ‘main’ 이라는 브랜치를 만들어 둔다.
- main branch는 모든 브랜치를 merge한 브랜치로 현재 서버로 배포되고 있는 repository 이다.
branch 만들기
- branch를 만들기 위해서는 branch [branch 명] 을 사용한다.
- branch를 나누는 기준은 자신이 정하기 나름이지만, 보통 크게 메인 브랜치인 ‘main’, ‘develop’ ‘feature’, ‘release’, ‘hotfix’ 로 구성된다.
- main : 라이브 서버에 제품으로 출시되는 브랜치.
- develop : 다음 출시 버전을 대비하여 개발하는 브랜치.
- feature : 기능 개발 브랜치. develop 브랜치에 들어간다.
- release : 다음 버전 출시를 준비하는 브랜치. develop 브랜치를 release 브랜치로 옮긴 후 QA, 테스트를 진행하고 main 브랜치로 옮긴다.
- hotfix : main 브랜치에서 발생한 버그를 수정하는 브랜치.
branch를 설정하여 commit 하기
- 초기에는 branch가 master로 설정이 되어 있을 것이다. 이때 commit을 한 후 push 하면 master 브랜치에 올라갈 것이다.
- 이때 브랜치를 바꾸는 방법이 git checkout ‘branch 명’을 사용하면 브랜치가 전환된다.
나뉘어진 branch를 합치기
- 여러 기능별로 나누어 작업한 branch들이 많을 것이다. 이를 하나로 통합을 하여 ‘main’ branch로 올려야 하는데 어떻게 해야 할까?
- 이럴 땐 main branch에 checkout을 한 뒤 git merge ‘merge 할 branch 명’을 하면 병합이 된다.
댓글남기기