Index




 What is git ?


 버전 관리 시스템(vcs)중 하나 이며, 가장 널리 사용 되고 있다. (리누스 토발즈 만세)
GIT에 대한 사전적 정의와 유례 정도는 여기로 들어가서 정독하는 것도 권장.

이 강의 노트를 보고 있는 여러분 중에선 자신의 모든 소스코드나 프로젝트를 웹 하드에서 관리 하는 습관을 가진 사람이 있을지 모른다.
본인은 몰랐겠지만 은연중에 버전 관리를 하고 있었다!


대표적인 버전 관리 예 (a.k.a Web Hard)

Ok, 근데 git을 왜 배워야할까?


ex1 소프트웨어 엔지니어의 포트폴리오 작성 요령중...

가능하면 GitHub이나 BitBucket 같은 Git 호스팅 서비스에 올려두자.
요즘은 SVN이든 Git이든 VCS를 사용하지 않는 업체를 찾기 어려울 정도이다.
혹시 VCS를 전혀 사용하지 않는 개발 업체가 있다면, 입사를 다시 한번 고민해보라고 진지하게 말하고 싶다.
입사 지원자에게 GitHub 계정 링크를 알려달라는 곳이 해외는 물론 국내에도 꽤 있다.
가능하면 포트폴리오를 앞서 말한 두 서비스 중 하나를 택해서 올려두는 게 좋다.
개인적으로는 GitHub를 추천하는데, 사용자가 더 많아서 문제가 생겼을 때 도움을 구하기 쉽기 때문이다.

원본(img) : 우리가 Git을 알아야하는 이유1

ex2 구글 애플 개발자가 기여한 '프론트엔드 개발자 인터뷰 질문' 중...

'프론트엔드 개발자 인터뷰 질문'은 깃허브에 올라온 인터뷰 관련 프로젝트에서 가장 인기가 높습니다.
(...생략...)
프론트엔드 개발자에 대한 질문은 아래와 같습니다.

•일반 부문
어떤 버전 컨트롤 시스템을 잘 알고 있습니까? 

img : 우리가 Git을 알아야하는 이유2

ex3 깃 허브 나무위키 내용 중...

한국을 포함한 전세계 IT 업계에서는 프로그래머 면접에서 GitHub 계정이 일종의 포트폴리오
역할을 할 수 있기 때문에...
입사지원서에 GitHub 계정/url을 요구하는 곳도 있고 점점 늘어나는 추세다.

img : 우리가 Git을 알아야하는 이유3

그 외의 자료들


img : 우리가 Git을 알아야하는 이유4
img : 우리가 Git을 알아야하는 이유5

p.s. 보안적 이유  ransomware

원격 저장소에서 버전관리 안하고 있다가 랜섬웨어로 나의 피같은 소스코드가 있는 하드드라이브가 돌덩이가 되었다? SHIIIIIT!

이번 강의에서는 어떤 OS에서 어떤 프로젝트를 진행하더라도 git을 사용할 수 있도록 command line interface(CLI)에서 사용하는 명령어 위주로 git을 배워보겠다.



Installation

For Windows User

아래 링크에 들어간다.

https://git-scm.com/downloads


Windows 버전을 설치하자.


설치 과정 중 나오는 모든 Next를 눌러준다.

도중에 설정한 모든 내용은 후에 바꾸기 가능 Don't Worry


Installation

For Linux User based on Debian

서버에 올라와 있는 최신 version의 어플리케이션을 받아온다.

sudo apt-get update
sudo apt-get upgrade

업데이트가 끝나면 git을 설치해준다.

sudo apt-get install git

So simple...



Learn basic command set

여기서는 심각하게 기본적인 명령어만 다룬다.
advanced user는 걍 뒤로가기해서 시간 아끼는거 추천.

git init


현재 경로에서 부터 버전관리를 시작하기 위한 로컬 저장소 생성

ls -al 명령어로 .git 폴더(디렉터리)를 확인 할 수 있다.



git clone


예컨데, 여러분이 앞으로 절대적으로 가장 많이 쓸 명령어

원격 저장소에서 폴더(디렉터리) 통째로 copy 해온다.

사용은 너무나도 간단하다.

usage : git clone [원격저장소의 주소]



git status


변경된 이력의 파일에 대한 정보를 띄워준다.

무엇을 어떻게 인덱싱 해야하는지 친절히 알려준다.

usage : git status



git add


work stage에 있는 파일을 index에 기록하는 작업

index(인덱스)에 대한 설명이 너모너모 잘 되있는 곳 : here

간단히 말하자면, git commit전에 반드시 git add로 indexing해야 한다.

usage : git add . git add * git add README.md git add [FILE_NAME]



git commit


index에 기록된 파일을 최종 수정본으로 등록하는 작업

개인 작업 및 협업을 할 때 "~부분을 수정했다" 같은 짧은 노트를 남기면서 등록하는 개념,
수정된 부분에 대한 노트파일(ex .txt)을 따로 만들지 않아도 되는 아주 혜자 명령어.

usage : git commit -m "my first commit"

git add명령어로 indexing된 파일 모두 commit된다.


첫 commit시 아래와 같은 오류를 볼 수 있다.

누군지 알려달라고 하는데, --global 옵션은 만약 모든 원격 저장소에서 같은 이름(id)으로 commit을 한다면 사용해도 좋지만, 아닐 경우 git config user.email "anonymous@mail.com"과 같이 입력할 것!



git reset


이 명령어를 배우는 이유는 git add를 잘못하였을 경우

git reset으로 git add로 indexing된 파일을 work stage 단계로 돌이킬 수 있음.

click! → 이미지를 열어 확실히 이해하기!

usage : git reset git reset README.md



git log


그 동안 어떤 파일을 commit하였는지 log를 알려주는 명령어

usage : git log -p

-p 옵션은 git diff라는 명령어의 수고로움 까지 덜어준다. GOOD!



git pull


원격 저장소와 로컬저장소를 동기화 시켜주는 데 있어 가장 중요한 명령어

원격 저장소의 최신 버전을 현재 로컬 저장소에 적용한다.

단, 아래에서 더 심도있게 다루겠지만 최종 push된 버전의 파일에 대해 사용자가 로컬에서 별도의 버전(version)으로 commit하고 pull request 시 충돌(conflict)이 발생한다.

usage : git pull



git push


로컬에서 커밋 한 파일의 버전을 원격저장소로 업데이트 할때 사용

위의 git pull에 대해 충돌이 일어나지 않는 경우에 git push로 remote의 버전 업데이트가 가능하다.

usage : git push

난 충돌이 뭔지도 모르겠고, 충돌을 경험하기 싫다면 git pullgit push



git fetch


쓰임새는 git pull과 같지만, 로컬에서 사용자의 파일에 대한 수정을 존중(?)해준다.

예를 들자면, 로컬 저장소에서 원격 저장소와 같은 버전의 파일을 수정하고 git pull 명령어를 입력하면 다음과 같은 error를 볼 수 있다.

반면 git fetch 명령어를 사용할 경우 Smooth하게 넘어가준다.

버전만 맞을 경우 사용자가 필요에 의해 수정을 했다라고 판단하기 때문이다.

하지만 이런 유연함 때문에 오히려 초보자들에게는 '독' 이 될 수도 있다.

usage : git fetch



위의 명령어 외에도 수 많은 명령어가 있다.

아주 기초가 되는 기본적인 명령어는 다 소개했으니 심화 학습을 원한다면 공식 git-document 사이트에서 명령어를 직접 실습해보면서 공부하는 것을 추천한다.



Making your own github repository 


우선 왜 깃헙을 써야할까?



직접 github repository를 만들어보자. start a project 버튼 누르기


여러분이 매일 프로젝트(혹은 과제)를 하면서 Download ZIP 버튼만 눌렀던 그 사이트가 맞음.


• github에서는 기본적으로 다른 사람과 프로젝트 이름이 겹쳐도 무방하다.

 → Owner 단위로 관리하기 때문.


• Initialize this repository with a README 라는 check box가 있는데 check를 하고 Create 버튼을 누른다.


• README.md 파일은 저장소에 대한 설명을 적어 놓는 markdown 이란 파일이다.

  markdown 파일의 작성법은 여기에서 확인할 수 있다. 설명이 너무 잘되어 있다.



Version control at local


본격적으로 버전 관리를 git bash를 이용해 실습해본다.


• Initialize local git repository

git-scm사이트에서 파일을 다운받고 나면 버전 관리할 폴더 내에서 우클릭 하면 아래와 같이 'git bash here'이란 버튼을 볼 수 있다.


누르게 되면 다음과 같은 화면이 뜨는데, git init을 입력한다.

.git이란 숨겨진 폴더가 생성되며, 앞으로 여러분의 모든 커밋(버전에 대한 기록)은 이 폴더에 저장된다.


버전관리할 파일을 만들어본다.

touch ex1.txt touch는 리눅스 명령어로 CLI환경에서 용량 0의 파일을 만들 때 사용한다.

윈도우에서는 마우스 우클릭하고 새로 만들기를 사용하자.


만들어진 파일(txt든 뭐든)을 편집하고 Ctrl + s로 저장한다.

저장하고 git status 명령어를 입력하면 현재 work stage에 변경 된 파일이 있는지 확인하고 알려준다.


• Add file to index

git add 명령어로 변경 된 파일에 대하여 index에 기록해보자.
현재 폴더내에서 모든 파일을 indexing 할 때는 git add * 명령어를 사용한다.

대부분의 git user는 git add *을 사용한다. (파일명 별로 추가하는건 귀찮으니깐...)


• Final stage : Commit

파일은 indexing되면 user로부터 최종 확인을 위해 간략한 설명(commit)을 기다린다.

git commit이 성공하게 되면 해당 파일의 버전에 대한 기록이 고유한 주소를 가진 파일로 .git에 기록된다.

git commit -m "남기고 싶은 메세지"을 입력하자.

error가 뜨지 않았다면, 여러분은 성공적으로 파일의 첫 버전을 local에 등록(기록)하였다.


• Confirm log of version

최종 커밋 후 git log명령어를 통해 commit 내용을 확인할 수 있다.

상하 방향키로 스크롤을 조종할 수 있다.
space_bar를 누르면 한 페이지가 넘어가고, q를 누르면 종료된다.


모든 commit의 history를 다 보여주기 때문에 최근의 commit만 보고 싶은 경우 -(숫자) option을 추가해줄 수 있다.

example : git log -2는 가장 최근 2개의 commit 내역을 보여준다.


또한 -p 옵션을 이용하여 상세 history를 볼 수도 있다 : git log -p



Synchronize local with remote


이 강의 노트에 목적인 원격 저장소와 동기화 시키는 방법을 소개한다.


앞에서 만든 github repository에 동기화 시키는 두가지 방법이있다.



두 가지 방법 중 어느 것이 맞고 틀린건 없다. 본인이 편한 방법대로 할 것!


1. Cloning and Push


우선 첫 번째 방법 먼저 살펴본다.


git clone [remote address]명령어를 사용하여 원격 저장소를 복제한다.

  앞에서 생성한 원격 저장소 이름과 똑같은 이름을 가진 폴더가 생성된다.

  git init때 와 마찬가지로 .git 이란 폴더 역시 생성된다.


• 원격 저장소에서 복제해온 것이기 때문에 remote 주소를 따로 입력할 필요가 없다.

  git remote -v를 입력해보자.

  원격 저장소의 push 주소와 fetch 주소가 나온다.


• 버전관리할 파일을 생성 / 편집 / 제거 후 git add명령어로 추가 해준다.


• indexing된 파일을 commit하여 local 저장소에서 버전을 업데이트 한다.

  여기서 아무리 git commit해봐야 원격 저장소는 아직 영향을 받지 않는다. 겁먹지 말자

  만약 commit을 잘못 한 경우 git revert로 commit을 무마시킬 수 있다.

  usage : git revert [commit 주소]
  → git의 매커니즘을 완벽히 이해하고 쓰는 것이 좋다ㅠ


• 이제 local의 최신 버전을 원격으로 push 해준다.

  git push를 입력하자. So simple~


정리 : git clonegit addgit commitgit push


2. Add remote repository address to local repository


두 번째 방법은 약간(?) 난이도가 있는 방법이다.

local에서 버전관리를 하던 workspace에 원격 주소를 추가 해주는 작업에서 초심자들은 온 갖 trouble shooting을 맞이할 수 있다.


• git init으로 초기화가 되어 있는 local 저장소란 가정하에 진행한다.

  우선 원격 저장소 주소를 입력해 주어야 한다.

  git remote add [저장소 닉네임] [github 주소]

  [저장소 닉네임]을 지정하지 않고 remote add를 할 경우 자동으로 'origin'으로 등록된다.

  example : git remote add https://github.com/pulgitmaster/Git_Helper


• git remote -v로 주소가 제대로 입력되었는지 확인해본다.

  잘못 입력된 경우 git remote rm [닉네임]으로 remote 주소를 제거할 수 있다.


• 위와 마찬가지로 생성 / 편집 / 제거 할 파일을 git add부터 git commit까지 해주고

  git push origin master를 입력!  최초 입력 후에는 git push만 해도 된다.


첫 번째 방법과 비슷하면서도 다른 면이 있다.

기존에 하던 버전 관리를 원격으로 까지 확장시킨다는 면에서는 이 방법을 아주 추천한다.


정리 : git init → 버전관리(local) → git remote addgit push origin master



URL reference

여러분에게 도움이 될만한 사이트의 주소