생활코딩 git 01 - add, commit, log, diff, reset, revert

|

생활코딩-git 수업을 듣고 중요 내용을 정리합니다.

버전 만들기 (config, add, commit)

  • 버전에 포함될 버전을 만든 사람에 대한 정보를 설정합니다. 이 설정은 ~/.gitconfig 파일에 저장되고 1번만 해주면 됩니다.
git config --global user.name "자신의 닉네임"
git config --global user.email "자신의 이메일"
git add f1.txt # 선택적으로 커밋하기 위해서 commit 전에 add를 꼭해야한다.
git commit # add한 파일을 stage에 올린다.
git commit -am "commit msg" #과거 add 한 적이 있는 자동으로 add, commit 메시지 작성 후 commit
git log # 버전에 대한 정보 확인

변경사항 확인하기 (log, diff)

버전관리를 하는 가장 중요한 효용은 수정된 내용을 추적해서 문제해결을 하는데 이용하기 위해서라고 할 수 있습니다. 이 수업에서는 버전간의 차이점을 확인하는 방법에 대해서 알아봅니다.

git log -p #로그에서 출력되는 버전 간의 차이점을 출력하고 싶을 때
git diff '버전 id'..'버전 id2' # 버전 간의 차이점을 비교할 때
git diff # git add하기 전과 add한 후의 파일 내용을 비교할 때 (마지막 확인!)


과거의 버전으로 돌아가기 (reset, revert)

버전관리의 중요한 효용은 과거의 상태로 돌아갈 수 있다는 점입니다. 여기서는 이 방법에 대해서 알아봅니다. 한가지 주의하실 점은 과거로 돌아가는 작업은 위험한 작업입니다. 여기서는 과거로 돌아가는 방법이 있다는 점만 우선 확인하시고, 실제로 사용할 때는 좀 더 깊게 공부하고 사용하시는 것이 좋습니다.

  • git add 를 취소하는 방법
$ gs
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   f1.txt
	new file:   f2.txt
	new file:   f3.txt
	new file:   test.txt

# test.txt 에 대한 add 명령을 취소한다.
$ git reset test.txt

$ gs
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   f1.txt
	new file:   f2.txt
	new file:   f3.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	test.txt
  • commit 을 취소하는 명령을 배운다.
  • 주의가 필요한 명령이기 때문에 git의 원리를 배운 후에 다시 공부하는게 좋다.
  • git에서는 웬만하면 어떠한 정보도 삭제하지 않는다. git reset 후에도 정보가 남아있다.
  • 원격저장소에 올린 버전은 절대로 리셋을 하면 안된다. reset은 로컬에 있는 버전에 대해서만 진핸행한다.
  • 개발바보들 Git “Back to the Future”
    git log # 버전 id 확인
    git reset --hard `버전id` # 버전 id로 돌아가는 명령
    git revert `버전id` # 버전 id의 커밋을 취소한 내용을 새로운 버전으로 만드는 명령
    

마지막 커밋 메시지를 수정하기

  • 자동으로 텍스트 편집기를 실행시켜서 마지막 커밋 메시지를 열어준다.
  • 여기에 메시지를 수정하고 편집기를 닫으면 편집기는 수정한 메시지로 마지막 커밋을 수정한다.
  • amend : 조금 수정하다.
$ git commit --amend

커밋에 파일 추가하기

  • 커밋하고 나서 새로 만들었거나 다시 수정한 파일을 마지막 커밋에 포함할 수 있다.
  • 파일을 수정하고 git add 명령으로 Staging Area에 넣거나 git rm 명령으로 파일 삭제한다.
  • 그리고 git commit –amend 명령으로 커밋하면 된다.
# edited file-that-i-remember.txt
git add file-that-i-remember.txt
git commit

# realize you forgot a file
git add file-that-i-forgot.txt
git commit --amend --no-edit

# Where --no-edit will keep the same commit message.

vi 단축키 정리

|

vim 학습자료

vi 단축키

  • 자주 쓰는 단축키

삽입

기능
i 커서 위치에 Insert
I 줄 맨 앞에서 Insert
a 커서 다음에 Insert
A 줄 맨 뒤에서 Insert
o 커서 아래로 한 줄 띄우고 Insert
O 커서 위로 한 줄 띄우고 Insert

이동

기능
w 단어 첫 글자 기준으로 다음으로 이동
W 공백 기준으로 다음(단어의 시작)으로 이동
b 단어 첫 글자 기준으로 이전으로 이동
B 공백 기준으로 이전으로 이동
e 단어 마지막 글자 기준으로 다음으로 이동
E 공백 기준으로 다음(단어의 끝)으로 이동
gg 문서 맨 앞으로 이동
G 문서 맨 아래로 이동
^ 문장 맨 앞으로 이동
$ 문장 맨 뒤로 이동

검색

키|기능 —|— /|해당 word를 검색, `n`과 `N`으로 다음/이전 찾기

편집

기능
dd 현재 줄 잘라내기
yy 현재 줄 복사하기
p 붙여넣기
u 실행취소 (Undo)
ctrl + r 재실행 (Redo)
v Visual모드
y 복사
c 잘라내기

저장

기능
:w 저장
:q 닫기
:q! 저장하지 않고 닫기
:wq 저장하고 닫기
:숫자 지정한 줄 번호로 이동
h, j, k, l - 좌,하,상,우 커서이동
i - 현재 커서 위치에 Insert 하기
I - 현재 줄 맨앞에 Insert 하기
a - 현재 커서 다음칸에 Insert 하기
A - 현재 줄 맨뒤에 Insert 하기
O - 윗줄에 Insert 하기
o - 아랫줄에 Insert 하기

w - 단어 첫글자로 이동하기
W - 화이트스페이스 단위로 다음 글자로 이동하기
b - 백워드 방향으로 단어의 첫글자로 이동하기
B- 백워드 방향으로 화이트스페이스 단위로 다음 글자로 이동하기
e - 단어의 마지막 글자로 이동하기
ge - 백워드 방향으로 단어의 마지막 글자로 이동하기
gg - 문서 맨 앞으로 이동
G - 문서 맨끝으로 이동
^ - 문장 맨 앞으로 이동
0 - 라인 맨 앞으로 이동
$ - 문장 맨 뒤로 이동
f문자 - 문자의 위치로 이동 ; 를 누르면 계속 이동
F문자 - 백워드로 문자의 위치로 이동
t문자 - 문자의 앞위치로 이동
T문자 - 백워드방향으로 문자의 앞위치로 이동

/단어 - 문서에서 단어 찾기 n이나 N으로 다음/이전 찾기
* - 현재 단어를 포워드 방향으로 찾기
# - 현재 단어를 백워드 방향으로 찾기

Ctrl + f - 다음 페이지 이동
Ctrl + b - 이전 페이지 이동
Ctrl + u - 페이지절반만큼 다음으로 이동
Ctrl + d - 페이지절반만큼 이전으로 이동
H - 현재 화면의 맨 위라인으로 이동
M - 현재 화면의 중간 라인으로 이동
L - 현재 화면의 마지막 라인으로 이동

]] - 포워드 방향으로 여는 컬리 블레이스( { )로 이동
[[ - 백워드 방향으로 여는 컬리 블레이스( { )로 이동
][ - 포워드 방향으로 닫는 컬리 블레이스( { )로 이동
[] - 백워드 방향으로 닫는 컬리 블레이스( { )로 이동
% - {}()에서 현재 괄호의 짝으로 이동

dd - 현재 줄 잘라내기
dw - 단어 잘라내기
yy - 현재 줄 복사하기
p - 붙혀넣기
r - 현재 글자 교체하기
u - Undo
Ctrl + R : Redo
x - 현재 글자 지우기
X - 앞의 글자 지우기
> - 들여쓰기
< - 내어쓰기
. - 이전 명령어를 다시 실행

v - 비쥬얼모드(비쥬얼 모드에서 커서 이동해서 블럭지정 가능)
y - 복사하기
c - 잘라내기
cw - 단어 잘라내기
J - 다음 라인을 현재 줄의 끝으로 이어 붙힘
~ : 선택 문자 대소문자 변경
Ctrl + A : 숫자를 증가시키기
Ctrl + X : 숫자를 감소시키기

:w - 문서 저장하기
:q - 현재 문서 닫기
:q! - 저장하지 않고 닫기
:wq - 저장하고 닫기
:숫자 - 지정한 라인넘버로 이동

:new - 가로로 분할된 창 열기
:vs - 세로로 분할된 창 열기
Ctrl + w - 분할창 간에 이동하기
:tabnew - 새로운 탭 열기
:gt - 다음 탭으로 이동하기
:gT - 이전 탭으로 이동하기
:e ./ - 현재 탭에 오픈할 파일 탐색하기( ./ 는 현재위치에서 탐색 시작)
:colorscheme 스키마명 - VIM의 칼라스키마를 변경함(blue, desert, evening 등.. 스키마명에서 탭누르면 자동완성됨)

zc - 코드 접기(fold)
zo - 접힌 코드 펼치기
zd - fold 지우기
zR - 접힌 코드 모두 펼치기
zM - 코드 모두 접기
zD - 모든 fold 지우기

:buffers - 현재 Vim에서 여러 파일을 열었을때 버퍼에 있는 목록 확인
:buffer 숫자 - 버퍼 목록에 나온 숫자를 입력하면 해당 파일을 오픈함 ( :buffer 대신 :b 도 가능)
:bnext - 버퍼에 있는 다음 파일로 이동 ( :bn 도 가능)
:bprevious - 버퍼에 있는 이전 파일로 이동 ( :bp 도 가능)
:ball - 버퍼 목록에 있는 파일들이 가로로 분할된 창에 열림
views

강의노트 01. 파이썬 개발환경 세팅 (pyenv, virtualenv, autoenv, git, shell)

|

패스트캠퍼스 컴퓨터공학 입문 수업을 듣고 정리한 내용입니다.

가상환경

  • 윈도우 위에서 우분투를 돌린다던지 맥 위에서 윈도우를 돌리기 위해서 가상환경을 사용한다.
  • 로컬 환경이 달라지면 개발 협업이 어려워진다. 따라서 작업한 파일을 이미지로 만들어서 전달하고, 협업하는 사람은 해당 이미지를 바탕으로 가상환경 위에서 작업한다. (예: DB 작업 시에는 베이그런트를 사용해서 작업)
  • 실제 현업에서는 GUI 우분투가 아닌 CLI 환경의 우분투 서버를 사용해서 서버나 DB작업을 한다.

shell

운영체제(OS)에서 사용자의 명령을 해석하여 대신 실행해주는 프로그램

  • Unix, Linux
    • 종류 : bash(ubuntu, OSX default), sh, zsh
  • Windows
    • 종류 : explorer.exe(for GUI Windows), cmd.exe(for CLI MS-DOS)

환경설정

git 초기 설정

$ brew install git
$ git config --global user.name "username"
$ git config --global user.email "github email address"
$ git config --list

python version management

  • python 버전을 프로젝트 별로 자유롭게 사용하기 위해서 사용

pyenv 설치 및 python 설치

  • Simple Python Version Management: pyenv
  • pyenv lets you easily switch between multiple versions of Python. It’s simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

pyenv 설치

# 설치
$ brew update
$ brew install pyenv

# ~/.bashrc
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc #bash 를 통해서 파일에 입력
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc #재실행
$ exec "$SHELL" # shell 재실행

#~/.zshrc
$ atom ~/.zshrc # atom을 통해서 파일에 아래 내용 입력

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

$ source ~/.zshrc #재실행
$ exec "$SHELL" # shell 재실행

python 3.6.0 설치

$ pyenv version
$ pyenv install --list # 설치 가능한 패키지 목록 (파이썬 버전별 목록)
$ pyenv install 3.6.0 # python 설치
$ pyenv shell 3.6.0 # pyhotn 3.6.0으로 shell 실행 > autoenv를 사용하면 별도 지정이 필요 없음
$ python --version

sane build environment 를 위한 설치

# MacOS
$ xcode-select --install
$ brew install openssl readline xz
# ubuntu
$ apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils

Virtualenv 설치

Virtualenv

  • https://github.com/pyenv/pyenv-virtualenv
  • pyenv-virtualenv is a pyenv plugin that provides features to manage virtualenvs and conda environments for Python on UNIX-like systems.
  • 설치
    • gitclone 사용 : $(pyenv root) 부분을 ./zshrc 에서 입력한 $PYENV_ROOT 으로 변경
    • brew사용 : brew install pyenv-virtualenv
# clone으로 설치
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

# brew로 설치
$ brew install pyenv-virtualenv

# 설치 후 .zshrc 파일에 아래 내용 추가
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

가상환경 추가 및 실행

$ pyenv virtualenv 3.6.0 css-3.6.0 # css-3.6.0 이라는 가상환경을 추가
$ pyenv versions # 가상환경 리스트 확인

  system (set by /Users/Leehyunjoo/.pyenv/version)
  3.6.0
  3.6.0/envs/css-3.6.0
  css-3.6.0 # .pyenv 폴더 안에 존재

# 가상환경 실행 및 종료
$ pyenv activate css-3.6.0
$ pyenv deactivate

autoenv 설치

  • https://github.com/kennethreitz/autoenv
  • Autoenv: Directory-based environments
  • If a directory contains a .env file, it will automatically be executed when you cd into it. This is great for
    • auto-activating virtualenvs
    • project-specific environment variables
# 설치 (Using Homebrew)
$ brew install autoenv
$ echo "source $(brew --prefix autoenv)/activate.sh" >> ~/.zshrc
$ exec "$SHELL" # 재실행
  • autoenv 적용 및 실행

    프로젝트 폴더 내에 .env 파일을 만들어 원하는 가상환경 내용을 입력한다.

# 프로젝트 폴더로 이동 후
$ touch .env
$ vim .env

# ~/.env 에 아래 내용 입력   
$ pyenv activate css-3.6.0
$ cd ./ # 나갔다가 다시 들어오면 virtualenv 환경이 켜짐

requirement.txt

  • 필요한 라이브러리(ipython, django 등)를 설치하여 개발환경 세팅 후 아래 명령을 통해 requirements.txt를 만든다.
$ pip3 list > requirements.txt  
  • requirements.txt가 있다면 다음 명령을 통해 동일한 파이썬 패키지들을 한번에 설치할 수 있다.
$ pip3 install -r requirements.txt  

참고자료 (추가)

정호영님이 추천해주신 안수찬님 글 (pyenv + virtualenv + autoenv 를 통한 Python 개발 환경 구축하기) 에서 자세한 설명을 확인 할 수 있다.


Jupyter Notebook

  • autoenv가 켜진 상태에서 jupyter 설치
  • 가상환경 위에서 재설치 필요
$ pip install jupyter
$ pip list

170327_TIL

|

오늘 한 일

  • 생활코딩 git 을 시작했다.
  • 오늘은 패스트캠퍼스 컴퓨터 공학 입문 개강날이었다. shell의 하위 개념이 bash, zsh 라는걸 알았다. terminal 대신 iTerm2를 쓰기 시작했다. agnoster 테마를 많이 사용한다고 해서 설치해보았는데 글자가 깨져서 폰트를 다운받고 해결하느라 시간을 많이 썼다.

내일 할 일 (계획)

  • AskDjango 수업듣기
  • 컴퓨터 공학 입문 강의노트 읽기

170326_TIL

|

오늘 한 일

  • 영어공부 게시판을 django로 다시 만들었다. 글 올리기, 수정, 삭제, 가입, 로그인, 로그아웃, 댓글의 간단한 기능이지만 아직은 만들 때마다 새롭다. 만들었던 기능을 반복하면서 점점 django에 익숙해지는 기분이든다. pythonanywhere로 배포하려고 했는데 기존에 올린 사이트가 있어서 추가하지 못하는 것 같다. heroku를 사용해서 배포하는 방법을 찾아봐야겠다.
  • 생활코딩 MySQL 기초 수업을 다 들었다. django와 mysql을 연동해서 사용하는 방법을 배우고 싶다고 생각했다.
  • 내일부터 패스트캠퍼스 컴퓨터공학 입문 SCHOOL이 시작된다. 수업을 잘 따라갈 수 있으면 좋겠다.

내일 할 일 (계획)