170403_TIL

|

오늘 할 일 (계획)

  • 패스트캠퍼스 컴퓨터공학 입문 수업 듣기
  • 강의노트 정리
  • 생활코딩 git branch 수업 듣기
  • AskDjango 수업 듣기

오늘 한 일 (회고)

  • 패스트캠퍼스 컴퓨터공학 입문 수업을 듣고 강의노트를 정리했다.
    • lambda, map, filter, reduce, dictionary
  • AskDjango
    • 장고 form html 꾸미기
    • Message Framework
  • vimtutor 연습

내일 할 일

생활코딩 git 03 - git branch (만들기, checkout, 삭제)

|

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

여기서는 git이 가져온 혁신인 branch를 다룹니다. branch는 가지라는 뜻으로 작업을 분기해서 처리하는 경우에 대한 시적인 표현입니다. git이 가져온 혁신은 그 동안 개념적으로는 존재했지만 실제로는 잘 사용하지 않던 branch를 사용할만한 상태까지 끌어올린 점에 있습니다. 본 수업의 하위에서는 branch에 대해서 다룹니다.

git branch

브랜치의 목록을 볼 때

  • 유저는 git 을 사용하는 순간부터 mater 라는 이름의 branch를 사용하고 있다.
❯ git branch
* master

브랜치 생성

  • 새로 생성한 exp 브랜치는 현재 속해 있는 master 브랜치의 상태를 그대로 복사한다.
  • 브랜치는 아주 가볍고 저장소를 추가적으로 거의 사용하지 않는다.
❯ git branch exp
❯ git branch
  exp
* master # 현재 사용중이 브랜치

브랜치 전환(체크아웃)

  • 전환한 브랜치 exp에서 새로운 파일을 생성하고 add commit 하면 master브랜치에서는 해당 파일이 반영되지 않는다.
  • 브랜치 exp에서 새로운 파일을 생성후 add commit 하면, master브랜치의 finder에서 해당 파일이 사라진다.
❯ git checkout exp
Switched to branch 'exp'
❯ git branch
* exp
  master
  • 브랜치를 생성하고 전환까지 할 때
git checkout -b "생성하고 전환할 브랜치 이름"

❯ git checkout -b "exp2"
Switched to a new branch 'exp2'

브랜치 삭제

브랜치 삭제

git branch -d

❯ git branch -d exp2
Deleted branch exp2 (was db667dd).

병합하지 않은 브랜치를 강제 삭제

git branch -D

❯ git branch -D 'exp3'
Deleted branch exp3 (was db667dd).

생활코딩 git 02 - git의 원리 (gistory, objects, working stage)

|

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

수업소개

본 수업의 하위 수업에서는 지금까지 배운 기능들이 내부적으로는 어떻게 동작하는가를 알아보면서 git의 원리를 살펴보겠습니다. 원리가 중요한 이유를 저는 크게 3가지로 구분해봤습니다.

원리에 대한 궁금증은 인간의 본능이라고 생각합니다. 종종 어떤 원리들은 그것이 원리이기 때문에 어려울 것이라고 오해를 받습니다. 하지만 많은 원리들이 실제로는 어렵지 않습니다. 또 어떤 공부들은 원리를 모르면 공부하는데 10시간이 걸리는데 조금 지나면 잊어버리는 것이 있습니다. 반면에, 1시간동안 원리를 배우면 공부하는데 3시간 밖에 걸리지 않고, 훨씬 오래 기억되기도 합니다. 지금부터 배울 원리는 이런 것입니다. git이 동작하는 원리를 알면 우리도 git과 같은 것을 배울 수 있습니다. git의 명령어만 배우면 단지 git의 사용자가 될 뿐입니다. 하지만 원리를 배우면 우리도 무엇인가를 만드는데 큰 영감을 얻을 수 있습니다. 물론, 이 수업은 필수가 아니기 때문에 어렵게 느껴지신다면 원리를 건너뛰고 공부하시길 권합니다.

gistory

gistory는 git을 분석하기 위한 도구입니다. 명령을 내렸을 때 git의 내부에서는 어떤 일이 일어나는가를 분석하면서 git이 어떻게 동작하는가를 스스로 공부하는데 도움을 드리기 위해서 고안된 도구입니다.

  • .git 에 어떠한 변화가 생기는지를 살펴보면서 git의 원리에 대해서 이해한다.

설치 (mac)

#python3
pip3 install gistory #python3 사용시

objects 파일명의 원리

git은 파일의 내용 기반으로 object 파일의 이름을 만듭니다. 이것 덕분에 git은 매우 효율적으로 중복 데이터를 저장할 수 있습니다. 여기는 그 원리인 sha1 hash에 대해서 알아봅니다.

  • 내용이 같으면 .git에서의 파일 이름(오브젝트)이 같다
  • git은 어떤 파일을 저장할 때 파일 이름이 달라도 파일 내용이 같다면, 같은 오브젝트를 가르킨다.
  • .git/index에서 다른 파일명을 확인할 수 있지만, 내용이 같으면 모두 같은 오브젝트를 가르킨다. (중복의 제거)

git에서 object는 크게 3가지의 형태를 가진다

  • 파일의 내용을 담는 (blob)
  • 디렉토리의 파일명과 내용에 해당되는 블락의 정보 (tree)
  • 커밋정보 (commit)

sha-1

  • sha-1 : 헤쉬 알고리즘을 통과하면 같은 단어는 같은 값(헤쉬값)을 가진다. 참고
  • git은 sha1의 매커니즘을 활용하기 때문에 어떤 파일에 대해서 git add를 하면 git은 (대략적으로) 다음과 같은 과정을 거친다.
    • add 한 파일의 내용 본다.
    • 해당 내용과 부가적인 결과 합해서 압축한다.
    • 압축한 내용을 sha1이라는 방법으로 해쉬를 통과시켜서 해쉬값을 얻는다.
    • 해당 값을 활용하여 디렉토리명과 파일명(오브젝트명)을 만든다.

commit의 원리

commit을 했을 때 내부적으로는 어떤 일이 일어나는가를 알아봅니다.

  • git commit을 진행하면 commit 결과(버전) 은 오브젝트 파일로 저장되고,
    해당 오브젝트에는 상세 commit 파일의 버전과 이름이 링크가 되어 있다.

commit이 가진 주요정보 2가지

  • 이전 커밋이 누구인가 (parent)
  • 커밋이 일어난 시점에 작업 디렉토리의 파일의 이름과, 이름이 담고 있는 내용 사이의 정보 (tree)
    • 각각의 버전마다 다른 tree를 가르킨다. 버전에 적혀있는 tree를 통해서 해당 시점의 프로젝트 상태를 각각 얻을 수 있다. (snapshot)

git status의 원리

  • git status 명령
    • workspace의 파일 내용과
    • index (stage) 파일의 내용과
    • 최신 커밋 오브젝트 사이의 차이를 비교해서 add, commit할게 있는지 없는지를 확인한다.

git workflow

views
views

170402_TIL

|

오늘 할 일 (계획)

  • 영어공부 사이트 Azure 혹은 pythonanywhere로 옮기기, 댓글기능에 Ajax 적용
  • vimtutor 연습하기
  • 생활코딩 git
  • hackerrank, tryhelloworld 알고리즘 문제 풀기
  • AskDjango 수업 듣기

오늘 한 일 (회고)

  • 생활코딩 git 수업을 들었다.
    • 이고잉님이 만드신 gistory를 사용해서 git add, commit이 이루어졌을때 .git 폴더 내에서 생기는 변화를 살펴볼 수 있었다.
    • workspace, index(stage), loca repository의 관계에 대해서 살펴보았다.
  • 코드스쿼드 2017년 하반기 백엔드 언어가 자바라는걸 알게되었다. 인프런에서 정호영님의 장고 수업을 들으면서 하반기에 직접 장고를 배울 수 있을까 기대했는데 자바라니..혼란스럽다ㅠㅠ 파이썬/장고 - 자바/스프링 - 스위프트 셋 중에 무엇을 할지 다시 고민이 시작되었구나.
  • 영어공부 사이트에 댓글 수정 기능을 추가하고 pythonanywhere를 사용하여 재배포했다. 중간에 실수로 db.sqlite3 파일을 삭제해서 열심히 올린 글이 날아갔다. 앞으로는 주의해야겠다.
  • vimtutor 연습

내일 할 일

  • 패스트캠퍼스 컴퓨터공학 입문 수업 듣기
  • 생활코딩 git branch 수업 듣기
  • AskDjango 수업 듣기
  • 모니터 새로 주문하기

git diff, git log 내용을 터미널에 계속 표시하기

|

git을 사용할 때는 동작하는 최소 단위로 add, commit, push를 진행해야 한다고 배웠다. 따라서 미니 프로젝트를 진행할 때 자주 git diff 를 통해서 변경사항을 확인하고 commit 메시지에 해당 변경 사항을 입력한다.

git은 기본으로 pager라는 것을 사용해서 git log, git diff의 결과 화면을 shell에 표시하는데, :q를 통해서 종료하면 명령창으로 다시 돌아와 내용을 더이상 확인할 수 없는 불편함이 있었다.

git diff 내용을 확인하면서 commit 메시지를 좀 더 편하게 작성하고 싶어서 검색해보니, 기본 설정인 pagercat으로 변경하는 것으로 해결이 가능하다고 한다. Leave git diff result in the terminal 설정 명령은 아래와 같다.

$ git config --global core.pager cat
views
cat을 통해서 git diff 결과를 표시

이제 더 편하게 git commit 메시지를 작성할 수 있다!
참고로 내가 사용하고 있는 환경은 아래와 같다

  • 터미널 에뮬레이터 : iTerm2
  • shell : Zsh
  • Zsh 프레임워크 : Oh-my-Zsh!
  • Theme : agnoster
  • Color : SOLARIZED DARK
  • 커스텀 설정 : 사용자명 숨김처리, 멀티라인 적용 (적용방법)

(추가) ~/.zshrc에 적용한 git alias

# custom alias 추가
alias gs="git status"
alias gd="git diff"
alias ga="git add"
alias gc="git commit"
alias gp="git push origin master"