하나의 웹 서비스는 여러 파일이 유기적으로 결합된 서비스이다. 우리가 알고 있던 파일 시스템으로는 변화가 잦고 다수에 의해 수정될 수 있는 소스코드를 안정적이고 일관성 있는 관리가 어렵다.
따라서, SCM(Source Code Management)가 등장한다.
저장소에 저장된 소스의 변경 사항과 작업자를 추적할 수 있게 되어 체계적인 소스코드 관리가 가능해진다. 대표적인 도구가 Git과 GitHub이다.
Git
소스 이력 추적을 위한 버전 관리 시스템
Github
git 프로젝트를 관리하는 저장소 제공
로컬 환경(Local)
Working Directory
현재 자신의 컴퓨터에서 작업 중인 프로젝트가 위치한 디렉토리. 모든 Git의 작업은 Working Directory로부터 시작된다.
Staging
commit, 수정된 소스를 로컬 저장소에 저장할 파일의 예비저장소.
Local Repository
로컬 저장소는 우리가 Working Directory로부터 commit한 내용들이 저장되어 있다. 언제든지 commit 했던 지점으로 돌아가는 것이 가능하다.
원격 환경(remote)
github 등 외부에 위치한 원격 저장소. 원격 저장소에 로컬에 저장된 소스를 외부에 저장이 가능하다. 협업을 통한 개발을 할 때 사용할 수 있다.
1. git init
Working Directory에서 init을 통해 초기화를 하면 .git이라는 숨김 폴더가 생성된다. 초기화는 나의 프로젝트가 위차한 곳으로 이동 후 터미널에서 명령 실행하도록 한다.
2. gitignore
.gitignore 파일과 같은 위치에 있는 config.txt는 git에서 무시한다. 보안상 민감한 정보, 각종 설정 파일, 빌드 산출물, 개발용 데이터베이스는 제외하도록 한다.
github.com/github/gitignore 에서 .gitignore에 포함되어야 하는 내용이 소개되어 있다.
3. git status
현재 어떤 파일이 추적되고 있고 예비 저장소에 어떤 파일이 들어있는지 추적하는 명령어이다.
4. git add <-> rm/reset
로컬 환경에서 add를 통해 Staging에 반영 된다. rm/rest을 통해 원치 않는 소스가 반영 되었을 경우 되돌릴 수 있다.
5. git commit -m "message"
로컬 저장소에 저장하여 버전을 관리하는 과정. message는 해당 commit에 대한 정보를 표현하므로 협업에 있어서 중요하기에 소속된 곳에 따른 규칙을 따르는 것이 중요하다.
git branch -M main
현재 바라보고 있는 branch의 이름을 main으로 변경
git에서 branch란 가지가 뻗어나가듯이 동일한 저장소 내의 소스에 대하여 서로 영향을 받지 않는 독립적인 공간을 가지는 것이다. 독립적인 환경에서 서로 다른 개발자들이 서로에게 영향을 미치지 않고 개발이 이루어질 수 있도록 한다.
main/master
즉시 운영 배포할 수 있는 버전/ 사용자가 지금 이용 중인 코드
모든 작업 사항이 있는 저장소. 최초 init 했을 경우 해당 폴더
현재 대부분은 master가 아닌 main으로 사용한다.
staging
상용에 반영하기 전 테스트 버전
feature
새로운 기능 추가 개발 (병렬 작업)
1. git remote add origin <원격 저장소 주소>
로컬 프로젝트를 github 원격 저장소에 반영.
2. git push -u origin <브랜치명>
-u는 현재 작업하고 있는 브랜치와 원격 저장소의 브랜치를 맵핑하는 역할을 해준다. 이후 push 하는 상황에서는 push 만 사용해도 된다.
github는 인증 받은 사용자 혹은 호스트만 push를 할 수 있도록 되어있다.
commit | revert/reset
checkout/merge
pull
fetch/clone
push