Git,Github

Git과 Github를 이용한 개인 프로젝트 버전관리 흐름

OneMoreThing 2024. 1. 9. 20:45

프로젝트 버전관리

프로젝트를 혼자서 진행하고 규모가 크지 않다면 각기 다른 이름을 가지는 파일을 생성하는 방식으로 프로젝트의 버전을 관리할 수 있을 것이다. 하지만 이런 관리방식은 프로젝트의 기간이 길어지고 파일의 개수가 늘어날수록 한계를 마주하게 된다. 이런 어려움을 해결할 수 있게 해주는 것이 git을 통한 버전관리이다.

 

Git vs Github. 둘이 같은 거 아니야?

어플리케이션을 개발해본 경험이 있는 사람이라면 Git에 대해서 한번 쯤은 들어봤을 것이다. 또한 Github라는 것도 들어봤을 것이다. 나 역시 프로그래밍 수업에서 들어봤으며, 사용해보기 전까지는 둘이 같은 거라 생각하고 있었다. 하지만 둘은 엄연히 다른 것이다.

 

Git(깃)?

git은 버전을 관리해주는 어플리케이션이다. git을 만든사람은 리눅스 커널을 만든 사람으로 유명한 리누스 토르발스이다. git은 파일의 변경사항을 추적하며 버전 관리를 편리할 수 있게 해준다. 적합한 예인지는 모르겠지만, '변경사항을 적어놓은 장부' 라고 생각하면 된다.

git은 각 사용자의 컴퓨터에 설치하여 변경사항을 기록하고 확인할 수 있게 도와준다. 그렇다면 github는 무엇일까?

 

Github(깃허브)?

github는 프로젝트 파일과 git으로 작성한 장부를 저장해주는 온라인 저장소이다. 혼자서 작업하는 경우에는 굳이 github를 사용하지 않고 개인용 컴퓨터에서 작업을 하면 되지만, 개인 혼자서도 여러 개의 디바이스를 가지고 작업하는 현 시점에서 매번 일일이 프로젝트 파일을 별도로 관리하는 것 보다 깃허브에 작업내용을 업로드(commit & push)하고 각각의 기기에서 작업할 때마다 끌어와서(pull) 해서 프로젝트를 진행하는게 프로젝트 관리에 훨씬 유용하다.


 

버전관리 흐름 : 로컬 과 원격 저장소 기준

버전관리의 흐름을 터미널 명령어와 함께 정리해보자. 아래의 명령어들은 Mac 터미널을 기준으로 작성하였다.

####로컬 저장소 ( 개인 컴퓨터 )####
0. 기본 설정 : 장부에 기록하는 사람이 누구인지 정보를 입력하는 단계
  git config --global user.name "유저 이름"
  git config --global user.email "유저 이메일"
  git config --list // 입력내용을 확인할 수 있다.

1. 버전관리 시작 : 버전을 기록할 장부를 생성하는 것이라 생각하자
  git init // 장부 생성
  git branch -m main // 프로젝트를 배포하는 브랜치 이름을 main 으로 설정 ( 임의로 변경가능하지만 보통 main으로 한다. )

2. 프로젝트 파일을 생성하고 작업한 뒤 버전 기록
  git add file_name // 버전을 기록할 특정 파일 선택하는 명령어
  git add . //변경사항이 있는 모든 파일을 선택하는 명령어. 마침표(.) 를 간과하지말자!
  git commit -m "커밋 메세지"// add로 원하는 파일을 고른 뒤, 각각 어떤 변경사항이 있는지 장부에 메모를 남기는 것

####원격 저장소 ( Github 의 서버 )####
0.기본 설정 : 내 컴퓨터에서 깃허브와 연결하기 위해 준비하는 과정
git remote add "저장소 별명" <깃허브 주소> //저장소를 매번 복잡한 주소형식으로 쓰는 것은 불편하기 때문에 별명을 부여
ex) git remote add origin "https://github.com/유저아이디/저장소이름" // 일반적으로 저장소 별명은 origin 으로 설정

1. 저장소에 파일 업로드
- 처음 push 할 때:
  git push -u origin "branch_name"
예) git push -u origin main // 해석 : origin(원격저장소)에 파일을 올린다, main에서 작업한 내용을
//push 뒤에 -u를 붙이게 되면 다음 push 부터는 뒤에 origin main을 생략할 수 있다!

2. 저장소에서 파일 가져오기
- 처음 프로젝트 폴더에서 파일을 가져올 때:
git clone <깃허브 주소> : 현재 위치에 프로젝트 이름과 동일한 폴더를 생성하고 그 안에 프로젝트 파일을 복사해옴
git clone <깃허브 주소> . : 현재 위치에 프로젝트 파일을 복사해옴

질문) git clone을 한 경우 따로 git init을 해주어야 하나요??
답변) 아니요! git init은 버전 기록 장부를 생성하는 것이었습니다. 이미 깃허브 안에 프로젝트를 생성한 사람이 장부를 만들어서 올려 놓았습니다. clone을 해올 때 장부도 같이 복사해오기 때문에 git init을 하지 않아도 됩니다!
- 이후 파일을 가져올때:
git pull origin main //해석 : origin(원격저장소)에서 main으로 변경사항이 있는 파일을 업데이트 한다.

 

협업을 하게 되면 위의 내용만으로는 부족하기 때문에 branch, merge, Pull Request(PR) 등은 다음 글에서 다루도록 하자.