로컬 Git 리포지토리(Repository)란?
Git이란 개발자의 코드를 효율적으로 관리하기 위해서 개발된 ‘분산형 버전 관리 시스템'이다. Git에서 코드를 저장하는 공간을 리포지토리(repository)라고 한다. 저장위치에 따라 두 가지로 구분할 수 있다.
- 로컬 Git 리포지토리 : 자신의 컴퓨터의 작업 공간(local)에 위치
- 원격 Git 리포지토리 : Github 등의 원격(remote) 공간에 위치
로컬 환경에 있는 디렉토리에서 로컬 Git 리포지토리를 추가하면 해당 디렉토리의 파일 변화를 감지할 수 있다.
파일의 변화를 기록하는 절차
- 코드를 저장할 디렉토리를 만들고 해당 디렉토리에 로컬 Git repository를 생성한다. (git init)
- 코드를 작성하고 저장하는 공간, 작업 공간(work space)의 파일 및 디렉토리를 git의 관리 하에 있는 상태로 올려줄 수 있다. (git add) 이 영역이 staging area이다.
- staging area의 파일은 commit이 가능하다. commit으로 local Git repository에 내 코드를 기록할 수 있다. (git commit)
git init
일반적인 폴더에 Git repository를 추가하면 개발자는 Git을 이용하여 자신의 프로그램 버전 관리를 할 수 있다.
아래는 예시이다.
# 디렉토리 생성
mkdir ~/Desktop/codestates
cd ~/Desktop/codestates
# 디렉토리 생성
mkdir my-app
# 디렉토리 이동 (change directory)
cd my-app
# 파일 생성
touch index.html style.css
여기서 git init 을 입력하면 Git 리포지토리가 my-app 디렉토리에 생성된다. {작업 공간 디렉토리}
/.git 폴더에 Git 활용을 위한 디렉토리가 생성된 것도 확인할 수 있다.
git init
git add
로컬 환경에 있는 디렉토리에 Git 리포지토리가 생성되었기 때문에, 이제 index.html, style.css의 변경사항을 Git으로 관리할 수 있다. 각각의 파일에 코드를 작성한 후, 이 코드를 하나로 모아두는 과정을 거치게 되는데 이 공간을 staging area라고 한다.
staging area에 코드를 옮기는 명령어는 git add <경로명>이다.
터미널의 현재 위치가 Git 리포지토리를 생성한 my-app 디렉토리라면, git add index.html , git add style.css 명령어를 사용하면 된다. 만약 현재 경로에서 변경이 감지된 모든 파일을 한 번에 추가하려면 git add . 을 입력한다. (.은 현재 경로를 의미)
git status
staging area로 잘 옮겨졌는지 확인하기 위해서는 git status 명령어를 입력한다. 현재 디렉토리에 Git 리포지토리가 잘 설치되어 있다면, 아래와 같이 Git 리포지토리의 상태를 확인할 수 있다.
- 변경 사항이 staging area에 잘 옮겨졌다면 아래와 같이 파일명이 초록색으로 표시된다.
- 변경이 되었으나 staging area로 옮겨지지 않은 파일은 빨간색으로 표시된다.
** 만약 Git 리포지토리가 없는 디렉토리에서 git status 명령어를 입력하면 아래 메시지를 출력한다.
Git 리포지토리 변경 사항 파악하기
staging area에 위치한 파일 내용이 추가로 변경된 경우, git status 명령어로 다시 현재 Git 리포지토리 상태를 확인할 수 있다.
git commit
staging area에 있는 파일은 commit이 가능하다.
- git add <경로명> : 경로에 있는 파일을 staging area로 넣는 명령어
- staging area: 온전히 저장하고 싶은 코드를 모아놓은 묶음
- commit
- staging area의 코드 묶음을 저장하기로 결심하고 (git commit)
- staging area 코드의 용도를 적어두는 행위 (커밋 메시지 -m "commit message")
늘 commit하기 전에 git status 로 staging area의 상태를 확인하는 것이 좋다. commit하고자 하는 파일 모두가 staging area에 들어 있을 경우 아래 명령어를 입력한다. “” 내부에는 staging area에 모아놓은 변경 사항에 대한 설명을 작성한다.
git commit -m "<commit Message>"
ex) git commit -m "나만의 아고라스테이츠 html, css 완성"
아래 화면과 같은 메세지가 나오고, staging area가 빈 상태가 되면 commit에 성공했다.
commit은 어떻게 하는게 좋을까요?
가장 지키기 쉬운 두 가지 원칙이 있다.
- commit은 작은 단위로 자주 하는게 좋다. GIt commit 기록이 상세하게 되어있으면 아래와 같은 장점이 있다.
- 코드를 잘못 적은 경우에, 이전 기록을 더 쉽게 복원할 수 있다.
- 누가 해당 코드를 수정했는지 쉽게 파악할 수 있다.
- merge, rebase등 기능에 날개를 달아주는 기반이 된다.
- commit 메시지는 짧고 간결하게 사실적으로 작성한다. Git commit 메시지는 동료 개발자가 참고할 수 있기 때문에 짧고 간결하고 사실적이여야 한다.
# Good: 기능(feat) 구현을 확인 가능, 정확한 기술 용어 사용, 짧고 간결함 git commit -m "feat: 인스타 게시글 조회 페이지네이션" # Bad: 커밋 타입 구분 X, 만연체, 사실 여부를 판단하기 어려운 "효율성"에 대한 코멘트 git commit -m "더 효율적인 인스타 게시글 조회 기능 구현함" # Very Bad: 어떻게 나은 형식인지 판단하기 어려움, 어떤 기능인지 확인이 어려움 git commit -m "좀 더 나은 형식"
원격 Git 리포지토리란?
원격 Git 리포지토리(줄여서 원격 리포지토리)는 자신의 컴퓨터(로컬 환경) 작업 공간에 위치하지 않는 Git 리포지토리이다. 개발에 대해서 검색해보면 쉽게 접할 수 있는 Github의 여러 리포지토리가 대표적인 원격 리포지토리이다. 공개된 Git 리포지토리의 경우, 여러 사람이 함께 공유가 가능하다. (유명한 오픈소스 프로젝트 중 하나인 리눅스 역시 원격 Git 리포지토리가 공개되어 있음)

원격 Git 리포지토리 다루기
- Github에서 원격 리포지토리를 생성한다.
- 로컬 리포지토리에 원격 리포지토리 git url을 등록한다. (git remote add)
- 로컬 Git repository에 기록한 내역을 원격 Git repository에 push 한다. (git push)

새로운 Github repository 만들기
Github로 이동하여, 새로운 GIthub repository를 만든다.
왼쪽 그림과 같이 원하는 리포지토리 이름을 입력하고, Public / Private 여부를 체크한다.
- 이름은 가능하면 로컬 리포지토리 디렉토리 이름과 같게 설정하면 좋다.
- 만약 오픈소스 코드가 아니고, 공개하지 않는다면 Private를 체크하고 생성하면 된다.
- Owner가 자신의 아이디인지 재확인한다.
나머지 옵션은 필요에 따라 체크하면 된다. 완료가 된 후에는 아래와 같은 화면이 뜬다.
git remote
git remote 명령어는 원격 리포지토리를 다루기 위한 git 명령어이다.
git remote add <name> <URL>
git remote add는 로컬 리포지토리에 원격 리포지토리 주소를 등록하는 명령어이다. 쉽게 원격 리포지토리를 파악하기 위해 이름을 지정해줄 수 있고, 이름 뒤에 원격 리포지토리 주소를 적으면 작동한다.
- <name>: 앞으로 로컬 리포지토리에서 원격 리포지토리 주소를 대신할 이름 (ex: origin)
- <URL>: 원격 리포지토리 주소 (ex: git@github.com:codestates-seb/agora-states-fe.git )
원격 리포지토리 연결하기
아래 화면에서 파란색 부분은 로컬 환경(자신의 컴퓨터 내 디렉토리)에서 새로운 Git 리포지토리를 생성하고 다루기 위한 명령어고, 빨간색 부분은 로컬 리포지토리를 원격 리포지토리와 연결하고 다루기 위한 명령어이다.
git remote add로 원격 리포지토리 연결하기
자신이 새롭게 만든 GIthub 리포지토리의 정보를 기반으로 로컬 리포지토리와 원격 리포지토리를 연결한다. (아래 명령어 참고)
git remote -v 명령어로 원격 리포지토리가 잘 연결되었는지 확인한다.
git push
git push 는 로컬 리포지토리에 기록한 내역을 원격 리포지토리로 옮기는 작업이다.
- 새롭게 생성한 원격 리포지토리에 기존 커밋 기록을 옮기거나
- 기존 원격 리포지토리에서 일부 변경된 내용을 옮기는데 사용


git push <remote> <branch>
<remote> 에는 원격 리포지토리의 이름을 입력하고, <branch> 에는 브랜치 이름을 입력한다.
예를 들어, 로컬 리포지토리의 기록을 원격 리포지토리 origin의 main 브랜치로 push하려면 git push origin main 을 입력
git push로 원격 리포지토리에 로컬 리포지토리 변동 사항 업데이트하기
git remote add로 로컬 리포지토리에 원격 리포지토리 주소를 잘 등록했다면 이제 git push 를 할 수 있다.
빨간색 박스의 git push -u origin main 명령어를 입력하면 원격 리포지토리 origin의 main 브랜치에 로컬 리포지토리 main 브랜치 내용을 업데이트하게 된다.
** git push -u 는 입력한 리포지토리와 브랜치명이 저장이 되므로 다음에 push 할 때는 그냥 git push 만 하면 된다.


Fork란?
포크는 기존의 잘 만들어진 프로젝트에 변화를 주거나 새로운 것을 시도를 해보기 위해 리포지토리를 복사하는 것을 의미한니다. 라이센스까지 함께 복사가 되기 때문에, 공개되어 있고 라이센스 명시가 제대로 되어있는 프로젝트는 라이센스만 잘 지키면 포크해도 문제가 없다. 보통 Github 원격 리포지토리를 자신의 Github 원격 리포지토리로 포크한다.
포크 후 할 수 있는 일
다른 Github 리포지토리를 포크한 이후에는 아래 작업을 할 수 있다.
- 자신의 컴퓨터의 로컬 리포지토리로 git clone 하여 따로 개발하기
- public 프로젝트에 버그 수정 및 기능 추가 요청 (push & pull request)
- public 프로젝트에서 새로 업데이트 된 내용을 pull
Git Command Quiz
1. 혼자 작업
2. 협업