티스토리 뷰

개발/TIL

Git과 Github

hahagarden 2023. 3. 9. 12:42

Git과 Github

몇 년 전까지만 해도, 한글이나 엑셀 큰 파일을 작업하다가 중간에 컴퓨터가 멈추거나 꺼지면 바로 좌절이었다. 다 날라갔기 때문이다. 또는 다른이름으로 저장을 해야하는데 실수로 저장을 눌러서 이전 데이터가 날아가 버린 적도 있다. 이럴 때 중간중간 저장이 가능하고 기록할 수 있고 과거의 시점에서 이전 데이터를 사용할 수 있도록 버전을 관리해주는 것이 git이다.

Git은 프로젝트의 버전을 관리할 수 있게 하는 시스템이고, github는 버전관리를 한 프로젝트들을 관리하게 해주는 호스팅 서비스이다.

Git은 버전관리시스템 중 하나로, 버전관리시스템은 Perforce, Apache Subversion, Plastic SCM 등이 있다. Git은 리눅스 커널을 개발한 리누즈 토발즈가 만든 버전관리 시스템이다. 속도가 빠르고 무료이고 분산형을 지원하고 사용자가 많아 가장 인기가 많고 사용법도 많이 찾아볼 수 있다. 학계와 여러 산업에서 Git을 많이 사용하고 있다. 

Github는 대표적인 Git저장소이다. Github 뿐만 아니라 GitLab(깃랩에선 저장소를 프로젝트라고 표현한다), BitBucket 등의 호스팅 서비스가 있다. 앞으로 나올 Local Repository(지역 저장소)와 Remote Repository(원격 저장소)은 모두 Git이 제공하는 기능이다. 지역 저장소에서 작업을 하고 백업할 원격 저장소를 직접 구축할 수도 있지만 만들고 유지하는 것이 쉽지 않아 원격저장소를 제공하는 서비스를 주로 사용한다. 이러한 서비스 중 하나가 Github이다(깃허브가 아닌 구글 드라이브같은 클라우드 디스크에도 백업할 수 있지만 개발이라는 특수목적에 편리한 여러 기능들이 있다.  Github가 유명한 것은 개발자들이 많이 사용하고 주목하는 여러 오픈 소스가 올라와 있기 때문이다. 개발 문화 전체에서 차지하는 영향력이 아주 큰 서비스이다.

 

Local Repository

자신의 컴퓨터에서 작업한 뒤 자신의 컴퓨터(로컬)에 저장하는 저장소이다.

✔️  git init
코드를 저장할 디텍토리를 만들고 해당 디렉토리에 git init을 통해 로컬 git repository를 생성한다.
git repository를 추가하면 자신의 프로그램 버전 관리를 할 수 있다.

✔️  git add
코드를 작성하고 현재 작업공간의 파일 및 디렉토리를 git의 관리 하에 있는 상태로 올려줄 수 있다. 이 영역이 staging area이다.
현재 디렉토리에 있는 파일들의 변경사항을 git으로 관리할 수 있다.

git add <경로명>
git add index.html
git add style.css
git add . // 현재 경로에서 변경이 감지된 모든 파일
git status // 현재 staging area 상태 확인

✔️  staging area의 파일은 commit이 가능하다.
commit은 저장하는 것이다. staging area에 있는 것은 아직 저장이 되진 않았다. 단지 포장해놓은 것이다. 저장할 때 커밋메세지와 함께 commit을 한다.

git commit -m "commit message"

커밋메세지는 짧고 간결하게 사실적으로 작성한다. 어떤 기능을 구현했는지 확인 가능하고 정확한 기술 용어를 사용하고 짧고 간결하게 작성해야 동료 개발자가 참고하기 좋다.

✔️  git branch 
현재의 브랜치를 알려준다.

git branch <브랜치명>

브랜치명을 추가하면 해당 브랜치명을 가진 브랜치를 생성한다.

✔️  git checkout <브랜치명>
브랜치로 이동한다.

 

Remote Repository

자신의 컴퓨터(로컬 환경) 작업 공간에 위치하지 않는 저장소이다. 

✔️  Github에서 원격 리포지토리를 생성한다.

✔️  git remote add
로컬 리포지토리에 원격 리포지토리 git url을 등록한다(연결한다).

git remote add <name> <URL>

<name>: 앞으로 로컬 리포지토리에서 원격 리포지토리 주소를 대신할 이름(ex. origin)
<URL>: 원격 리포지토리 주소

✔️  git push
로컬 리포지토리에 기록한 내역을 원격 레포지토리에 push한다.

git push <remote> <branch>
git push -u <remote> <branch> // remote이름과 브랜치명을 저장해놓으면 앞으로 git push만 입력해도 된다
git push

 

Fork

포크는 기존의 잘 만들어진 프로젝트에 변화를 주거나 새로운 것을 시도를 해보기 위해 리포지토리를 복사하는 것을 의미한다. 기존의 프로젝트에 영향을 미치지 않기 때문에 서로의 프로젝트에 영향을 주지 않는다. 또한 라이센스까지 함께 복사가 되기 때문에 공개되어있고 라이센스가 잘 명시되어 있는 프로젝트는 라이센스만 잘 지키면 포크해도 문제가 없다. 보통 다른 계정의 원격 리포지토리를 자신의 github 원격 리포지토리로 포크한다.

✔️ Clone
포크를 해왔다면 파일에 작업을 가할 것이다. 포크해온 원격 리포지토리를 git clone을 통해 자신의 로컬 리포지토리로 가져온다.
복제하고자 하는 레포지토리를 새 디렉토리로 가져온다. git clone을 한다면 세팅이 다 되기 때문에 git init을 다시 해 줄 필요가 없다. (git init은 빈 로컬 레포지토리를 만들거나 기존 레포지토리를 초기화하는 명령어이다.)

 

Reference

코드스테이츠 학습자료
Do it! 깃&깃허브 입문 도서
https://blog.unity.com/kr/games/8-factors-to-consider-when-choosing-a-version-control-system
https://namu.wiki/w/Git

반응형
댓글