Git / GitHub 사용법
안녕하십니까.. 최근엔 업무가 좀 적어서 여유가 조금 있는 편입니다. 쓰라는 네트워크 글은 안쓰고 파이썬 공부하고,, 자격증 공부하고,, 그러다보니 간단한 프로그램 만들던 와중에 git 을 한번 다루는게 좋을 것 같아서 네트워크 글은 안쓰고 이런거 한번 다뤄봅니다.
저도 개발자가 아니다 보니 사실 잘 모릅니다. 공부하면서 작성하는 글이라 부족함이 많으니 양해 부탁드리며, 궁금한점은 저한테 묻지 마시기 바랍니다. 개발 관련해서는 저도 잘 몰라요
1. Git / GitHub 란?
이거 개발자들 많이 쓰는데 이게 뭐길래 많이 쓰는걸까요? 검색해보면 형상관리가 뭐 어쩌고 저쩌고 설명되어있는데 시험치는것도 아니고 간단하게 말하자면 이건 일종의 "버전 관리 시스템" 같은겁니다.
여러분이 문서를 하나 작성했다고 생각해보겠습니다. 이 문서를 보니까, 조금 부족한 부분이 있어서 수정을 했습니다. 원본에다가 바로 작성해도 되겠지만, 만일을 대비해서 다른 버전으로 작성을 했다고 치죠.
또, 보다보니까 수정이 필요하고, 오탈자도 잡아야하고, 제출하려고 했는데 컨펌이 안되서 또 수정하고.. 또 바뀐 내용이 마음에 안들어서 원래대로 돌리고.. 이런 과정들은 코딩에 있어서는 일상입니다. 파일이 변경될때 마다 백업하고 수정하고를 반복하다 보니, 관리하기가 너무 복잡합니다.
그래서 git 같은 버전관리시스템 을 사용합니다. 이건 시스템이 변경사항을 추적, 감시하고 기록해서 버전을 쉽게 관리할 수 있게 해주는 역할을 수행합니다.
그럼 GitHub 는 뭐야? 같은거 아님??
아닙니다. git 은 내 컴퓨터에 깔아놓은 버전관리시스템이고, GitHub 는 이걸 웹사이트에 업로드해서 협업을 조금 더 용이하게 하거나 관리하는 용도로 쓰는겁니다. 뭐, 일종의 클라우드 저장소 또는 하나의 커뮤니티라고 보셔도 됩니다.
깃허브에는 다양한 프로젝트들이 공유되고 있고, 개인이 만든 프로그램들도 많습니다. 필요에 따라서 쓸만한 프로그램을 찾기도 좋습니다. 개발자들은 깃허브에 개인 프로젝트들을 올리면서 포트폴리오가 되기도 하고, 다른 사람의 코드들을 보면서 공부도 하고, 다른 사람의 코드에 기여하거나 내 코드의 부족한 부분을 지적받기도 하면서 코드를 개선할 수 있습니다.
실제로 유명한 서비스들이 깃허브에 올라와있고, 오픈소스로 확인도 가능하고 개발과정을 지켜보는것도 꽤 재밌습니다.
2. 용어 및 동작
자 이제 사용법을 알아보기 이전에, git 에서 쓰이는 용어들에 대해 정리해보겠습니다. 이 역시 처음 접한다면 생소할 수 있으나 우리는 이걸 사용할줄만 알면 되긴 하니까 간단하게 개념만 짚어봅시다.
파일의 버전을 만드는 행위을 commit (커밋) 이라고 합니다. commit 을 위해서는 2단계를 거쳐야합니다.
- 내 컴퓨터 작업 폴더에서, 임시저장소(Staging Area) 로 파일을 추가(Staging)할 필요가 있습니다. (Add)
- 임시저장소(Staging Area) 에서, 저장소(Repository) 로 파일을 commit(저장) 합니다.
아니, 그냥 저장하면되는거 아닌가? 왜 스테이징 영역에 임시저장까지 하는 귀찮은 행위를 한번 더 해줘야하나요?
뭐 귀찮은 행위라고 볼수도 있겠지만, 확실하게 하자는 의미가 더 크지 않나 싶네요. 수정사항을 확인하고, 선택적으로 반영하거나 취소할 수 있게 하자는 의미가 있습니다. 즉, 우리는 파일버전을 위해서 Staging, Commit 이라는 행위를 반복적으로 수행하게 되겠죠.
자, 그 외에 하나만 더 알아봅시다. Branch (브랜치) 입니다. 뜬금없이 이게 뭐냐? 이건 일종의 Copy (복사본)입니다.
우리는 버전을 만들고 관리하는게 목적입니다. 내가 코드를 작성하다가, 어떤 기능을 구현하고 싶어요. 물론 그냥 개발해도 되겠지만, 이게 정상적으로 동작할지, 이후에 개발하다가 없어질지, 다른 기능과 충돌이 발생할지 모르잖아요? 그래서 일종의 복사본을 만드는겁니다.
그렇게 복사본으로 개발을 진행하다가, 정상적으로 잘 된 것 같아요. 그러면 원본과 합쳐서 사용할 수 있는겁니다. 이 과정에서, 분기점을 만드는 행위를 Branch 라고 하고, 통합하는 과정을 Merge 라고 하는겁니다.
이러한 과정은 여러명이 개발에 참여할 때, 여러 분기점을 만들고 각자 개발하다가 통합하는 형식으로 활용이 가능하겠습니다.
자, 여기까지가 git 의 핵심적인 동작방식입니다. 사실 파일 관점에서 상태가 어떻게 변하고~ 저쩌고 하면 또 말이 길어지는데, 그거 몰라도 사용하는데 별 지장 없지 않나 싶습니다.
3. Git / GitHub 설치 및 사용법
Windows 기준으로 작성되었습니다. macOS 에서는 Homebrew나 다른것도 좀 설치해야 하는걸로 아는데, 안써서 잘 모르겠습니다.
운영 체제에 맞는 파일로 설치합시다. Next 겁나 누르면 알아서 설치될겁니다. 옵션 보고 선택해서 설치하실 분이라면, 이거 안읽어도 되는분입니다. 넘어가겠습니다.
GitHub도 가입합니다.
Git 초기설정
우선, 초기설정이 필요합니다. Window에서 아무 폴더나 우클릭하셔서, "Open Git Bash here" 클릭하시면 시꺼먼 창 하나 나옵니다.
cmd 에서도 git 사용이 가능하니까 어디서 하시든 큰 상관은 없습니다.
$ git config --global user.name "NAME"
$ git config --global user.email "email@example.com"
위 명령어는 사용자 이름과 이메일 주소를 설정합니다. git 이 커밋할때마다 위 정보를 사용하기 때문에, GitHub 에 가입하셨다면 해당 정보를 입력해주시면 되겠습니다.
프로젝트별로 다른 이름과 메일 주소를 사용하고 싶다면 global 옵션을 빼고 설정하시면 되겠습니다만, 그렇게 사용하실 분이라면 이거 안봐도 되는 분입니다.
$ git config --list
$ git config user.name
$ git config user.email
설정한 이름과 이메일은 위 명령어로 확인가능합니다.
Repository 생성
깃허브에 올릴거니깐 깃허브에 리포지토리를 생성할겁니다. 이경우 깃허브가 원격 저장소가 되는겁니다.
왼쪽에 대놓고 초록색으로 New 적혀있습니다. 눌러주면, 아래와 같은 창이 뜹니다.
이름과 설명을 되도록이면 영문으로 작성합시다. 띄어쓰기를 쓰면 알아서 "-" 로 대체됩니다.
ex) Test Repo > Test-Repo
그리고 생성하면, 뭐가 쏼라쏼라 적혀있는 페이지로 넘어갑니다.
다른건 신경쓸거 없고, HTTPS 보시면 뭔 링크하나 생겼습니다. 요거만 복사해줍시다.
GitHub 에 프로젝트 올리기
이제 내 컴퓨터의 작업폴더로 갑니다. 저는 간단한 웹 페이지를 만들었습니다. 그리고, 우클릭해서 git bash 를 열어주겠습니다.
$ echo "# TestingRepo" >> README.md
$ git init
$ git add README.md
$ git commit -m "first commit"
$ git branch -M main
$ git remote add origin https://github.com/daengsik/TestingRepo.git
$ git push -u origin main
Bash 에 아까 깃허브 리포지토리에서 설명한 커맨드를 다 입력하시면 됩니다. 다만 이게 뭔지는 알고 입력해야되니까, 설명드려보겠습니다.
$ echo "# TestingRepo" >> README.md
README.md 파일을 생성합니다. 내용은 "# TestingRepo" 입니다. 깃허브에서 가장 먼저 보여지는, 내 프로젝트에 대한 설명들을 기입합니다. 이 파일은 마크다운 문법을 사용합니다. 이쁘게 꾸미고 싶으면 마크다운 문법을 좀 공부하셔야됩니다.
$ git init
git 저장소를 초기화합니다. 해당 디렉토리에 .git 이라는 숨겨진 폴더가 생성되며, 이 폴더를 git 으로 감시하겠다 라는 의미가 됩니다.
$ git add [파일명]
$ git add .
아까 생성한 README.md 파일을 Add 합니다. 위에서 설명드렸던, 스테이징 영역에 스테이징 하는 과정입니다. 파일명을 직접 입력하지 않고 점(.) 을 찍으면 모든 파일을 스테이징하겠다. 라는 의미가 됩니다.
$ git commit -m "first commit"
스테이징 영역에 추가된 변경사항을 커밋합니다. -m 옵션은 커밋 메시지를 남기겠다는 옵션입니다. 무슨 의도로 커밋했는지를 파악하려면 사용하심이 좋겠죠.
$ git branch -M main
브랜치를 생성합니다. -M 옵션이 브랜치를 만드는 옵션이며, 뒤의 main 은 브랜치의 이름입니다. main 또는 master 를 기본 브랜치로 사용하는게 일반적입니다.
$ git remote add origin https://github.com/daengsik/TestingRepo.git
원격 저장소(깃허브) 를 추가합니다. 여기에는 만드신 리포지토리의 url 을 기입하시면 되고, origin 은 이 원격 리포지토리의 별칭입니다. 필요에따라 수정하여 사용하시면 됩니다.
$ push -u origin main
내 main 브랜치를, origin(원격 저장소)에 푸쉬하고 연결합니다. 즉, 내 파일을 깃허브에 올리고, 깃허브 브랜치와 내 브랜치를 연결합니다. 이로써 내 파일이 깃허브에 올라갑니다.
자, 이제 다시 내 컴퓨터(로컬) 에서 작업을 수행하다가, 변경사항이 발생하면 git add, git commit, git push 를 함으로써 변경사항이 깃허브에 계속 반영될 수 있겠죠.
이외에도 깃허브에서 코드를 수정하고 로컬로 가져온다거나, 커밋 이력을 확인하고 되돌린다거나, 마지막 커밋을 취소하거나 하면서 버전관리가 가능합니다. 처음 사용할때는 굉장히 어색한데, 적응만 된다면 굉장히 유용하게 사용이 가능합니다. 핵심 기능과 커맨드는 아래에 정리했으니 하나씩 사용해보시면서 익숙해지시면 개발에 많은 도움이 되리라 생각합니다.
4. 커맨드 및 주요기능
init | 새로운 git 저장소를 초기화 |
clone | 원격 저장소에서 프로젝트를 가져옴 |
add | 변경된 파일을 스테이징 영역에 추가 |
commit | 스테이징 영역에 있는 변경사항을 커밋 |
status | 작업 디렉토리와 스테이징 영역의 상태 확인 |
log | 커밋 이력을 확인 |
branch | 브랜치 목록을 확인하거나 생성 |
checkout (or switch) | 다른 브랜치로 이동하거나 특정 커밋 상태로 이동 |
merge | 현재 브랜치에 다른 브랜치 변경사항을 반영 |
push | 로컬 저장소의 변경사항을 원격 저장소에 업로드 |
pull | 원격 저장소에서 변경사항을 가져와 현재 브랜치에 병합 |
fetch | 원격 저장소에서 변경사항을 가져오지만 로컬에 반영하지는 않음 |
remote | 원격 저장소를 관리하거나 새로운 저장소를 추가함 |
reset | 지정한 커밋으로 브랜치를 이동하고, 해당 커밋 이후의 변경사항을 삭제함 |
revert | 특정 커밋 이후의 변경을 취소하는 새로운 커밋을 생성함 |
help | 명령어 확인 |