코딩할 때 뺄래야 뺄 수 없는 서비스 중 하나가 GitHub (깃허브) 입니다. 현역 프로그래머에게는 너무나 친숙한 서비스지만, 코딩 초보자에게는 생소할 수도 있습니다.
그래서 이번에는 코딩 초보자도 바로 GitHub (깃허브) 를 사용할 수 있도록 GIT사용법을 소개하겠습니다. GitHub (깃허브) 가 무엇인지, 어떤 때 사용하는 도구인지를 알아 가면서 실제 사용법을 익히면 좋겠습니다.
참고 [번역] github 에서 자주 쓰이는 영어 정리해 봤습니다.
목차
- GitHub(깃허브) 란
- GitHub 계정 등록
- GitHub를 사용을 위한 사전 지식
- GitHub 사용법
- 지점 사용법
- 자주 사용하는 Git 명령 12
GitHub란
GitHub는 소프트웨어 개발 프로젝트를 위한 소스코드 관리 서비스입니다. 소스 코드를 열람하고 간단한 버그 관리, SNS 기능까지 갖추고있어 개발자에게 없어서는 안될 서비스입니다. GitHub를 사용하여 버전 관리를 실시하고있는 기업도 다수 있습니다.
GitHub 계정 등록
사용을 위해 GitHub에 가입 해 봅시다. 우선, GitHub의 페이지 에 액세스합니다. 그리고 사용자 이름과 이메일 주소, 비밀번호를 입력하여 계정 등록을 합니다.
이어서 나오는 유형중 무료로 사용할 수있는 Free 플랜을 선택한 후 "Finish sign up" 버튼을 클릭합니다.
등록한 메일 주소로 인증 메일이 도착합니다. 메일 내용에 따라 사용자 인증을 수행하면, GitHub 계정 등록이 완료됩니다.
GitHub 사용을 위한 사전 지식
본격적인 깃허브 사용법을 소개하기 전에, 깃허브를 사용하기 위해 알아야만 하는 3가지를 먼저 소개할까 합니다.
사전 지식 1 : 가장 중요한 두가지
깃헙을 사용하기 위해서 커밋과 푸시는 최소한 꼭 알아 둬야하는 개념입니다.
- 커밋 (commit) : 파일을 추가하거나 변경 내용을 저장소에 저장하는 작업
- 푸시 (push) : 파일을 추가하거나 변경 내용을 원격 저장소에 업로드하는 작업
사전 지식 2 : 로컬 저장소와 원격 저장소
저장소는 파일이나 디렉토리를 저장하는 장소입니다. 변경 이력을 관리하고자하는 디렉토리 등을 저장소의 관리하에 두는 것으로, 그 디렉토리에있는 파일 등의 변경 내역을 기록 할 수 있습니다.
저장소는 자신의 컴퓨터에있는 "로컬 저장소"고 서버 등 네트워크에있는 "원격 저장소"의 2 개소에 있습니다. 기본적으로 로컬 저장소에서 작업을 수행하고 그 결과를 원격 저장소에 저장하게 됩니다.
사전 지식 3 : 브랜치 (branch)
소프트웨어 개발은 현재 출시하고있는 버전의 유지 보수를하면서 새로운 기능 추가 및 버그 수정을 할 수 있습니다. 이러한 병렬로 수행되는 여러 버전 관리를 위해 Github에는 브랜치 (branch)라는 기능이 있습니다.
지점은 역사의 흐름을 분기하여 기록 해 나가는 것입니다. 분기 한 지점은 다른 지점의 영향을받지 않기 때문에 같은 저장소에서 각 개발을 해 나갈 수 있습니다.
GitHub 사용법
그럼 본격적인 Git 사용방법을 알아 보겠습니다. 기본적인 Git의 작업은 아래와 같은 흐름이되므로, GitHub를 통해 순차적으로 소개합니다. 1번의 작성은 처음 한번만하고 2번에서 5번를 반복합니다.
기본적으로 작은 작업 단위로 커밋을하고, 어느 정도 작업이 일단락했을 때 푸시를하는 것이 일반적입니다. 커밋 작업이 알기 쉽게 커밋 메시지를 남겨두면 로그를 따라가는 때 도움이 됩니다.
- Github에 저장소 작성 (git init) 또는 복제 (git clone)
- 파일의 작성, 편집
- 파일의 생성 / 변경 / 삭제를 git 인덱스에 추가 (git add)
- 변경 결과를 로컬 저장소에 커밋 (git commit)
- 로컬 저장소를 푸쉬해 원격 저장소에 반영 (git push)
GitHub에 저장소 작성
바로 다음 화면에서 저장소를 만들어 봅시다! GitHub의 메인화면에서라면, Create New Repository 버튼을 클릭합니다. 화면에서처럼 Repository name 에 이름을 입력 후 필요에 따라 Description에 저장소의 설명을 입력합니다. 그리고 저장소 유형에는 "Public" 을 선택합니다. "Private"저장소는 유료 회원 만 작성할 수 있습니다.
마지막으로, 저장소에 미리 README 파일을 만들어 놓는 경우는 "Initialize this repository with a README"에 체크합니다. .gitignore이나 license에 대해서는 나중에 추가하거나 변경할 수 있으므로 None을 선택합니다. 필요 항목의 입력이 끝나고 Create repository 버튼을 클릭하면 저장소 생성이 완료됩니다.
파일의 작성, 편집
이번에는 "hello.html" 파일을 로컬 PC에 생성해서 진행을 해 보겠습니다. HTML 파일을 만듭니다.
그럼 가지고 계신 PC에 먼저 로컬 저장소를 만듭니다. 먼저 적당히 'helloworld'라는 디렉토리를 만들 수 있습니다.
mkdir helloworld
cd helloworld
git init
"mkdir"은 새로운 디렉토리를 만드는 명령 "cd"는 디렉토리를 이동하는 명령입니다. helloworld라는 디렉토리를 만들고 그 디렉토리로 이동 한 후 작업을 시작합니다.
그리고이 'git init "명령은 Git 저장소를 새로 만드는 명령입니다. 이 명령을 실행하면 현재 디렉토리를 Git 저장소로 변환합니다.
파일의 생성 / 변경 / 삭제 git 인덱스에 추가 (git add)
방금 만든 "hello.html"파일을 로컬 저장소에 추가합시다. 그리고 다음의 명령으로 인덱스에 추가합니다. 인덱스는 저장소에 커밋 할 준비를하기 위해 변경 내용을 임시로 저장할 위치입니다.
git add hello.html
변경 결과를 로컬 저장소에 커밋 (git commit)
다음으로 인덱스에 추가 된 파일을 커밋합니다. 커밋은 파일이나 디렉토리의 추가 또는 변경을 저장소에 기록하는 작업입니다.
git commit -m "new file"
이제 저장소에 파일 추가가 기록되었습니다. 파일이 추가되어 있는지 확인합니다.
git status
또한 원격 저장소에 반영하기 전에 원격 저장소의 정보를 추가합니다. 이 정보는 방금 GitHub에 표시된 원격 저장소의 주소입니다. 이번에는 예를 보여줍니다.
git remote add origin https://github.com/username/repositaryName
로컬 저장소를 밀어 원격 저장소에 반영 (git push)
로컬 저장소의 변경 사항을 GitHub에있는 원격 저장소에 반영하기 위해 다음 명령을 실행합니다.
git push origin master
GitHub의 사용자 이름과 암호를 입력하면, GitHub에 푸시하고 원격 저장소에 반영할 수 있습니다. 작업이 끝났으면 github.com페이지로 가서 파일이 잘 푸쉬가 됐는지 확인합니다.
브랜치 (branch) 사용
이제 기본적인 사용법은 알아봤으니, 실제 코딩 때 자주 이용되는 브랜치 (branch)의 사용법에 대해 살펴 보겠습니다.
사전 지식에서도 소개했지만 분기는 동시에 이루어지는 여러 버전 관리를 할 수있는 구조입니다. 기본적으로 다음과 같은 순서로 사용합니다.
- 브랜치의 생성, 이동
- 브랜치에서의 개발 작업
- 브랜치에 푸시
- 브랜치에서 풀
- 브랜치 병합
- 브랜치 삭제
브랜치의 생성, 이동
우선 현재 브랜치 목록을 살펴 보자.
git branch
실행 결과는 다음과 같습니다.
* master
현재 브랜치에는 "*"가 붙습니다. 이것은 브랜치가 master 것이고 현재 브랜치도 master 임을 나타내는 것입니다. 그러면 지점을 만들어 봅시다. 이번에는 subdir01' 라는 브랜치를 생성합니다.
git branch subdir01
지점의 이동은 checkout 명령을 사용합니다.
git checkout subdir01
또한 지점 만들기 및 이동 다음 명령으로 정리 할 수 있습니다.
git checkout -b subdir01
여기에서 다시 브랜치 목록을 살펴 봅시다.
git branch
subdir01 지점이 추가되어 작업 중임을 알 수 있습니다.
브랜치에서의 개발 작업
다음 지점에서 개발 작업을 진행해 봅니다. 그렇다고 해도 아무런 변화하지 않습니다. 예를 들어, hello2.html라는 파일을 만들어 보겠습니다.
브랜치에 푸시
먼저 작성한 파일을 git에 추가 커밋합니다.
git add hello2.html
git commit -m "add file hello2"
이제 로컬 저장소에 파일 추가가 기록되었습니다. 그럼 원격 저장소에 반영시켜 보겠습니다. 원격 저장소의 정보는 등록제이기 때문에 브랜치 이름을 지정하는 것만으로 푸쉬할 수 있습니다.
git push origin subdir01
GitHub에서 확인 해 보면, 현재 2 개의 브랜치가 존재하고 subdir01 브랜치가 푸시된 것을 알 수 있습니다.
브랜치에서 풀
그러면 다른 개발자가 subdir01 저장소로 개발하려면 어떻게 해야할까요? 이러한 공동 개발에서 git의 위력이 제대로 발휘되는 데요. 이 경우 풀 명령을 사용하여 쉽게 구현할 수 있습니다.
우선 저장소 subdir01 에 체크아웃명령으로 이동합니다.
git checkout subdir01
실행 결과를 보면 체크 아웃 한 브랜치 subdir01이 원격 브랜치의 subdir01에 대응하고 있는 것을 알 수 있습니다.
다음 원격 브랜치 subdir01 의 코드를 가져옵니다.
git pull
로컬 파일 목록을보고 갑시다.
ls
이제 여러 개발자의 공동 개발을 시작할 수 있습니다.
브랜치 병합
실제 개발 현장에서는 새로운 기능의 브랜치를 만들고 개발하고, 테스트가 완료되면 메인 master 브랜치에 통합이라는 흐름으로 개발 작업을 수행합니다. 이 브랜치의 통합 작업을 병합이라고합니다. 구체적인 절차는 다음과 같습니다.
첫째, 현재 분기를 master로 전환합니다.
git checkout master
그럼 sub1 브랜치 결과를 병합합니다.
git merge subdir01
실행 결과를 보면 subdir01 지점에서 만든 hello2.html 파일이 추가 된 것을 알 수 있습니다. Github에 푸쉬해 봅시다.
git push origin master
이제 브랜치 subdir01의 내용이 master로 병합되었습니다.
브랜치 삭제
사용하지 않는 브랜치는 제거 할 수 있습니다. 그러나 실제 개발 현장에서는 잘못 작성되었을 경우를 제외하고 작업이 완료된 분기도 남겨 두는 것이 일반적입니다.
브랜치를 삭제하려면 다음 명령을 실행합니다.
git branch -d subdir01
결과를 살펴 보자.
git branch
결과를 확인하면 다음과 같습니다. 브랜치 subdir01이 삭제되고 master 만이 존재하고 있음을 알 수 있습니다.
자주 사용하는 Git 명령 12
마지막으로 자주 사용하는 Git 명령을 12 소개합니다. 위 내용과 중복되는 것도 있습니다.
git status
저장소의 상태를 확인하기 위해 사용하는 명령어입니다.
현재 브랜치의 이름과 추가 · 변경된 파일 및 디렉토리 목록을 표시합니다.
git status
git add
파일이나 디렉토리를 인덱스에 추가하는 데 사용하는 명령입니다.
추가 할 때 [file_pattern]에는 파일 및 디렉토리 이름을 직접하고있는 외에 "*. txt"처럼 와일드 카드로 여러 대상을 지정할 수도 있습니다.
git add [file_pattern]
git commit
인덱스에 추가 된 파일이나 폴더의 내용을 저장소에 쓸 때 사용하는 명령어입니다. 옵션을 지정하지 않고이 명령을 실행하면 커밋 메시지를 작성하는 편집기를 시작합니다.
편집기는 각각 다르기 때문에 쉽게 메시지를 지정하려면 -m옵션을 붙인 후 큰 따옴표 안에있는 메시지를 지정합니다. 또한 -a옵션을 지정하면 변경된 파일을 검색하고 인덱스에 추가하는 작업도 동시에 실시합니다.
git commit -am "A first commit"
git branch
브랜치에 대해 다양한 작업을 수행하기 위해 사용하는 명령어입니다. 아래와 같이 사용합니다.
- git branch [branch-name] : 브랜치 만들기
- git branch : 브랜치 목록보기
- git branch -d [branch-name] : 지정한 브랜치를 삭제
git checkout
로컬 저장소의 브랜치를 전환 할 때 사용하는 명령어입니다.
git checkout [branch-name]
git log
로컬 저장소의 커밋 히스토리를 탐색하는 데 사용하는 명령입니다.
-n옵션 내역보기 수를 지정할 수 있습니다.
git log -n 10
git grep
저장소의 파일 내용에서 검색하고자 할 때 사용하는 명령어입니다.
특정 단어가 포함 된 파일을 검색하고 해당 파일의 어디에 단어가 포함되어 있는지를 확인할 수 있습니다.
git grep "검색 단어"
git clone
기존 원격 저장소를 로컬에 다운로드하기 위하여 사용하는 명령어입니다.
예를 들어, GitHub에 공개되는 저장소를 자신의 컴퓨터에 다운로드할 때 사용합니다.
git clone [url]
git remote
원격 저장소를 조작하는 데 사용하는 명령으로 아래와 같이 사용합니다.
- git remote : 원격 저장소의 이름 목록을 표시
- git remote -v : 원격 저장소에 대한 자세한 목록보기
- git remote add [name] [url] : 원격 저장소를 추가
- git remote rm [name] : 원격 저장소를 제거
git reset
로컬 저장소의 커밋을 취소하기 위하여 사용하는 명령어입니다.
잘못 커밋하거나 수정 누락이있을 때 자주 사용합니다.
git reset -soft HEAD ^
git merge
현재 브랜치에 다른 지점에서 변경 사항을 병합하는 데 사용하는 명령입니다.
다음의 예에서는 분기 bug-fix를 master 브랜치에 병합합니다.
git checkout master git merge bug-fix
git pull
원격 브랜치의 변경 사항을 캡처하기 위해 사용하는 명령어입니다.
다음 예에서는 로컬 저장소의 master 브랜치에 원격 저장소 origin의 master 브랜치를 가져옵니다.
git checkout master git pull origin master