본문 바로가기
개발정보

github(깃허브)란? 깃허브 사용이유, 개념과 용어, 사용법

by 소하루 2023. 10. 17.

github(깃허브)란?

github란 버전 컨트롤 소프트웨어 git을 기반으로 소스 코드를 호스팅하고 협업 지원 기능을 지원하는 마이크로 소프트의 웹 서비스이며, 다수의 사람들이 공동으로 작업을 할 때 발생할 수 있는 문제를 예방하기 위해 사용하는 버전관리 툴입니다. 

 

처음 git을 접할 때 git과 github가 같은 것으로 착각 할 때가 종종 있습니다.
git은 개인 pc에 로컬로 존재하는 저장소이고,
github는 git의 원격 저장소를 클라우드 상의 외부 서버에 저장시켜주는 저장소입니다.
git을 github에 동기화하여 사용하면 여러 개발자가 함께 공동 작업을 할 수 있습니다. 

 

깃허브 사용이유

프로그램 소스 코드 외에 문서의 형상 관리(버전 관리)도 깃을 통해 관리할 수 있지만, 주로 텍스트로 이루어진 소스 코드와 같은 파일의 변경 내용을 효과적으로 관리하기 위해 사용됩니다.

프로그램 소스 코드는 프로그램을 소유한 기업의 자산이기 때문에, 기업들은 프로젝트 진행 시 분실 위험을 최소화하고, 코드 수정 시 오류가 발생할 상황을 대비하기 위해 형상관리 툴을 사용합니다.

 

*git과 같은 형상 관리(버전 관리) 도구로 SVN, CVS 등이 있습니다. git이 만들어지기 전에는 이러한 도구들을 많이 사용하였으나, 현재는 git이 가장 많이 사용되는 형상 관리 도구가 되었습니다.

 

개념과 용어

- 작업 영역 : 실제 소스 코드 작업이 이루어지는 로컬 디렉토리 파일을 뜻합니다.
- 스테이징 영역 : 작업한 내용 중 깃이 관리하는 로컬 리포지터리로 저장하기 위해 저장할 대상을 선정하는 임시 영역입니다.
- 로컬 리포지터리 : 깃의 버전 관리가 이루어지는 실제 git 저장소를 말합니다.
- 원격 리포지터리 : 다른 개발자들과 코드를 공유하기 위한 로컬 리포지터리가 동기화 되어 있는 원격저장소로 깃 허브 등을 의미합니다.

 

사용법

1. 깃허브에서 계정을 만듭니다.
2. 깃허브에서 repository를 생성합니다. ( 전체공개일 경우 public / 개인용일 경우 private 를 선택합니다.)
3. 커밋할 폴더에 들어가서 git init을 합니다.
4. shell에 깃을 설치합니다. 
 윈도우 일경우 git bash 설치 https://git-scm.com/
5. 토큰 또는 ssh로 인증합니다.

토큰 발행 방법은 아래와 같습니다.
깃허브 접속 - settings - developer settings - personal access tokens - generate new tokens
토큰 설정 후 토큰 키를 복사후에 쉘에서 push 시에 비밀번호 작성 시 붙여넣으면 됩니다.

ssh 키 설정 방법은 아래와 같습니다.

$ssh-keygen                //키 생성
$cat ~/.ssh/id_rsa         //개인키일경우
$cat ~/.ssh/id_rsa.pub     //공캐키일경우

깃허브 접속 - 프로필 - settings에서 ssh 공개키 등록을 하면됩니다.

 

깃허브 push 이름 및 이메일 세팅방법은 아래와 같습니다.

$git config --global user.name "username"
$git config --global user.email "test@email.com"
//--global 옵션은 default로 전체 깃에 적용됩니다. 
//특정 프로젝트에서 이름을 다르게 하려면 --global 옵션을 빼면됩니다.

깃 기본 제어 :
- git add (파일명) : 특정 파일을 스테이징 영역에 추가합니다.
- git add . : 현재 및 하위 디렉토리의 모든 파일을 스테이징 영역에 추가합니다.
- git commit -m "(설명)" : 로컬 리포지터리에 스테이징 영역에 추가된 파일을 올립니다.
- git push origin master : 원격 리포지터리에 로컬리포지터리에 commit된 파일을 올립니다. 
- git pull origin master : 원격 리포지터리에 최근에 업로드된 파일을 로컬 리포지터리에 내려 받습니다.

 

 

원격저장소 확인 및 연결 :

$git remote -v
$git remote add (이름) (url) //원격저장소를 추가합니다.


커밋 수정(amend) : 로컬 저장소의 가장 마지막 커밋을 수정합니다

$git commit --amend -m "설명"
$git commit --amend --no-edit  //--no-edit 옵션의 경우 설명을 수정하지 않을 때 사용합니다.


버전 확인 : git의 버전을 확인합니다.

$git --version


커밋 이력 보기 : git의 커밋 이력을 확인합니다. log를 확인 후 git의 checkout으로 변경을 하거나 reset으로 되돌리기가 가능합니다.

$git log
$git reset HEAD@{index}


커밋 메세지 변경 : 커밋한 커밋 메세지를 수정합니다.

$git commit --amend


놓친 파일 추가 : 아직 push하지 않은 상태의 로컬 저장소에 커밋하나를 빠뜨렸을 때 사용합니다.

$git add [파일명]
$git commit --amend --no-edit


브랜치 목록 확인 :

$git fetch         //커밋된 정보를 업데이트 합니다.
$git branch      //로컬 브랜치 목록을 확인 합니다.
$git branch -a  //원격 브랜치 목록을 확인 합니다.
$git ls-remote origin //원격 브랜치는 해당 명령어로도 확인 가능합니다.


파일 상태 확인 : index(스테이지) 영역에 없을 시 빨간색, index(스테이지) 영역에 있을 경우 초록색. 빨간색일 경우 add를 해줘야 초록색이 됩니다.

$git status


새 브랜치 만들기 :

$git branch (브랜치명)                     // 브랜치를 생성합니다.
$git checkout (브랜치명)                   // 해당 브랜치로 이동합니다.
$git checkout -b (브랜치명)                // 현재 커미에서 브랜치 생성하고 이동합니다.
$git checkout (커밋아이디) -b (브랜치명)    // 해당 커밋으로 이동 후 브랜치를 생성합니다.


마스터 브랜치로 가기 : 

$git checkout master


브랜치 삭제 : 

$git branch -d (브랜치명)             //로컬 저장소에서 브랜치를 삭제합니다.
$git push origin --delete (브랜치명)  //원격 저장소에서 브랜치를 삭제합니다.


메인브랜치명 변경 :

$git branch -m main mster
$git fetch origin
$git branch -u prigin/master master
$git remote set-head origin -a


checkout(시점변경) : 다른 브랜치로 이동 및 시점을 변경합니다.

$git checkout (커밋아이디)    //커밋아이디는 git log로 확인가능합니다.
$git checkout master         //master 브랜치로 돌아옵니다.
$git checkout (브랜치명)     //브랜치명 에적힌 브랜치로 이동합니다.


reset(되돌리기) : 로컬저장소에서 이전 커밋으로 돌리거나, add를 안한 unstage 상태로 만듭니다.

$git reset (커밋아이디)   //해당 커밋으로 되돌립니다.
$git reset HEAD^          // 바로 이전 커밋으로 되돌립니다.
$git reset HEAD^^         // 전전 커밋으로 되돌립니다.
$git reset --hard (커밋아이디)  //해당 커밋아이디의 이후 커밋들을 삭제합니다.
$git reset --hard HEAD^^        // 전전 커밋으로 돌아가면서 이후 커밋들을 삭제합니다.


*reset 후 원격 저장소에는 삭제가 반영되지 않았기 때문에 강제 커밋을 합니다.

$git push origin master --force


revert(커밋수정) : revert는 기준 커밋 이후로 삭제하지 않고, 현재까지의 이력은 남겨두되, 과거 커밋시점을 수정하여 커밋합니다.

$git revert (커밋아이디)


stash : commit을 하지 않고 checkout을 합니다. 

$git stash


*stash를 할 경우 임시 저장소에 수정된 파일이 저장이 되며, 아래의 명령어로 꺼낼 수 있습니다.

$git stash list


*작업하던 브랜치에서 수정했던 내역을 가져올때는 아래의 명령어를 사용합니다.

$git stash apply         //최근 stash를 가져옵니다.
$git stash apply [stash 항목]  // stash 리스트 중 특정 항목에서 가져옵니다.


remove(파일삭제) : 저장소 안의 파일을 삭제합니다.

$git rm (파일명)                //로컬 영역에서 파일을 삭제합니다.
$git rm (파일명) --cached // 원격저장소 파일을 삭제합니다.
$git rm -r (폴더) --cached // 원격저장소 폴더를 삭제합니다.


* --cached는 이미 원격저장소에 반영이 되었을 때 붙이는 옵션입니다. 이후 다시 커밋 후 반영을 하면 원격저장소에 반영이 됩니다.

특정파일 제외 커밋하는 방법 : 

$git ls-files -o -i --exclude-standard

-o : untracked files
-m : modified files
-d : deleted files
-c : cached files
-i : ignored files
--exclude-standard : .gitignore


원격저장소에서 코드 가져오는 방법 : 

$git clone (url) (저장할 폴더 이름)


원격에서 로컬로 코드 가져오는 방법 :

$git fetch origin


브랜치 병합하는 방법 : 특정 브랜치 소스를 마스터브랜치 소스와 병합합니다.

$git chekout master
$git merge (브랜치명)


특정 브랜치를 다른 브랜치 코드로 변경하는 방법 : 

$git checkout (브랜치명)     
$git reset --hard (브랜치명) // 특정 브랜치