git 사용방법 - commit, log, diff, amend, remove, move, reset, checkout

|

패스트캠퍼스 웹 프로그래밍 수업을 듣고 중요한 내용을 정리했습니다.
개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
이 포스팅에서는 git 사용방법에 대해 설명합니다.


1. setup

git.gitconfig파일에 전역 환경설정 내용을 저장하고 있다.

이 파일은 사용자의 홈 디렉토리에 있으며 사용자와 비밀번호 혹은 소스코 글자색상등을 수정할 수 있다.

1-1. 사용자설정 (User Configuration)

# git에서 사용될 사용자 설정하기
# 사용자 이름으로 설정하면 된다.

git config --global user.name "Park jihye"

# 이메일 주소도 사용자 본인의 것으로 설정하면 된다.
git config --global user.email "~@gmail.com"

# 그리고 우리는 에디터를 vim으로 설정한다.
git config --global core.editor vim

git의 설정사항을 확인하기 위해서는

git config --list

2. git 시작하기

이렇게 사용자 설정을 마치고 나면 git을 시작할 수 있다.

2-1. 내용 생성하기

버전관리를 받고싶은 컨텐츠를 생성

# 홈 디렉토리로 이동
cd ~/

# 저장소 폴더 생성
mkdir git

# 저장소 폴더로 이동
cd git

# 저장소 폴더에 새로운 폴더 만들기
mkdir basic

# 혹은
touch basic
# 이를 통해서 cd가 아닌 바로 해당 폴더로 이동을 할 수 있다.

# 파일 생성하기
touch test01
touch test02
touch test03
touch test04

# 파일 내 내용 추가하기
echo 'hello!' > test01
# hello 라는 문자가 test01 파일에 추가된다.

cat test01
# 저장된 파일내 작성된 글을 보여준다.

2-2. 저장소 생성하고 커밋하기

모든 git저장소는 .git폴더에 저장되어 잇으며 .git폴더는 사용자가 생성한 git폴더안에 있다. .git폴더는 저장소의 환경설정 정보와 저장소의 완벽한 히스토리 정보를 담고있다.

# git 저장소 생성하기
git init

# 모든 파일 저장소로 추가
git add -A

# 파일 하나만 추가하고 싶다면
git add test01

# git 저장소로 커밋하기 (첫번째 리비전 만들기)
git commit -m 'Initial commit'

# 혹은 vim을 이용해서 커밋메시지를 작성해도 된다.
# 다음에 vim에 대해서도 설명하겠다.

#로그 파일 보기
git log

2-3. diff 명령으로 차이점 확인하기

모든 파일에 변경을 가한 뒤, 차이가 생긴 부분들을 한눈에 보고 이를 저장소로 커밋한다.

# 파일 변경하기
echo "hello" > test02
echo "my name is" > test03
echo "Jihye" > test04

# 변경 사항들을 diff명령으로 확인하기
git diff

# 이때 diff명령은 staged 상태가 아닌 파일들만을 보여준다.
# 만약 staged 상태의 파일을 확인하고 싶다면
git diff --staged

2-4. Status, Diff 와 커밋 log

다음 명령들은 현재 상태(status)와 커밋 리스트를 보기 위한 것이다.

# 현재 저장소의 상태를 확인하기
git status

# 상태를 확인한경우 해당 파일의 색이 붉은 색으로 뜬다면
# modified 상태의 파일이기에 git add를 통해 staged 상태로 바꾸어줘야 한다.
# 만약 파일의 색이 초록색으로 뜬다면
# 해당 파일은 정상적으로 git add 되어 staged 상태가 된 것이다.

git status -u
# git status가 단순히 폴더의 상태만을 보여주는 거라면
# git status -u는 폴더 내 구체적인 파일들의 상태를 다 보여준다.

# 마지막 커밋한 내용과의 차이점을 확인하기
git diff

# 커밋한 히스토리 확인하기
git log

# 이때 git log -p는 그동안 내가 남긴 모든 기록을 다 보여준다.
# 즉 git log는 수정한 결과물에 대한 기록만을 보여준다면
# git log -p는 수정한 모든 사항을 다 로그기록으로 남겨 보여준다.

2-5. 커밋 메시지 수정하기

위 예제에서 커밋 메시지가 틀린경우 –amend 파라미터를 이용해 마지막 커밋 메시지를 바꿀 수 있다.

git commit --amend -m "now correct!"

단 이미 지나가버린 커밋에 대해서는 그 부분만 수정은 불가능하다.

만약 이미 한참전에 지나가버린 커밋 메시지를 수정하고 싶다면, 본인이 수정하고 싶은 커밋메시지 이후의 기록을 다른곳에 기록해 놓은 뒤 원하는 부분의 커밋메시지를 수정한 뒤 다시 이어 작성해야 한다.

그러니 반드시 커밋 메시지를 작성할 때 주의하도록 하자!

# 혹은 이전에 만들어 놓은 커밋 메시지에 빠뜨린 파일이 있었다면
# 우선 해당 파일을 git add ~ 하고

git commit --amend

2-6. 파일 삭제하기

rm teat01

2-7. 파일 이동하기

#test01 파일을 test02로 변경(이동)
mv test02 test03

2-8. 파일을 빼내오는 방법

git reset HEAD test02

이는 현재 모든 파일의 상태가 git add를 통해서 staged상태인데,

test02파일을 staged상태에서 modified상태로 변환해주는 것이다.

2-9. 전 단계로 돌아가기

git checkout -- test03

git diff를 통해 확인한 test03 수정사항을 수정하기 전 단계로 돌아가고 싶을 때 사용하는 것이다.

단, checkout의 명령은 조심해야한다

왜냐하면 checkout은 한번 사용하면 다시는 돌아갈 수 없기 때문이다. checkout을 사용한다는 것은 파일을 수정하기 전 단계로 다시 덮어쓴다는 의미이다. 따라서 이후의 수정된 내용은 다 사라지기 때문에, 수정한 내용이 정말 마음에 안들었을 경우에만 사용하도록 한다.

2-10. tag 만들기

git tag -a v1.0 -m 'v1.0이라고 한다'

더 나아가 이미 만들어 놓은 파일에 태그를 붙이고 싶은 경우

git log --oneline
# 이를 통해 얻은 로그번호를 복사하여

git tag -a v0.9 -m 'commit message!'
# 하면 된다

참고로 git log를 좀 더 자세히 보고 싶다면 (우리는 이후에 브랜치를 사용할 것이니까)

git log --oneling --all --graph

git이란 무엇인가?

|

패스트캠퍼스 웹 프로그래밍 수업을 듣고 중요한 내용을 정리했습니다.
개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
이 포스팅에서는 git에 대해 알아보며, git에서 사용하는 주요 용어에 대해서 설명합니다.


Git?

git은 분산형 버전 관리 시스템(DVCS, Distributed version control system)이며 C언어로 구현되었다.

이전 포스팅에서 공부한 바로, 버전 관리 시스템은 사용자가 어떤 파일 집합에 대한 히스토리를 생성하고 관리할 수 있도록 도우며 특정 다른 상태(어느 시점)으로 복귀(revert)할 수 있는 기능을 가지고 있다.

이때 파일 집합은 주로 소스코드들이다.

분산 버전 관리 시스템에서 모든 사용자는 완벽한 복사본을 가지고 있으며(소스코드에 대한 히스토리를 포함) 버전 관리 명령어들을 각 사용자의 로컬에서 실행할 수 있다. 이때 DVCS는 중앙 저장소 사용을 항상 요구하지 않는 장점을 갖는다.

주요용어 정리

Repository - 저장소

저장소는 히스토리, 시간/태그(tag)/분기(Branch)에 따라 다른 버전들을 가지고 있다.

git에서 저장소를 다른곳으로 복사하더라도 다시 완벽한 저장소가 되고, 작업하고 있는 복사본으로 수정본들을 얼마든지 검색할 수 있다.

  • remote repository git으로 관리하던 것을 이전까지는 local에서만 했다면 이제는 누구든지 볼 수 있는 서버 공간에서 사용하는 것

Branch & Tag - 분기와 태그

git 저장서는 모든 분기들과 태그들을 가지고 있다. 분기들 중 하나는 master라고 불리는 기본 분기이다.

사용자는 작업에 필요한 어떤 한 버전의 분기를 이 기본분기로 체크아웃(Checkout)한다. 이것을 작업카피 (Working Copy)라고 한다.

Commit - 커밋

어떤 기록의 단위, 스냅샷, 이러한 스냅샷을 이동할 수 있는 단위

소스 수정사항들은 저장소로 커밋할 수 있다.

이것은 지난 시간까지 추적된 것에 대한 새로운 리비전(Revision)을 만드는 것이다. 각 커밋은 저자와 커밋한 내용(어떻게 수정했는지, 누가 커밋했는지)을 저장한다.

즉, 내가 작업을 하면서 기능상의 의미가 생길때, 기능상의 의미있는 변화가 생길때 주로 남긴다.

Revision - 리비전

소스코드의 버전을 가리킨다.

gitSHA1 ids로 리비전을 구분한다. SHA1 ids는 160비트로 긴 편이고 16지수로 표현된다. 가장 최신버전은 HEAD로 불리는 주소로 표현되며 이전 버전은 HEAD~1으로 계속 그런 방식으로 버전이름을 가리킬 수 있다.

Snapshot - 스냅샷

파일들의 변경사항을 저장하는 순간.

gitcommit하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.

파일이 달라지지 않았으면 git은 성능을 위해서 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. git은 데이터를 스냅샷의 스트림처럼 취급한다.

Stream - 스트림

흐름 데이터 세트 간에서 데이터의 전송이 실행되고 있는 것으로, 문자 형식의 데이터 항목이 연속한 열로 되어 있는 것이다.

Configuration

배열, 배치, 환경상태

Initialize

초기 내용을 설정하는 것

Pointer - 포인터

다른 객체(=단위 1개)를 가리키기 위해 존재하는 자료형

이 안에 든 자료는 문자, 숫자도 아무것도 아니고 그냥 ‘나는 어떤 커밋을 가리키고 있어’라는 의미를 가진다.

vim 사용방법

|

개인적인 연습 내용을 정리한 글입니다.
더 좋은 방법이 있거나, 잘못된 부분이 있으면 편하게 의견 주세요. :)


vim사용법에 대해서 알아본다.

Install

macOS

brew install vim

### https://github.com/Fastcampus-WPS-8th/Tips/blob/master/vim.md

rbenv환경에서 Jekyll 블로그 생성하고 GitHub Pages에 배포하기

|

개인적인 연습 내용을 정리한 글입니다.
이 포스팅에서는 macOS환경에서 rbnv를 사용해 Jekyll블로그를 생성하고,이를 GitHub Pages에 배포하는 방법을 다룹니다.


Jekyll?

Jekyll은 일반적으로 블로그를 만들기 위해 사용하는 정적 사이트 생성기이다.
데이터베이스를 사용하지 않고 git과 같은 버전관리 시스템을 사용해 포스트들을 관리하며, 정적 웹사이트이기 때문에 단순 파일 서빙만으로 블로그를 만들 수 있다.

정적 웹 사이트라는 특징덕에 GitHub에서는 Jekyll블로그를 서빙하기 위한 시스템을 제공하며 무료로 사용가능하다.

또한 포스트(소스)의 형태를 HTML이 아닌 개발자 친화적인 다른 마크업(대부분의 경우 Markdown) 사용할 수 있으며, 데이터베이스를 쓰지 않는다는 점은 역으로 버전관리 시스템을 사용해서 작성한 글 들을 편리하게 관리할 수 있다는 장점을 준다.

데이터베이스를 쓰지 않기 때문에 댓글기능은 타사 서비스를 사용하서나 (disqus) 직접 만들어야 한다.

설치

Jekyll을 로컬환경에서 실행하기 위해서는 특정 버전 이상의 Ruby가 필요하다. macOS에 기본설치된 Ruby는 버전이 낮기때문에, 시스템의 Ruby를 업그레이드하거나 Ruby의 버전관리도구를 사용하는 방법이 있다.
개인적으로는 시스템에 이미 설치된 파이썬이나 루비를 변경하는 것을 선호하지 않기 때문에, 여기서는 Ruby의 버전관리도구 하나인 rbenv를 사용한다.

Homebrew 설치

rbenv를 설치하기 위해 macOS용 패키지 관리자인 Homebrew를 이용한다.

/usr/bin/reby -e "$(surl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install))"
  • Homebrew에 대한 자세한 내용은 공식 페이지에서 확인할 수 있다.
  • 이미 Homebrew가 설치되어 있는 경우 brew update를 이용해 Homebrew를 최신버전으로 업데이트해준다.

이미 설치되어 있던 ruby 삭제

이미 Homebrew를 사용하던 경우, 앞으로 rbenv에서 Ruby의 실행을 관리할 것이므로 기존에 설치된 Ruby를 지워준다.

brew uninstall Ruby

rbenv 설치

brew install rbenv ryby-build

rbenv를 위한 설정을 셸 설정파일에 추가

zsh을 쓰는 경우 ~/.zshrc, 기본 bash를 쓰는 경우 ~/.bash_profile에 작성한다.

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

설정파일을 작성한 후 터미널을 종료하고 새로 열어준다

rbenv를 이용해 ruby설치, 전역에서 사용할 ruby 버전 지정

➜ rbenv install 2.4.1
➜ rbenv global 2.4.1
➜ rbenv versions
  system
* 2.4.1 (set by /Users/lhy/.rbenv/version)

*표가 붙은 부분이 현재 사용하고 있는 Ruby버전을 나타낸다. 나는 초기에 2.4.1버전을 설치했는데 현재는 2.5.1까지도 나와있으니 해당버전으로 깔아도 될듯하다.