Judaeng
Git? GitHub? 본문
Git
Git은 파일 내용이 어떻게 변경되었는지 기록들을 보관해주는 '버전 관리 시스템 VCS(Version Control System)' 이라고 할 수 있다.
버전 관리 시스템은 이름 그대로 여러 파일을 하나의 버전으로 묶어 관리하는 것이다.
버전 관리를 하게 되면 파일을 수정해도 다시 이전 상태로 되돌리거나 쉽게 복구할 수 있고, 어떤 내용을 수정했는지 비교해 볼 수 있고, 누가 언제 수정했는지도 알 수 있다. 여러 파일들을 복사, 저장, 백업 등이 가능하다!
Git? GitHub?
Git과 GitHub은 이름이 비슷해서 처음 봤을 때 둘 다 똑같은 것 아닌가? 생각 했다. 하지만 둘은 전혀 다르다.
Git은 버전을 관리하는 시스템이고, GitHub은 Git을 사용하는 사람들이 모여서 소셜 플랫폼을 만든 것이다.
사람들이 Github을 보고 같이 협업하고 공부할 수 있게 끔 만들어 놓은 것이다.
Distributed System (분산 시스템)
분산 시스템은 여러개의 저장소(Repository)를 통해 관리 하는 시스템이다. 하나의 저장소에 모든 데이터를 저장하게 되면 오류가 발생할 경우 복구하기가 어렵다. 하지만 분산 시스템은 여러 저장소에 데이터를 저장하기 때문에 어느 한 곳에 오류가 생겨도 다른 저장소를 통해 복구할 수 있다.
Git은 크게 저장소인 Remote Repository, 컴퓨터의 로컬 저장소인 Local Repository에서 버전을 관리한다.
Local Repository를 이용하면 네트워크 연결이 되어있지 않아도 계속 버전 관리를 할 수 있다.
누군가 Repository를 만들었는데 내가 수정하고 싶다면, 나의 Repository로 fork 해오면 된다.
남의 저장소(Upstream Remote Repository)에서 내 저장소(Origin Remote Repository)로 그대로 복사해 가져오는 것이 fork 이다.
여기까지 과정은 모두 서버상에서만 이루어지고, 내 저장소에서 내 컴퓨터의 Local Repository로 가져오고 싶다면 git clone을 하면 된다. 터미널에 git clone '내가 가져오고싶은 Code URL' 을 입력하면 내 컴퓨터에 그대로 복사가 된다.
하지만 나는 Ubuntu 설치를 했기 때문에 git clone 하기 전에 이름 설정, 이메일 설정이 필요했다. 그리고 Github를 쓰려면 Git을 먼저 설치하고 해야된다!
✔️ fork : 내 서버 계정으로 가져오기
✔️ git clone : 내 컴퓨터로 가져오기
✔️git status : 저장소 상태를 체크한다. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등을 볼 수 있다.
✔️ git add : 명령이 저장소에 새 파일들을 추가 하지는 않는다.대신,깃이 새 파일들을 지켜보게 한다.파일을 추가하면,깃의 저장소“스냅샷”에 포함된다.
✔️ git commit : 어떤 변경사항이라도 만든 후, 저장소의 스냅샷을 찍기 위해 이것을 입력한다.보통 git commit -m “Message ”형식으로 사용한다. -m은 명령어의 그 다음 부분을 메시지로 읽어야 한다는 것을 말한다.
반대로 Local Repository에서 수정을 완료하고 서버 저장소(Remote Repository)에 다시 가져다두고 싶으면 push를 이용하면 된다.
git push origin master 명령어를 사용하면 서버에 있는 나의 Repository에 수정한 파일을 복사해 GitHub 리포지토리에 옮길 수 있다.
VS Code 에서 Git add, commit, push를 하면서 느낀 과정이지만 add를 하고 origin repository에 추가를 하고 commit을 해도 GitHub에선 확인할 수 없다. 꼭 push를 해줘야만 GitHub에 있는 내 저장소에 복사되어 보여진다.
Local Repository 에서 작업을 하고 있을 때, 작업하고 있는 저장소의 최신 버전을 원하면, git pull을 통해 GitHub로부터 변경사항을 다운로드 받을 수 있다.
내 저장소에서 버전을 받고 싶으면 git pull origin master 명령어를 사용하면 된다.
다른 경우로 원본 Repository를 받고 싶다면 git pull upstream master 명령어를 사용하면 된다.
하지만 이 명령어를 사용하려면 git remote add upstream <URL> 이렇게 등록을 해줘야만 사용이 가능하다.
✔️git push : 내 컴퓨터에서 서버로 옮기기
✔️git log --online : commit 이력 확인 user.name, user.email 등을 확인할 수 있다.
✔️git diff : commit 하기 전에 변경 내용을 확인할 수 있다.
✔️git pull : 다른 사람이 원격 저장소(Remote repository)에 업데이트한 파일이 있을 때, 원격저장소와 내 로컬저장소의 상태를 동일하게 만들기 위해 사용
Git Workflow
작업을 하던 공간(working directory)에서 로컬 저장소(local repository)에 저장을 하고, 그제서야 서버상의 저장소(remote repository)에 push를 할 수 있게 된다.
그리고 작업을 하던 공간(working directory)과 로컬 저장소(local repository) 사이에는 Staging area라는 공간이 하나 더 존재한다. 그냥 바로 저장하면 되지 왜이렇게 복잡하게 하는걸까? Staging area는 ‘수정후, Repository에 합쳐질 예정인 내용들’을 저장하는 곳이다. 중간 관리자 역할을 한다고 이해하면되는데, 동시에 저장되는 데이터 간의 충돌을 막아주기도 하고 선택적으로 버전을 관리하기도 한다.
Staging area에 먼저 add를 한 후, commit을 해야 Local Repository에 수정한 파일들을 올릴 수 있게 된다. 이 외에도 다양한 명령어가 있어 각 저장소를 연결해주는데, 전체적인 Git Workflow와 해당 명령어를 정리해봤다.
더 자세한 내용은 https://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html 여기 내용을 참고하면 좋을 것 같다.
Branching, Merging
Branching과 Merging은 단어 뜻 그대로 가지치기, 합치기를 의미한다. 보통 현재 사용하는 버전은 master에서 관리하고, 세부적인 각 기능 버전은 feature에서 관리한다. 이 외에도 테스트하며 개발중인 버전은 develop에서 따로 관리하기도 한다.
현재 버전에서 일부 기능을 수정하고 싶다면 master에서 feature로 'Branching(가지치기)'를 해서 수정하면 된다.
반대로 feature에서 수정을 마친 후 다시 현재 사용하는 버전에 합치고 싶다면 master에 'Merging(합치기)'를 하면 된다.
'Develop > JavaScript' 카테고리의 다른 글
Object.assign() (0) | 2021.01.28 |
---|---|
expect, matcher (0) | 2021.01.28 |
CLI(Command Line Interface) (0) | 2021.01.27 |
Closure(클로저), Currying(커링)이란? (0) | 2021.01.26 |
Scope, let, const, var의 차이점 (0) | 2021.01.26 |