git과 git hub이 필요한 이유
개발자들 간의 협업을 위해서 주로 몇 가지 형상 관리 툴이 사용된다. 그중에서 대중적으로 많이 사용되는 git과 github에 대해서 알아보려고 한다.
만약 git과 github과 같은 개발툴이 없다고 하면 모든 개발 소스를 압축파일로 관리를 해야 하며 소스 코드를 합칠 때도 단위가 큰 프로젝트일 경우는 모든 개발자들이 모여서 서로 맞춰가며 여러 파일들의 소스코드를 일일히 수동으로 복붙하여 합쳐야 하는 끔찍한 일이 발생할 것이다. 이러한 문제점을 해결하고 개발자들 간의 협업을 원활하게 하기 위해서는 필수적인 개발 툴이다.
git이란
- 오픈 소스 버전 관리 시스템(VCS: Version Control System)
- 소프트웨어 개발 및 소스 코드 관리에 사용
- 로컬에서 관리되는 버전 관리 시스템
- 소스코드 수정에 따른 버전을 관리해주는 시스템
git은 본인의 코드와 그 수정내역을 기록하고 관리하도록 돕는 버전 관리 프로그램이며, 로컬에서 프로젝트의 기록을 스스로 관리할 수 있도록 해준다. git을 통해 브랜치를 생성하고 이전 브랜치로 복구, 삭제, 병합이 가능하다. 하지만 로컬 저장소를 사용하기 때문에 다른 개발자와 실시간으로 작업을 공유할 수 없다.
github이란
- Git Repository를 위한 웹 기반 호스팅 서비스
- 클라우드 서버를 사용해서 로컬에서 버전 관리한 소스코드를 업로드하여 공유 가능
- 분산 버전 제어, 액세스 제어, 소스 코드 관리, 버그 추적, 기능 요청 및 작업 관리를 제공
- 클라우드 방식으로 관리되는 버전 관리 시스템(VCS: Version Control System)
- 자체 구축이 아닌 클라우드 개념
github는 git 저장소를 관리하는 클라우드 기반 호스팅 서비스이다. git 저장소 호스팅 서비스는 클라우드 기반으로 다른 사람과 소스코드 공유가 가능하며 git의 기본적인 기능을 확장하여 제공한다. 또한 클라우드 서버에 소스를 올리기 때문에 한 프로젝트에 여러 명의 사람이 참여하여 버전 제어 및 공동 작업이 가능하다.
git 기본용어
- Repository
스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳이다.
Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.
원격 저장소(Remote Repository)
: 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소다.
로컬 저장소(Local Repository)
: 내 PC에 파일이 저장되는 개인 전용 저장소다. 저장소를 만드는 방법은 두 가지가 있다.
아예 저장소를 새로 만들거나, 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사해 올 수 있다.
스테이지 내용은 .git/index 파일에 저장되고,
저장소의 내용은 .git/HEAD 파일에 저장된다.
- Working Tree (Working Directory)
저장소를 어느 한 시점을 바라보는 작업자의 현재 시점.
파일 수정, 저장 등의 작업을 하는 디렉터리로, '작업 디렉터리(working directory)'라고도 한다.
- Checkout
이전 버전 작업을 불러오는것.
- Staging Area
저장소에 커밋하기 전에 커밋을 준비하는 위치.
예를 들어 작업 트리에서 10개의 파일을 수정했는데 4개의 파일만 버전으로 만들려면 4개의 파일만 스테이지로 넘겨주면 된다. 즉, 로컬 스테이지에 올려둔 파일만 원격 저장소에 커밋할 자격이 있는 것이다.
- Commit
현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.
- Head
현재 작업중인 Branch를 가리킨다.
- Branch
가지 또는 분기점을 의미하며,
작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을 때 Merge를 하여 작업을 한다.
- Merge
다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.
git과 github 구조
git과 github의 구조는 크게 Working Directory, Stage(Index), Local Repository, Remote Repository(GitHub)로 나눌 수 있다.
1) Stage에 올리기 위한 Add
Working Directory에서 수정된 파일들이 모두 Local Repository에 올라가는 것이 아니라 준비 단계인 Stage에 올라와져 있는 수정 파일들에 한해서 Commit을 하였을 시 Local Repository에 올라가게 된다. 따라서 커밋을 하기 위해서는 변경 또는 추가된 파일을 git add <파일 이름> 명령어를 통해 stage(준비 영역)에 추가해주어야 한다.
2) Local Repository에 저장하기 위한 Commit
Stage에 저장했던 파일이 확정되어 git commit -m "<커밋 메세지>" 명령어로 로컬저장소에 반영된다. 즉 로컬저장소에 새 버전을 등록한 것이다. 해당 Commit 작업을 하게 되면 로그를 통해 최신 Commit부터 최초 Commit까지 커밋 메세지와 함께 확인을 할 수 있다. 그러나, 여기까지는 로컬 저장소에만 변경된 파일이 반영된 상태이다.
3) Remote Repository에 저장하기 위한 Commit
git push origin <branch name> 명령어를 통해 Local Repository에서 Remote Repository에 Local Repository의 수정된 파일들을 동기화(업로드)를 한다. 이후 원격저장소에 변경된 내용을 가져올 때는 Pull (git pull)을 통해 다시 로컬 저장소로 전달받을 수 도있다.
git 기본적인 명령어
- git init : 저장소 생성
- git clone URL : 원격저장소에서 복제해서 저장소 생성 (git init + git remote add origin + git pull)
- git add 파일 : git이 파일을 추적하도록 명령, 새로 생성되거나 변경된 것 등
- git status : git 저장소의 상태를 확인
- git commit : 커밋하기
- git commit -m "메세지" : 커밋 메세지를 달아서 커밋하기
- git log : 커밋된 로그 조회
- git log -p : 로그에서 출력되는 버전 간의 차이점을 출력하고 싶을 때
- git diff 버전1 버전2 : 버전1과 버전2 간의 차이점을 비교할 때
- git diff : git add하기 전(작업디렉터리)과 add한 후(index)의 파일 내용을 비교할 때
- git diff --name-only : git add하기 전(작업디렉터리)과 add한 후(index)의 파일명을 비교할 때
- git reset --soft 버전 : 저장소만 이전 버전으로 돌아감
- git reset --mixed 버전 : 인덱스까지 이전 버전으로 돌아감
- git reset --hard 버전 : 작업디렉터리까지 이전 버전으로 돌아감
- git revert 버전 : 버전의 커밋을 취소한 내용을 새로운 버전으로 만드는 명령
- git branch : branch 목록보기, *있는게 현재 브랜치
- git branch 이름 : 이름으로 branch 생성
- git checkout 브랜치명 : 현재 브랜치에서 브랜치명으로 이동
- git checkout -b 브랜치명 : 지정한 브랜치 명으로 새로운 브랜치를 생성하면서 이동
- git checkout -b 브랜치명 원격저장소/브랜치명 : 원격저장소/브랜치명을 트래킹하는 브랜치를 지정한 브랜치명으로 생성하여 이동
- git checkout --track 원격저장소명/브랜치명 : 원격저장소/브랜치명을 트래킹하는 동일한 브랜치명을 생성하여 이동
- git checkout 버전 : 현재 브랜치에서 특정 버전으로 직접 이동
- git branch -d 브랜치명 : 브랜치명 삭제
- git branch -D 브랜치명 : 브랜치명 강제삭제
- git checkout -b 브랜치명 : 브랜치만들고 바로 checkout
- git branch -m 브랜치명A 브랜치명B : 브랜치명을 A에서 B로 바꾼다
- git branch -vv : 현재 설정되어 있는 트래킹 브랜의 설정 확인
- git merge B브랜치 : 현재 브랜치에서 B브랜치를 불러와서 병합한다.
- git merge --no-ff B브랜치 : merge 대상과 fast-forward 관계여도 강제로 merge commit을 생성하고 병합한다.
- git reflog : HEAD의 변경이력(commit, reset 등)을 본다. {0}이 제일 최신
- git remote add 원격저장소명 URL : 원격저장소 목록에 URL을 원격저장소명으로 저장한다. 이후부터는 원격저장소명만 쓰면 된다.
- git remote : 원격저장소명을 출력
- git remote -v : 원격저장소명과 URL을 출력
- git remote remove 원격저장소명 : 원격저장소명을 삭제
- git push 저장소명 브랜치명 :
- git push --delete 저장소명 브랜치명 :
- git push --tags : 로컬저장소의 태그들을 원격저장소로 업로드한다. github에서 releases탭이 활성화된다.
- git pull : 원격저장소로부터 로컬저장소를 동기화하고 merge 한다
- git fetch : 원격저장소로부터 로컬저장소를 동기화하지만 merge를 하지 않음
- git tag : 태그목록을 출력
- git tag 태그명 : 현재 브랜치가 가리키는 커밋객체로 태그명을 갖는 태그를 만든다
- git tag 태그명 브랜치명or버전: 브랜치가 가리키는 커밋객체 or 커밋ID로 태그명을 갖는 태그를 만든다 (light weight tag)
- git tag -d 태그명 : 태그를 삭제한다
- git commit --amend : 바로 직정 커핏 메세지 수정
- git merge --abort : merge 후 충돌이 생겼을 시 취소
*관례적으로 원격저장소명은 origin으로 한다
*그 외 참고 자료
https://bcp0109.tistory.com/373
'기타' 카테고리의 다른 글
git commit 합치기 (0) | 2024.05.01 |
---|---|
Go언어란 (1) | 2023.11.09 |
REST API (0) | 2022.02.27 |