Git, GitHub 간단 사용법

Git Bash

Git 설명에 앞서 git bash 및 간단한 리눅스 명령어를 익혀봅시다. 구글에서 자료를 찾으면 대부분의 터미널 명령어가 Bash 기준으로 나오기 때문에 Windows를 사용하는 분들은 기본프로그램인 cmd 대신에 Git bash를 권장합니다. 리눅스나 맥을 쓰시는 분들은 그냥 bash를 사용하시면 됩니다. Git bash는 git을 설치할 때 옵션으로 설치할 수 있습니다. 

윈도우 키를 누른 후 검색바에 git bash를 입력하여 프로그램을 실행합니다.

흔히 말하는 도스창 비슷한 것이 나오는데, 도스창은 바르지 못한 표현이고 콘솔(console), 터미널(terminal)이 바른 표현입니다. Linux나 Mac에서는 쉘(shell)이라고도 부릅니다. Bash는 Linux 쉘인데, git bash는 윈도우에서 bash 쉘의 일부 기능을 사용하게 해줍니다.

Git bash를 실행하면

[email protected] MINGW64 ~
$ 

를 볼 수 있는데, 

IEUser[사용자 이름]@[at]IE11WIN10[컴퓨터 이름] MINGW64[bash이름] ~[현재위치]
$ 

로 이해하시면 됩니다.MINGW64는 현재 실행중인 bash 프로그램 이름이고, $는 입력대기를 나타냅니다. 현재 폴더 위치가 ~로 되어있는데, 이것은해당 컴퓨터 사용자의 기본 폴더 위치로, 윈도우 사용자는 c:/Users/[사용자 이름] 와 같습니다.

Bash 명령어

cd [폴더이름]
해당 디렉토리(폴더)로 이동합니다.

$ cd documents 현재폴더의 하위폴더인 documents 폴더로 이동
$ cd /c/workspace 절대경로 /c/workspace 로 이동
$ cd .. 상위 폴더로 이동 
mkdir [폴더이름]
디렉토리(폴더)를 생성합니다.
$ mkdir workspace 현재폴더에 workspace 폴더를 생성
touch [파일이름]
빈 파일을 생성합니다.
$ touch index.js 현재폴더에 index.js 파일을 생성

ls
현재 디렉토리 안에 있는 파일및 폴더들을 보여줍니다.

$ ls

c:\workspace\myapp 폴더를 만들고 app.js를 생성해 봅시다.

처음에는 '탐색기쓰면 되지 이걸 왜하나'하겠지만.. 쓰다보면 이게 훨씬 빠릅니다. git, node를 쓰기 위해선 몇몇 명령어는 꼭 터미널에서 입력해야하는 것들도 있구요. 익숙해지면 탐색기(windows), finder(mac)는 path가 복잡한 폴더 복사할때, 여러파일 중에 일부만 선택해서 지우거나 복사해야 하는 경우를 제외하고는 거의 쓸 일이 없어집니다. 위에 적힌 것들 말고도 유용한 명령어가 많으니 따로 검색해서 공부합시다.

Git 사용법

이제 본격적으로 git을 공부해 봅시다.

Git 사용자 등록

git을 사용하기 위해서는 user.email과 user.name을 등록해야 합니다. 아래 두개의 명령어는 git을 설치하고 한번만 해주시면 됩니다.

$ git config --global user.email "[이메일주소]" email을 등록
$ git config --global user.name "[이름]" name을 등록

Git 저장소 생성 및 commit 생성

저장소를 생성하고, 저장할 파일을 선택한 다음, commit을 만들었습니다. 그리고 commit 리스트를 출력하였습니다.

각각의 명령어를 살펴봅시다.

$ git init 해당 폴더에 git을 사용할 것을 알립니다.

git init을 입력하면 master branch가 생성되고 git bash 현재 폴더 명에 branch 이름(master)이 추가됩니다.

(master)가 보인다면(혹은 다른 branch 이름이 보인다면) 해당 폴더는 git 저장소가 설정된 폴더임을 알 수 있습니다.

실제로 일어나는 일은 .git이라는 숨김 폴더가 해당 폴더에 생성되고 git파일들이 등록됩니다. 이 .git 폴더는 절대 건드리는 일이 없도록 합시다.

$ git add . 현재 폴더의 파일들과 하위 폴더의 파일 모두를 저장할 대상으로 지정합니다.

git add가 명령어 이고, .이 옵션입니다. . 대신 -A를 사용해도 동일합니다. 혹은 각각의 파일이름을 하나하나 지정할 수도 있습니다.

$ git commit -m "[메세지]" commit 을 생성합니다.

commit이 세이브라고 보시면 됩니다. -m은 저장과 동시에 메세지를 남긴다는 옵션이고, 사실 말이 옵션이지 필수입니다. "" 안에 메세지를 입력하시면 됩니다.

$ git log --oneline 현재 저장된 commit list를 보여줍니다

git log뒤에 --oneline은 한 commit을 요약해서 한줄에 보여주는 옵션입니다. 위 예제(스크린샷)에서 f159c55 는 commit id의 처음 7자리입니다. 이 7자리만으로도 명령을 수행할 수 있습니다.

이전 commit으로 되돌아가기

현재 app.js파일이 commit되어 있는데, 새로운 파일(text.txt)을 등록했다가 다시 되돌려 보겠습니다.

53fb38e가 등록되었습니다.

다시 f159c55로 돌아가 봅시다.

처음 ls에서는 app.js와 text.txt가 있었는데, git reset을 한 다음에는 다시 app.js만 있는 것을 알 수 있습니다.

단순히 파일의 생성과 삭제만 관리하는 것이 아니라 실제로는 파일 내용까지 commit에 저장되었다가 reset을 하면 그때의 파일 상태로 돌아갑니다.

$ git reset --hard [commit id] 해당 commit으로 돌아갑니다.

git reset의 option은 --hard, --soft가 있는데 --hard는 commit당시의 상태로 완전히 되돌리고, --soft는 git commit만 취소하고 파일들은 현재상태를 유지합니다. 즉 위 예제에서 --soft를 쓰고 git log를 하면 53fb38e은 보이지 않지만 실제 text.txt는 사라지지 않습니다. 보통 commit을 취소하거나 마지막 commit들을 취소한 후 하나의 commit으로 만들때 사용됩니다.

간단하게 commit으로 폴더를 저장하고 불러오는 방법을 익혀 보았는데, 이는 git의 기본 기능일 뿐입니다. branch를 만들어서 코드를 관리하고 협업을 할 수 있는데, 이 부분은 다루지 않겠습니다. 찾아보고 공부해 주세요.

GitHub

컴퓨터에 저장한 코드를 GitHub을 통해서 온라인에 저장해 봅시다.

온라인 저장소 만들기

http://github.com으로 가서 온라인 저장소를 만들어 봅시다.

우측 상단의 +아이콘을클릭한 후 New Repository를 눌러줍니다.(Repository는 '저장소'라는 뜻입니다. 종종 repo라고 불리기도 합니다.)

  • Repository Name 저장소 이름을 입력합니다. 한 유저 계정안에서 중복될 수 없으며 URL주소로 사용되기 때문에 URL주소로서 유요한 문자만 사용가능합니다.
  • Description 저장소에 대한 간략한 설명을 적는 곳인데 안적어도 됩니다.
  • Public 저장소를 공개로 설정합니다. 공개설정된 저장소는 누구나 볼 수 있습니다.
  • Private 무료사용자는 비공개로 설정할 수 없습니다.
  • Initialize this repository with a README 저장소를 README 파일과 함께 생성합니다. 일단 체크하지 말고 진행합시다.
  • Add .gitignore .gitignore파일을 생성합니다. 일단 None으로 둡시다.
  • Add a lincense license를 추가합니다. 일단 None으로 둡시다.

Create repository를 누르면 repo가 생성됩니다.

GitHub에 코드 올리기(push)

빈 저장소가 생성되었고 현재 저장소가 없는 경우(...or create a new repository on the command line), 내 컴퓨터에 있는 저장소를 github에 올리고 싶은 경우 (..or push an existing repository from the command line), 다른 저장소를 불러 오고 싶은 경우(..or import code from another repository)에 대한 상세한 설명이 나옵니다.

우리는 현재 컴퓨터에 git이 있고, 이 git저장소를 github에 올릴려고 하는 상황입니다.

..or push an existing repository from the command line 에 있는 코드를 복사해서 git bash에 붙여넣기 하면 됩니다.

git bash의 붙여넣기 단축키는 ctrl+v가 아니라 shift+ insert 입니다.

각각 명령어를 살펴봅시다.

$ git remote add origin [git 온라인 저장소 주소] origin에 온라인(remote) 저장소 주소를 등록(add)합니다.
$ git push -u origin master origin에 master branch를 업로드합니다.

git에서 push는 온라인 저장소에 업로드하는 것을 뜻합니다.(온라인 저장소에서 코드를 다운로드 하는 것은 pull이라고 합니다.)

-u는 upstream을 설정하는 것인데 지금은 몰라도 됩니다. 심지어 입력하지 않아도 잘 됩니다.


git 버전에 따라 github에 로그인하는 창이 뜰 수도 있고, git bash화면에 아이디와 비밀번호를 입력받는 커서가 나타날수도 있는데, 어쨌든 입력해 주면 됩니다.

push가 성공한 화면입니다.

GitHub에서 저장소 내려받기(clone)

내 저장소를 완전히 새로 내려받고 싶은 경우 혹은 남의 github 코드를 내 컴퓨터에 다운받아서 실행해보고 싶은 경우에 사용되며 git과 github을 알아야 하는 가장 큰 이유라고 생각합니다.

다시 github page로 돌아가면 push한 파일들이 웹사이트에 표시되는 것을 알 수 있습니다.

이 저장소가 내 컴퓨터에 업다고 치고, 이 저장소를 내려받는 방법을 알아봅시다. 저장소에 Clone or download라는 버튼을 눌러줍니다.

Download ZIP을 눌러서 압축파일로 다운 받는 것도 하나의 방법인데, 우리는 command line을 이용해서 받겠습니다.

Clone with HTTPS 밑에 보이는 주소를 이용할테니 클립보드에 복사해 둡시다.

git 저장소가 없는 폴더로 이동합니다. (git bash 폴더 주소 오른쪽에 (master)가 없는 폴더가 git이 설정되어 있지 않은 폴더입니다.)

$ git clone "[git 온라인 저장소 주소]" 온라인 저장소에서 코드를 받아옵니다.

clone은 온라인 저장소를 local 컴퓨터에 저장하는 명령어 입니다. clone을 하고 나면 저장소 이름으로 하위폴더가 생성되고 그 폴더 안이 복사된 저장소입니다.

저장소 안에 들어가면 폴더 주소 오른쪽에 branch 이름(master)이 표시되는 것을 알 수 있고

git log --oneline를 입력하면 commit이 있는 것을 볼 수 있습니다.

이 포스트에서 설명하는 내용은 git과 github의 아주 기초적인 내용입니다. 알면 알 수록 유용한 프로그램이니 반드시 더 공부합시다.

댓글

김정훈 2016.12.02
안녕하세요! 글 잘 읽고 덕분에 잘 따라하면서 배우고 있습니다 감사합니다!
다름이아니라 여쭤볼것이 있는데  commit 한다는 것이 해당 파일을 제가 저장한다는 말인거죠?  한마디로 commit을 하면 나중에 제가 돌아갈 수 있는 곳을 저장한다는 말인거지요?
I
Ian H 2016.12.09
@김정훈,
맞습니다! commit를 한 상태 그대로 돌아갈 수 있습니다. 마치 게임하다가 저장하는 것 처럼요.
염용철 2017.02.13
안녕하세요 감사히 mean 스택 따라하면서 배울려고하는데 에러가생겨서... 질문드려요 $ git add . warning: LF will be replaced by CRLF in AppData/Local/Google/Chrome/User Data/Default/Session Storage/LOG. The file will have its original line endings in your working directory. error: open("AppData/Local/Packages/microsoft.windowscommunicationsapps_8wekyb3d8bbwe/LocalState/LiveComm/abfbdc0dd685fbb0/120712-0049/DBStore/LogFiles/edb.log"): Permission denied error: unable to index file AppData/Local/Packages/microsoft.windowscommunicationsapps_8wekyb3d8bbwe/LocalState/LiveComm/abfbdc0dd685fbb0/120712-0049/DBStore/LogFiles/edb.log fatal: updating files failed   퍼미션 거부당했는데  chmod 777 . 으로 해도 안되는데 뭐가문제일까요....
I
Ian H 2017.02.17
@염용철,
구글링을 해봐도 이런에러는 나오지가 않는데... 컴퓨터에 다른 계정을 만드셔서 한번 해보세요.
댓글쓰기

이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기

UP