[Git] 깃허브 개념 및 깃 명령어
깃허브의 기본적인 개념 및 구조, 그리고 깃을 사용하는 데에 필요한 주요 명령어에 관한 기록입니다.
GitHub
GitHub는 버전 관리 시스템의 일종입니다. 버전 관리 시스템 (Version Control System) 이란 소프트웨어의 코드를 추가 또는 변경하는 과정을 모두 기록하여 특정한 시점으로 돌아가거나 문제가 생긴 파일을 복원하는 등 소프트웨어 개발 현장에서 사용하는 프로그램(시스템)입니다. 특히 GitHub는 분산 버전 관리 시스템에 해당되는데, 분산 버전 관리 시스템 (Distributed Version Control System) 에서는 클라이언트가 파일들의 마지막 스냅샷을 가져오는 대신 저장소(repository)를 통째로 복제하여 서버에 문제가 생겨도 어느 클라이언트든 복제된 저장소를 다시 서버로 복사함으로써 서버를 복구할 수 있습니다. 즉 체크아웃(checkout)을 할 때마다 전체 백업이 일어나는 셈입니다.
집중형과 달리 여러 개의 저장소(Repository)가 존재한다. 서버에 있는 저장소를 원격 저장소라고 하며 개인마다 자신의 PC에 로컬 저장소라고 한다. 이로 인해 사용자는 서버에 있는 저장소에 접속하지 않아도 개발이 가능하다. 하지만 중앙집중식 버전 관리 시스템에 비해 다소 복잡해진다. 아래의 그림의 Fork(포크)는 GitHub에 있는 특정 리포지토리를 자신의 계정으로 복제하는 것이고, 이렇게 복제된 리포지토리는 원래 리포지토리와 완전히 다른 리포지토리가 된다. 또한 서버(GitHub)와 사용자 만의 push, pull이 아닌 다른 사용자 사이에도 직접 push, pull이 가능하다.
GitHub와 Git의 차이
Git은 Git Repository라고 불리는 깃 저장소에 소스 코드 등을 넣어서 이용하는 것을 말합니다. GitHub는 이러한 깃 저장소를 인터넷 상에서 제공하는 호스팅 서비스를 말합니다. 깃허브에 공개되어 있는 소스 코드는 모두 깃으로 관리됩니다.
Git의 구조
Working Directory : 현재 작업 중인 깃 프로젝트 파일들이 있는 자신의 로컬 PC의 디렉토리입니다. 평소 작업하듯 자유롭게 프로젝트를 작업할 수 있습니다.
Staging Area :
git add
명령어를 사용하면 Working Directory의 변경내역을 Staging Area에 올립니다.
Staging Area는 commit 할 변경내역들의 대기 장소라고 볼 수 있습니다.
Local Repository :
git commit
명령어를 사용하면 Staging Area에 있는 변경내역들을 실제 스냅샷으로 묶어 Local Repository에 올릴 수 있습니다.
Local Reapository는 이러한 commit들이 스냅샷으로 기록된 곳입니다.
즉, 하나의 commit은 버전 간의 구분점이 되며 이전 버전에서 해당 버전으로의 변경내역이 담겨 있습니다.
Remote Repository : 로컬 PC를 넘어 원격 서버에서 관리되는 저장소입니다. 이 곳에 올라온 커밋은 이제 다른 사람들도 참조할 수 있습니다. 커밋 단위로 해당 버전의 프로젝트를 내려받는 등의 행위가 가능합니다. 외부 저장소이기 때문에 로컬 환경의 파일이 손상되더라도 외부 저장소에 올라간 기록은 따로 유지됩니다.
Git 명령어
git init
: 현재 위치한 로컬 PC의 디렉토리를 깃 저장소로 만들기git config --global user.name "[깃허브 닉네임]"
: 로컬 PC에서 깃을 사용할 수 있도록 기본 설정 하기git config --global user.email "[깃허브 이메일 주소]"
: 로컬 PC에서 깃을 사용할 수 있도록 기본 설정 하기git clone [URL]
: 깃허브 웹페이지의 원격 저장소를 복제하여 로컬 PC에 깃 저장소로 가져오기git status
: 깃 저장소의 상태 확인하기git add [파일명]
: 깃이 [파일명]을 추적하도록 하기git commit -m "[메시지]"
: 깃 저장소의 변경내역 저장하기git branch
: 브랜치 목록 보기 (*로 표시된 브랜치가 현재 브랜치)git branch [브랜치명]
: [브랜치명]으로 브랜치 생성하기git checkout [브랜치명]
: 현재 브랜치에서 [브랜치명]으로 이동하기git checkout [커밋 id]
: 현재 브랜치에서 특정 버전으로 이동하기git branch -d [브랜치명]
: 브랜치명 삭제하기git branch -D [브랜치명]
: 브랜치명 강제 삭제하기git remote
: 원격저장소명 출력하기git remote -v
: 원격저장소명과 원격저장소URL 출력하기git remote add [원격저장소명] [원격저장소URL]
: 원격저장소 목록에 [원격저장소URL]을 [원격저장소명]으로 저장하기git push [원격저장소명] [브랜치명]
: 깃 저장소의 변경내역 발행하기git pull
: 원격저장소로부터 로컬저장소를 동기화하고 머지하기git fetch
: 원격저장소로부터 로컬저장소를 동기화하고 머지하지 않기
댓글남기기