레이블이 basic인 게시물을 표시합니다. 모든 게시물 표시
레이블이 basic인 게시물을 표시합니다. 모든 게시물 표시

2017년 12월 3일 일요일

Git의 기본

차례


시작하며….

지금까지 사용했던 형상 관리 툴을 보면 ClearCase, Perforce, SVN 정도가 될 거 같아요.

Git은 회사에서 사용하지 않다 보니까 잘 사용하지 않게 되더라고요.

그런데 이번에 Vim과 Plantuml등을 정리하면서 정리 내용을 Blog에 올리고는 있지만 이 글들을 좀 더 버전 관리라는 것을 하고 싶었죠.

그러다가 겸사겸사 Git으로 버전 관리를 하자라는 결정을 내리고 배우기 시작 했지요.

그렇게 Git을 알아 가니 이게 재미있더라고요.

기존 형상 관리 툴과는 다른 점도 나름 끌리기도 하고요.^^

그렇게 알게 된 점들을 여기에 정리하려고 합니다.

하나라도 끝내면서 다음을 진행해야 하는데…

하고 싶은 것만 많은 건 아닌지…

그리고 Git은 금방 끝내겠습니다!!!!
(제가 아는게 전문가 수준은 아니예요.^^;;;)

Git과 다른 툴과의 용어 차이들

처음 Git을 보면서 가장 어려웠던 점은 용어 였어요.

다른 형상관리 툴에서 사용하던 명령어나 용어들과 다른 점이 많았지요.

아마 처음에 add 라는 명령어 때문에 고민에 빠졌던 거 같아요.

add더하기 잖아요???

그래서 처음에 저 명령어를 보았을 때 신규 파일을 추가 하는 거라고 생각했어요.

근데 아니더라고요….;;;

이건 금방 아래에 설명을 드릴게요.

checkout 도 뭐지라는 생각을 들게 했죠.

checkincheckout은 다른 툴에서는 수정을 하고 수정을 완료 됨을 나타내곤 했지요.

그런데 Git에서는 Branch를 변경하는 거였어요.

저런 용어 정리 때문에 처음에 “Git은 어려운거!!!” 라는 편견을 가지고 있었죠.

그러다가 이제 필요하기 시작하니 기초부터 차근차근 다시 배우기 시작한 거죠.

기초 부터 다시 하니 Git에 대한 편견도 많이 사라지고 오히려 Git이 멋져 보이더라고요.

지금 이 글도 Git에 올리면서 쓰고 있을 정도니까요..^^

그럼 Git이 무엇일까요????

Local?? Remote?? Repository??

용어 정리가 필요하겠죠??

우선 저의 정의나 설명이 정확하지 않을 수 있다는 것을 말씀드립니다.;; ㅎㅎ

필요한 것만 배운 상태라 기본 원리와는 많이 다를 수 있어요.^^;;


Git은 위의 그림처럼 크게 두 가지로 나눌 수 있는 거 같아요.

제가 보았을 때의 구분법은 다음과 같죠.

  • Local : 개인이 작업 하는 공간
  • Remote : Backup을 위해 자료가 저장되는 공간


각각을 설명 드리기 전에 바로 Local에 있는 내용도 설명해 드릴게요.


위 처럼 Local과 Remote의 역할을 정의 하다 보니 처음에는 Remote의 이해 되지 않았어요.

타 버전관리 툴을 보게 되면 보통 서버들이 버전들에 대한 정보를 모두 가지고 있어요.

버전에 대한 소스 파일들이나 다른 메타데이터들을요.

그런데 Git에서는 Remote라는 건 단순 백업 서버라고 하니 이때부터 맨붕에 빠져 있게 되었죠.

그럼 그런 버전 정보들은 어디에 보관되어 있을까요?

답을 바로 이야기 드리면 Local 영역의 Repository에 저장된 거죠.

그러니 History나 버전별 소스들이나 모두 Local에 있다는 거죠.

즉… 네트워크로 연결할 수 없는 비행기 안이나 산골 지방에서도 Git으로 버전 관리를 할 수 있는 거죠.

이건 정말 큰 장점 중에 하나 아닐까요????

git의 기본 명령어

상태에 대해 간단히 보았으니 기본적인 명령어를 적어 보도록 하겠습니다.


위와 같이 Local에서의 상태의 이동 명령어를 간략하게 적어 보았습니다.

하나씩 설명을 해 드릴게요.

1. git init

우선 git은 모두 설치되어 있고 터미널에서 사용할 수 있다고 가정하고 진행하겠습니다.

만약에 Git으로 프로젝트를 관리 하고 싶다면 우선 해당 프로젝트의 디렉토리로 이동을 해요.

cd $ProjectDirectory
git init

그리고 init 명령어로 해당 디렉토리는 Git이 관리 한다고 생각하면 돼요.

2. 파일 추가와 상태 확인(git status)

파일을 하나 추가해 보죠.

echo TEST > A.txt

그럼 A.txt가 Working Directory라는 영역에 있는 거라고 생각하면 돼요.

지금 파일을 생성했는데 현재 상태가 궁금하겠죠?

그럼 상태를 한번 볼게요.

git status라는 명령어를 입력하면 되요.

$ git status
On branch master

No commits yet

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

    A.txt

nothing added to commit but untracked files present (use "git add" to track)

위처럼 나오지요?

간단한 영어니까 읽어 보면…

Untracked files가 있는데 그 파일 이름이 A.txt 라네요.

지금 저 파일이 Working Directory 상태라고 생각하면 돼요.

3. git add A.txt

Working Directory 상태에서는 말 그대로 작업을 하는 상태예요.

지금 이 상태를 이제 거의 완료 했다고 가정한다면 이제 버전 관리를 해야겠지요???

그럼 Repository 쪽으로 이동해야 하는데 중간 단계인 Staging Area로 먼저 이동을 해 두어야 해요.

git add 파일명

위 명령어를 적게 되면 Staging Area로 이동하게 돼요.

다시 상태를 볼까요???

$ git status
On branch master

No commits yet

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

    new file:   A.txt

변경 사항이 있는데 그건 앞으로 commit을 해야 할 거라네요.

그 파일은 A.txt라고 적혀 있고요.

이제 남은 건 Commit 하는 것만 남았네요.^^

4. git commit -m ‘메시지’

모든 수정이 완료된 상태이니 이제 Repository로 이동시키고 버전 관리를 할 수 있도록 하면 되겠지요?

git commit

위 명령어를 치면 Staging Area에 있는 모든 파일이 Repository로 이동하게 되는데…

메시지를 입력하기 위해 Vim이 자동으로 실행 돼요.

메시지를 입력하고 Vim을 종료하면 되는데 귀찮을 수 있으니 옵션인 -m을 입력 하면 Vim 실행 없이 바로 메시지가 입력 돼요.

git commit -m '메시지'

위와 같이 입력 하면 되지요.

5. 상태 확인

Working Directory에도 없고 현재 버전 관리가 어떻게 되고 있는지 확인을 해 봐요.

status는 간단하죠??

$ git status
On branch master
nothing to commit, working tree clean

위 처럼 이제는 Commit 할 것도 없고 Working Tree도 깨끗하다고 하네요.

Working Tree는 Working Directory를 이야기 하는 거예요.

그럼 버전 관리의 확인은 어떻게 될까요??

log라는 명령어를 입력하면 돼요.

$ git log
commit d03e82eadca57c205366eee6375a4c19e0e297a7 (HEAD -> master)
Author: 사용자이름 <사용자이메일주소>
Date:   Commit한 시간

    Add A.txt

위처럼 나올 거예요.

그러니까 Author의 정보를 가진 사람이 Date 시간에 무슨 일을 했는데…

그때 입력한 메시지는 “Add A.txt”네요.

마치며….

가장 기본적인 Git에 대해 나열했네요.

  • git init
  • git status
  • git add 파일명
  • git commit -m ‘메시지’
  • git log


하지만 저 명령어 들만이라도 익숙해진다면 어디를 가더라도 Git을 할 수 있다고 해도 될 거 같습니다.

확장 기능들이 더 많지만 가장 기본부터 차근차근 하자고요.^^

2017년 11월 19일 일요일

Vim의 기본; 편집 및 종료



시작하며....


MS Word나 한글 같은 프로그램을 이용하여 글을 쓸 때 입력 이외에 가장 많이 하는 것 무엇일까요?

개인차가 있기는 하겠지만 저 같은 경우는 수정을 위해 이동, 삭제, 복사, 붙여넣기, 저장이 될거 같습니다.

아마 이 정도만 알아도 편집기로서의 능력은 충분할거라 생각을 해요.

그러다가 Vim에 대한 관심이 생긴다면 그 후에 더 많은 것을 해도 되겠지요.


0. 준비


배울 때는 단순하게 외운다고 해서 되는건 아니라고 봐요.

실제로 해 보는 것이 가장 좋겠지요.

그래서 저도 해보자고 하고 싶습니다.

시간이 괜찮으신 분들은 아래의 내용을 미리 vim_basic.c로 만들어 주세요.
(아래에는 오류가 있으니 일단 만들어만 두세요~)

#include <stdio.hh>

int main()
{
    printf("Hello World");
   
    int i;
    int sum;

    for ( i = 0; i < 10; i++ ) {
        sum = sum + i;
    }
   
    printf("sum = %d", sum);

    return 0;
}

그리고 Vim으로 열어서 진행 하도록 하겠습니다.

여는 방법은 해당 파일 위에 마우스 커서를 두고 우 클릭을 하면 "Edit With Vim"이 보일거예요.

그걸 클릭하시면 아래와 같은 창을 보실 수 있을거예요.




1. 이동


키보드에 손을 올려 보세요.

그럼 왼손의 집게손가락이 키보드 F에 올려지고 오른손의 집게손가락은 J에 올려지게 되죠.

이 상태에서 사람이 가장 편하게 누를 수 있는 키보드가 무엇일까요??

움직이지 않는 상태니까.

아마 asdf jkl; 중에 하나의 키보드가 될거예요.

그래서일까요? Vim은 가장 편한 키보드 중 j를 아래로 이동하라는 명령어로 설정해 두었어요.

그리고 왼쪽 옆에 있는 키인 h를 왼쪽 이동, k는 위로 이동, l은 오른쪽 이동으로 설정 되어 있어요.



그럼 이동을 하셔서 아래 그림의 h까지 커서를 이동해 보세요.
(이동은 Normal Mode에서만 가능해서 혹시 글자가 입력 되신다면 Esc키를 누르시고 이동하시면 됩니다. 대신... 절대 화살표는 사용하지 마세요. 연습 중이잖아요~)



조금더 편하게 이동하는 방법이 있는데 그건 다른 편에 또 이야기 하겠습니다.


2. 삭제


글자를 삭제 하는 방법은 여러가지가 있어요.

그 중에서 제가 자주 사용하는 것만 알려 드릴게요.
(그 외의 명령은 필요하시면 찾으시면 나올 것이고 없다면 직접 만드셔도 되요.^^)


  • x : 커서 위의 글자 하나를 삭제
  • dd : 한 줄 삭제
  • diw : 한 단어 삭제
  • v[영역선택]d : 영역을 선택하여 삭제
  • V[영역선택]d : 줄 단위를 선택하여 삭제

  • u : 수정 취소
  • Ctrl+r : 수정된거 재복구


위의 명령어는 모두 Noraml Mode에서 사용되어 집니다.

지금은 h를 하나 삭제하려고 하는 것이니 x만 눌러서 삭제를 하도록 하겠습니다.

그럼 아래 처럼 되겠지요.



아래 보니 "printf("Hello World");" 부분이 있는데 이건 삭제를 하죠.

해당 줄에 커서를 두고 dd를 눌러 보세요.

그럼 삭제가 될거예요.



diw는 아무 곳에 가서 한번 테스트를 해 보세요.

만약에 잘못 삭제를 하였다면 u를 누르시면 복원이 되고요.
(윈도우의 Ctrl+z와 같은 효과입니다.)

그리고 u를 너무 많이 눌렀거나 실수로 눌렀다면 Ctrl+r을 누르세요.

복구 버튼 입니다.

다음은 v와 V인데요.

모드 중에 v와 V에 대해 이야기 한 적 있죠.

v나 V를 누르게 되면 Visual Mode가 되는데...

한번 눌러 보세요.

그리고 hjkl(이동키)로 이곳 저곳으로 이동을 해 보세요.

그럼 선택 영역을 지정 할 수 있지요.

아래 그림 처럼 선택을 한 후에....



d를 누르시면 삭제가 되지요.

다시 u를 눌러서 원복을 해 보세요.

V(대문자)는 한 줄 단위로 선택영역을 지정하는거예요.

원하는 만큼 선택하고 d를 누르면 선택한 모든 줄이 삭제 되지요.


3. 복사와 붙여넣기


삭제를 했으니 복사를 해 볼까요??

제가 자주 사용하는 복사 명령어는 다음과 같아요.


  • yy : 한 줄 복사
  • yiw : 한 단어 복사
  • v[영역선택]y : 선택된 영역 복사
  • V[영역선택]y : 선택된 줄 복사



  • p : 복사된 부분 붙여넣기


삭제인 d 명령어 대신 y 명령어를 사용해요.

다른 편집기에서 사용하는 Ctrl+c는 copy의 약자인데... y는 yank라고 잡아 채다의 느낌이라네요.

그럼 붙여넣기는 무엇일까요.

paste인 p를 사용하면 됩니다.

그리고 하나 더 이야기 해 드리고 싶은 것이 있는데요.

d 입니다.

d는 위에서 삭제 하기로 알려 드렸지만..

단순 삭제 보다는 자르기라고 보시는게 더 좋아요.

그러니 d로 삭제 하고 p를 누르면 삭제된 내용이 붙여 넣어지는 것을 볼 수 있을거예요.

d와 p를 이용해서 테스트 해 보고 u로 원복해 보세요.


4. 입력


입력 하려면 어떻게 하면 될까요?

굉장히 단순한데...

Input Mode로 진입하면 됩니다.

Input Mode로 진입을 할 때 제가 자주 사용하는 명령어는 다음과 같아요.


  • i : 현재 커서 앞에서 입력 가능 <= 가장 사용 빈도 높음
  • a : 현재 커서 뒤에서 입력 가능
  • I : 현재 라인 맨 앞에서 입력 가능
  • A : 현재 라인 맨 뒤에서 부터 입력 가능
  • o : 다음 라인 맨 앞에서 입력 가능
  • O : 이전 라인 맨 앞에서 입력 가능


보통은 i를 가장 많이 사용하는데 조금 익숙해 지면 다른 경우로도 연습을 해 보세요.

키보드를 하나라도 적게 입력 하고 사용하는게 좋으니 익숙 해 지면 더 편하게 입력을 할 수 있게 되겠죠.^^

그리고 여기서 하나를 말씀을 드리면 Input Mode에서는 hjkl로 이동할 수가 없어요.

그러니 Input Mode 일 때는 어쩔 수 없이 화살표로 이동을 해야 하는데...

화살표 사용이 너무 싫다면 Esc 키를 눌러 Normal Mode로 빠져 나가 이동 후 다시 i를 눌러 Input Mode로 오시면 되지요.^^

그럼 마무리를 위해 입력을 하나 하죠.

함수 시작 전 첫 줄에 printf("Hello Vim\n"); 이라고 입력해 보시겠어요?

최종 결과물은 다음과 같겠네요.




5. 저장 및 종료


이렇게 수정을 한 후에 저장을 해보겠습니다.


  • :w : 저장
  • :q : 종료
  • :wq : 저장 후 종료
  • :w! : 강제 저장
  • :q! : 강제 종료



":" 글자 기억하시나요??

바로 Command-line Mode로 진입할 수 있는 명령어 입니다.

:를 누르면 아래 부분에 글을 입력 할 수 있게 커서가 나와요.

그림....

여기에 w를 입력하고 Enter를 누르면 저장이 된거예요.

그리고 w 대신에 q를 누르면 종료가 되어요.

w를 누르고 q를 입력해 보시면 Vim이 종료 되는 것을 확인 할 수 있지요.

명령어 뒤에 !를 누른다면 강제라는 의미인데....

예를 들어 저장하지 않고 종료를 하려고 할 때 :q만 입력 하면 Vim은 저장이 되어 있지 않다고 종료를 거부해요.

그럴 때 !를 뒤에 붙여주면 강제로 종료를 하게 되는거죠.


이제 Mode는 모두 배우게 되었고 가장 기본 적인 편집 능력까지 가지게 되었습니다.

남은건...

익숙해 지는거죠!!

그리고 설정을 조금씩 바꾸는 방법에 대해서 배워 볼게요.

감사합니다.^^


2017년 11월 18일 토요일

Vim의 기본; 윈도우 Vim 설치 및 모드에 대해서


윈도우 Vim 설치 및 모드에 대해서


시작하며...


보통 Vim을 처음 보게 되는 곳은 리눅스에서 개발을 할 때 일거예요.
(개발자 외의 분들은 더더욱 모르겠지요.)

개발자가 처음부터 찾아서 Vim을 알고 사용했다면 선배나 지인이 추천을 해서가 아니었을까요?

저는 리눅스에서 개발을 하는 사람으로 어쩔 수 없이 Vim을 봐야 했지요.

그 후 Vim을 사용하면서 그 편리성에서 빠져 나오지 못하고 윈도우에서도 사용하고 싶다는 마음에 이렇게 글을 쓰게 되었네요.

혹시 자신은 윈도우라서 Vim을 사용하고 싶어도 못 쓴다는 분들을 위해 일단 설치 하고 기본 Vim을 보도록 하죠.


윈도우 Vim 설치


물론 윈도우에서는 좋은 편집기들이 있습니다.

그래도 Vim의 매력에 한번 빠지면 꼭 다른 OS에서도 사용을 하고 싶게 되더라고요.

저는 윈도우, MAC과 안드로이드에도 Vim이 설치가 되어 있습니다.
(안드로이드는 자주 사용되지는 않지만 그래도 설치는 해 두었어요.^^)

Vim을 알기 위해서는 일단 설치를 하고 사용해봐야 하니 우리나라에서는 가장 보편화된 OS인 윈도우에서 설치 하고 명령어를 알아 보죠.

https://vim.sourceforge.io/download.php#pc

위의 사이트에서 가장 최신의 실행 파일을 받으면 되요.

현재(2017.11.18)는 "gvim80.exe"가 가장 최신 버전이네요.

설치는 단순하게 Yes와 Next를 누르면 될거예요.

그럼 바탕 화면에 아래와 같은 파일들이 생겼다면 설치가 완료된 것입니다.


gVim이란 GUI Vim의 약자인데 크게 중요한건 아니니 넘기셔도 되요.

위의 그림 중에 gVim 8.0을 클릭하여 실행 하면 아래와 같은 그림이 나와요.


그리고 한번 화살표를 통해 이동해 볼까요??

아마 커서가 움직이지 않는다는 것을 알 수 있을거예요.

참으로 답답하죠.

그리고 어떤 키는 눌러도 입력조차 되지 않아요.

예를 들어 "e"를 누른다면 경고음만 들릴 뿐 아무런 동작도 하지 않지요.

이런 점이 처음에 Vim을 어렵다고 여기는 것인데...

사실 알고 보면 별거 없지요.

이제 하나씩 배워 보도록 하지요.


모드에 대해서


Vim을 처음 다룰 때 가장 기본이 되는건 Mode라는 것을 알아야 한다는 거죠.


위에 처럼 Vim은 4가지 모드로 나뉘어 지죠.

각 모드로 진입을 하기 위해서는 화살표 방향에 있는 알파벳이나 Key를 누른다면 해당 모드로 진입을 할 수 있습니다.

그리고 각 모드를 간단하게 설명하면 아래와 같아요.


  • Normal Mode(Command Mode) : 처음 Vim을 열면나오는 모드로 이동이나 복사 같은 명령어(Normal Command)를 실행하는 모드
  • Visual Mode : 글을 영역 별로 선택 할 때 사용하는 모드
  • Command-line Mode : Vim에 명령어(Normal Command외의 Command)를 실행하거나 검색을 위한 모드
  • Insert Mode : 입력을 위한 모드

각 모드의 특징은 위와 같은데 사실 글 보다는 그림으로 보면서 진행하면 더 좋기는 해요.

그렇지만 실제 예제를 진행하면서 각 모드에 대해 더 알아 보도록 하겠습니다.