Git-bash 실습해보기 

앞전에 :009.Git-bash (checkout, reset, add, rm, commit)" 과정에 이어서 설명을 하겠다.

앞전 실습에서 한 내용은


$touch add_test  를 통해서 새로운 파일을 생성하였으며

readme.txt 를 수정하였고

merge_test2.txt를 삭제한 후 commit을 하였다.


git log -n 1 을 입력하면 현재 상태에서 가장 최근 commit이 나온다

만약 branch가 test11이 아닐 경우, test11로 branch를 변경 한 후 가장 최근 commit으로 이동할 것이다.


(만약 test11 branch에서 위의 add/rm test를 진행하였으면 상관 없다. 나는 develop에서 add/rm test를 진행하였기 때문에 아래의 과정을 진행한다.)


$ git log -n 1              // 가장 최근의 1개의 커밋 ID를 확인한다.

$ git checkout test11     // tset11 branch 로 변경한다 (현재 test11은 다른 commit에 있다고 가정)

$ git reset --hard dc68e3  // test11 branch를 dc68e3 commit으로 옮긴다.


***** 주의 *****

여러분이 생성한 commit id와 내가 생성한 commit id가 다를 수 있으므로 본인의 commit id를 사용하기 바란다.

내 commit id : dc68e3c1afb28ce..........

gitk --all 에서 SHA1 ID 가 commit ID이다.

위의 내용을 통해 확인 할 사항

1. 현재 branch가 test11이 맞는지 확인한다. (여러분이 test??로 생성했다면 test??가 맞는지 확인)

2. add_test 파일이 있는지 확인

3. merge_test2.txt 파일이 삭제 되었는지 확인




1) 사전준비 git config


git push를 하기 전에 git config를 세팅한다. 여기서 user 이름과 e-mail을 등록하면, git push를 할 때 자동으로  git config 에 등록된 이름을 가져다가 쓴다. 또한 push 방법을 설정 할 수 있다. 그러면 지금부터 git config를 등록한다

만약 git config를 등록하지 않고 push를 하게 될 경우 이름, 이메일, push 방법 등을 묻는 메세지가 나올 것이다. 미리 등록하자.


$ git config --list      // git config 등록된 리스트 보기

$ git config --global user.name "이름입력"      ex) git config --global user.name "hjpark"

$ git config --global user.email "e-mail입력"    ex) git config --global user.email "hjpark@google.com"

$ git config push.default "matching"


지금부터 push를 진행합니다.




2) git push

git push넌 local저장소의 내용을 remote저장소(서버) 로 update 하는 것이다.

git push에는 여러 조건이 있지만 크게 아래 2가지만 알면 된다.


$ git push

-> 로컬의 변경된 모든 내용을 원격저장소에 올린다. (단, 매칭되는 branch만 push함)


$ git push origin <원격저장소 branch>

-> 원격저장소 branch에 push한다.

-> 만약 remote에 branch가 존재하지 않을 경우, local의 branch 명과 똑같이 써주면 원격저장소 branch생성



*** 주의 ***

원격저장소 branch명과 local의 branch명이 같아야 한다.


---- 예제 ----


만약 remote branch에 master와  develop만 있다고 가정해보자

remotes/origin/master

remotes/origin/develop

( $ git branch -r 을 통해 확인 가능 )



현재 local에는 3개의 branch가 있다고 가정하자

master

develop

test11

( $ git branch 를 통해 확인 가능)



여기서 develop과 test11에 각각 commit을 하였다고 가정하면

master > 변경 없음

develop > 변경 있음

test11 > 변경있음



이상태에서 git push를 하면 어떻게 될까?

develop branch만 서버에 push가 된다. 이유는 remotes/origin/develop 은 서버에 존재하기 때문에 local의 develop이라는 branch와 매칭이 되어서 자동으로 올라간다. 하지만 test11이라는 branch는 remote 저장소에 없기 때문에 어떠한 변화도 생기지 않는다.


master > 변경없음      ( remotes/origin/master 존재 )

develop > push 성공   ( remotes/origin/develop 존재 )

test11 > 어떠한 변화도 없음  (원격 저장소에 branch 없음)



그렇다면 test11 이라는 branch를 어떻게 원격저장소에 push 할 수 있을까?

만약 remote 저장소에  remotes/origin/test11 이라는 branch가 있으면 test11 도 같이 올라갔을 것이다. 하지만 그렇지 않을 경우 다음을 통해 만들 수 있다.


$ git checkout test11  // 현재 branch를 test11 로 바꾼다.

$ git push origin aaaaa   // remote에 aaaaa로 push를 하지만 local branch와 매칭이 안되서 실패

$ git push origin test11   // remote에 test11 이라는 branch가 없지만 local인 test11이라는 branch가 매칭되므로 remotes/origin/test11을 자동으로 생성하고 서버에 push하게 된다.



처음에는 원격저장소가 2개였지만 이젠 3개가 되었을 것이다.

remotes/origin/master

remotes/origin/develop

remotes/origin/test11      -> git push origin test11 을 통해 새로 생성한 remote branch


git push 와  git push origin <branch> 의 차이를 알겠는가???

git push는 원격저장소와 매칭되는 브랜치만 push할 수 있다.

git push origin <branch> 명은 remote와 local의 매칭되는 branch만 push하며, 없을 경우 새로 만들어서 push 할 수 있다.


중요한 point는 branch 명을 매칭(똑같이)해야 된다는 점이다. 




3) git pull

서버에 성공적으로 push를 하였는가?  성공적으로 push를 한 사람이 있는 반면에 실패를 한 사람도 있을 것이다. 성공한 경우는 내가 push할 branch를 다른사람이 건들지 않기 떄문에 쉽게 성공하겠지만, 실패한 경우는 내가 push를 하기전에 누군가 먼저 해당 branch를 push를 한 경우가 되겠다.


git push dvelop -> develop이  거절되었다. 이 에러를 해결하는 5가지의 hint가 있는데 4번째 hint를 보면

hint (e.g., 'git pull ...') before pushing afain.    ->   push 하기전에 git pull을 하라는 내용이 나온다.




그럴 경우 server의 내용일 다시 받은 다음 commit을 하면 된다.

$ git fetch --all        // 변경된 모든 정보를 불러온다.  (다운받지 않고 정보만 불러옴)

$ git pull            // 원격저장소로부터 변경된 정보를 다운받는다.

$ git push            // 다시 push한다.



만약 내가 작업하던 도중 git pull을 해야 되는 상황이 오면??

1. 변경된 내용들을 git add / rm 을 통해 준비영역에 저장

2. git status 를 입력하여 빨간 글씨가 없는지 확인한다.

3. git commit -m "메세지" 를 통해 작업중인 내용을 commit한다

4. git pull을 한다.



git pull을 하였는데 실패하는 경우는 다음과 같다. remote로 부터 받을 파일과 내 로컬에 저장된 파일이 충돌이 나는 경우다. 만약 서로 다른 파일을 수정하였더만 충돌이 날 이유가 없지만, 서로 같은파일에 같은 공간을 수정하였다면 이렇게 충돌이 발생 할 수 있다.

$ git pull  (위의 그림 설명)

Auto-merging readme.txt      -> remote와 local의  readme.txt를 자동으로 merge 하는 내용이다.

CONFLICT (content): Merge conflickt in readme.txt    -> readme.txt 를 merge하는 동안 오류가 났다.

Automatic merge failed: fix conflicts and then commit the result    -> 충돌 해결 후 결과를 commit 하여라.


자, 우리는 여기서 충돌 해결 후 결과를 commit 해주면 된다.

자세히 보면 제일 오른쪽 하늘색 글씨가 (develop) -> (develop|MERGING) 으로 변한 것을 볼 수 있다.

현재 git pull하면서 auto merge 중에 에러가 발생하였고 사용자가 직접 해결해줘야 하는 부분이다.


$ git status  (위의 그림 설명)

성공

 - new file: add_test

 - deleted; merge_test2.txt

실패

 - both modified: readme.txt     -> 실패한 이유는 양쪽 branch의 readme.txt가 수정되었기 때문이다.



자, Tortoise git으로 수정해주자.  아래의 "5) git 충돌 해결하기" 참조 바람.




4) git merge

merge를 하게 되는 경우는 크게 2가지가 있다. 

1. 다른 branch와 작업 내용을 합칠 때

2. git pull 할 때. (앞에 git pull 에서 auto-merge를 의미함)



branch 끼리 merge하기

test11과 develop이라는 branch를 합치고 싶다면???

$git checkout test11     -> test11로 checkout 한다. (main이 됨)

$git merge develop      -> test11의 branch에 develop branch를 합친다.

아무런 충돌이 없을 경우 잘 합쳐질 것이다. gitk --all 을 통해 직접 확인해 보기 바란다.



merge를 취소하고 싶다면???  (4가지 방법 중 택 1)

1. $ git merge --abort       // merge 취소하는 명령어 git이 merge 중이여야 가능한 명령어.

2. $ git merge reset --hard HEAD~     // merge를 아예 취소하고 가장 마지막에 commit한 HEAD로 이동

3. $ gitk --all 을 한다음 원하는 commit으로 누르고 Reset <branch> to here / Hard 체크

4. TortoiseGit으로 Merge abort 선택





5) git 충돌 해결하기 (git conflict solve)

git pull 또는 git merge 도중 충돌이 생기기 마련이다. git merge를 해결하기 위한 git merge tool들이 있다.

$ git mergetool 을 입력하면 되지만 인터페이스가 매우 후지다.

만약 입력했다면 < Esc + : + q + Enter >  를 연달아 반복해서 빠져나오자. 우리는 Tortoise git을 이용할 것이다.


먼저 해당 충돌이 생긴 폴더로 이동한 뒤에 마우스 우클릭 하여 diff 를 선택한다.




Diff를 선택하면 아래와 같은 창이 나온다. 검정 글씨는 충돌이 나지 않은 파일들이고 빨간글씨가 충돌이 난 파일들이다. 우리는 이 빨간 글씨를 해결해줘야 한다. 만약 빨간글씨를 해결하지않고 commit을 해버리는 경우, 해당 파일의 충돌부분에 이상한 글자들이 들어가게 된다.


Conflict가 발생한 파일을 더블클릭하거나 마우스 우클릭하여 Edit Conflicts를 눌러준다.

( 만약 기존의 Branch 혹은 Local을 내용으로 덮으쓰고 싶다면 Resolve conflict using 'mine'을 선택하라. 반대로 앞으로 합칠 branch 혹은 Remote의 내용으로 덮으쓰고 싶다면 Resolve conflict using 'theirs'를 선택하라)




각각의 상황에 따라 Theirs와 Mine이 가리키는게 차이가 있다.


git push로 충돌해결할 경우   

 -> (왼쪽상단 Theirs - Remote)  (오른쪽 상단Mine - Local) 


local에서 git merge 중 충돌해결할 경우  

 -> (Theirs - 합치고자 하는 branch) ( Mine - 현재 checkout된 branch)

위의 그림을 보면 가장 밑에 부분이 최종적으로 저장할 파일의 내용이다. 해당 부분을 마우스로 드래그하여 마우스 우클릭하여 어떠한 내용을 쓸 것인지 직접 선택하면 된다. 

Use 'mine' test block 을 선택하게 될 경우 Mine에 있는 내용으로 덮어쓰게 된다.


상단 중앙에 Previous conflict / Next conflict 버튼을 눌러서 또 다른 충돌이 없는지 찾아보고, 더 이상 충돌이 없으면 Mark as resolved 를 누른후 저장하고 종료한다.




왼쪽 그림을 보면 빨간색이였던 readme.txt가 파란색으로 변한 것을 볼 수 있다. 충돌이 해결된 것이다!! (올레~)

이제 최종적으로 merge한 내용을 commit 하면 된다. 하단에 있는 commit 버튼을 누르면 오른쪽 창이 나타난다.

Commit Message 가 자동으로 작성되었다. 밑에 OK 버튼을 눌러주자.



이렇게 충돌이 생길 경우 TortoiseGit 으로 직접 해결해 주면 된다.



---------------------------------------  끄읕  -------------------------------------------------


git 강좌를 진행 중 미비한 부분을 보완하였습니다. 잘 보고 본인이 직접 실습해서 본인 것으로 만들길 바랍니다.



SSH Key 없이 git clone하기


"05. git-bash" "06. TortoiseGit" 에서는 ssh-key를 등록하고 git clone하는 것을 포스팅하였다. 하지만 ssh-key 없이도 git clone이 가능하다. git clone / push / pull 할때마다 ID와 PW를 입력해주면 된다.





1. TortoiseGit - http 주소로 git clone하기


 gitlab -> project 홈페이지에 접속하면 아리처럼 SSH주소 혹은 HTTPS 주소를 선택 할 수 있다. HTTPS 주소로 선택 후 TortoiseGit -> git clone 에다가 해당 주소를 복사 붙여넣기 하면 된다.



 git clone 할 때에는 간단한 인증절차가 필요하다. ssh-key를 등록할 경우 ssh-key가 알아서 인증절차를 진행하지만, HTTPS로 받을 때에는 매번 ID와 PW를 입력한다. ID는 왼쪽 하단의 이름을 입력하고 PW는 본인 계정의 PW를 입력한다.





2. Git-bash - https주소로 git clone하기

$ git clone <https 주소> 를 입력한다.

ID와 PW를 물어보면 그대로 입력해주면 된다.







Git-bash 실습해보기


지금부터 Git-bash를 통해 자주 쓰는 명령어들을 실습을 한다. 잘 따라하기 바람.

 





**** git clone이 이미 된 사람들은 git clone을 skip ****

1. Git clone

$ cd 혹은 $ cd ~

$ mkdir test  (만약 test 폴더가 있으면 $ rm -rf test 후 $ mkdir test)

$ cd test

$ git clone git@gitlab.com:hjpark/KITEL_TEST.git



2. Git Checkout

2-1) branch를 생성하면서 checkout

$ git checkout -b <new branch name >      // branch 이름이 겹치지 않도록 주의!!

Switched to a new branch 'hunjin_branch' -> 새로운 branch가 생성되었고 여기로 이동함.



2-2) 기존에 존재한 다른 branch로 변경

$ git checkout  까지만 쓴 상태로 Enter를 누르지 않고 Tab 키 연속적으로 눌러본다.

61개의 branch를 볼거냐고 물어보면 y를 입력 하고 원하는 branch로 바꿔준다.

$ git checkout develop


2-3) git gui로 실행시키기

$ gitk --all       // git gui를 시작한다.   (bash창 사용 불가)

$ gitk --all &    // git gui를 새로운 창으로 시작 (bash창 사용 가능)



2-4) branch를 새로 생성하기

현재 test_khcha_add 라는 commit을 보면 어떠한 branch도 존재하지 않는다. 여기에 새로운 branch를 만들 것이다.

1. test_khcha_add 클릭 (반드시 선택을 해줘야 한다.)

2. test_khcha_add 우클릭

3. Create new branch 선택

4. 원하는 branch 명을 입력

5. 새로 생김 branch 확인


test11 이라는 새로운 branch를 생성하였다.

(만약 test11 branch가 생성 안될 경우 다른 이름으로 생성하길 바람)





2-5) branch 변경하기 





현재 branch는 develop 혹은 master에 있을 것이다. 옆에 노란색 원이 현재 선택된 branch라는 것을 알려준다. 현재 있는 branch에서 test11 branch를 checkout 할 것이다. git 명령어로는 git checkout test11 이 되겠다.



***** 주의사항 *****

1. 반드시 녹색칸을 클릭하라. 녹색칸이 해당 branch이다.

2. remotes/origin/으로 시작하는 branch는 local에 있는 branch가 아닌 server에 있는 branch이다. 그러므로 remotes/origin/로 시작하는 branch로 checkout을 할 수 없다.


1. 옮길 branch를 선택해 준다. 

2. 옮길 branch (test11) 을 우클릭 한다.

3. Check out this branch 를 클릭한다.

4. test11 왼쪽 원이 파란색에서 노란색으로 바뀐 것을 확인한다. 







3) git reset


우리는 현재 test11이라는 branch에 있다. 이 branch를 내가 원하는 commit 장소로 변경 할 수 있다. 이것은 git 강좌에서 설명했던 버전관리와 비슷한 내용이다. 자신이 원하는 시점으로 돌아가서 작업을 할 수 있다.


우리는 제일 위에 있는 complete라는 commit으로 해당 branch를 이동 시키겠다. 즉, test11 branch의 내용을 complete 라는 commit과 같게 한다는 얘기다.


1. complete 클릭 (반드시 선택을 해줘야 한다.)

2. complete 우클릭

3. Reset test11 branch to here 선택

4. Hard 체크 후 확인

5. test 11이 complete로 변경된 것을 확인한다.



Reset test11 branch to here은 git reset --hard <HEAD ID> 와 같은 기능이다.

HEAD ID는 gitk의 SHA1 ID 이다. 각각의 commit을 눌러서 직접 SHA1 ID를 확인 해 보기 바란다.


f54f58648289962406a47a7671f4f86198f59e16 -> complete 

ae6d6a5ee6678107472e97be7eb6479a99e97746 -> Fusion sh & ks

3bf25ff060bf4ab3495807c8daf85630a857173d -> test_kskim.c add

f917389b84e949322982332f15ba65ac9f9e02d4 -> ## "test2 txt file add "

d764d7a6aa3f70c274dfcee0cd9b49fd3f88e176 -> test_tskim.c add



git reset --hard 명령어를 이용하면 해당 commit으로 이동 할 수 있다.

head id는 다 써줄 필요 없이 앞에 6~8자만 써주면 된다.



$ git log -n 5          // 해당 위치로부터 최신 log 5개를 확인한다.

$ git log            // 해당 위치로부터 모든 log를 검색

- 방향키로 위아래로 이동 가능

- 나오려면 Q 입력

$ git reset --hard f54f586  //  complete로 이동 

$ git reset --hard ae6d6a // Fusion sh & ks로 이동 

$ git reset --hard 3bf25ff0 //  test_kskim.c add로 이동 

$ git reset --hard f917389  //  ## "test2 txt file add "로 이동 

$ git reset --hard d764d7a6 // test_tskim.c add로 이동 




4) git add & rm


git add와 rm은 강좌에서 설명한 것 처럼 준비영역을 관리하는데 사용된다. 변경된 내용을 add하거나 삭제된 파일을 rm을 통해 제거하여 준비영역에 저장 할 수 있다.


$ git add -u       // (변경된 내용을 update)

$ git add --all     // (추가된 파일을 준비영역에 저장)

$ git rm <파일명> // 해당 파일을 삭제



4-1) 파일 추가하기

$ touch add_test      // add_test 파일을 추가한다.

$ git status            // 현재 git의 상태를 본다.



git status를 입력하면 해당상 태를 볼 수 있다. 영어를 대충 해석하자면

add_test라는 파일이 Untracked 되었다. commit을 위해서 git add <file>를 사용하란 뜻이다.





git add --all을 통해서 빨간색이였든 add_test가 녹색으로 바뀐 것을 볼 수 있다.

$ git add --all      // 변경된 모든 파일을 추가한다.

$ git status         // 다시한번 git의 상태를 확인한다.





4-2) 파일 내용 변경하기

해당 폴더에 readme.txt를 열어서 내용을 수정한 후 저장한다.




$ git status 를 입력하면

modified:  readme.txt 가 빨간색으로 나온다. 수정된 내용이 준비영역에 저장되지 않았으므로 수정된 내용을 update 해 준다.




다음과 같이 입력하면 modified: readme.txt 이 초록색 글씨로 바뀐 것을 확인 할 수 있다. 변경된 내용이 update되어 준비영역에 저장 된 것이다.

$ git add -u

$ git status




4-3) 파일 삭제하기

해당 폴더를 열어서 merge_test2.txt를 삭제한다.





$ git status             // delete: merge_test2.txt가 삭제된 내용이라는 빨간 글씨를 확인한다.

$ rm merge_test2.txt   // 준비영역에 merge_test2.txt가 삭제되었음을 알린다.

$ git status            // delete: merge_test2.txt가 삭제되었다는 변경 내용이 적용된 것을 확인한다.





5) git commit


git status 를 입력하였을 때 전부 초록색 글씨라면 준비영역에 잘 저장 된 것이다. 이제 준비영역에 저장 된 내용들을 local git에 저장하기 위하여 commit을 한다. commit시에는 반드시 메세지 내용을 적어줘야 한다.



git commit -m "메세지 내용" 하고 입력하면 된다.


$git commit -m "git add/rm test"          // git add/rm test 메세지로 commit함


<결과> 3개의 파일이 변경되었다.

5202@ks5202 MINGW32 ~/test/KITEL_TEST (develop)

$ git commit -m "git add/rm test"

[develop dc68e3c] git add/rm test

 3 files changed, 2 insertions(+), 3 deletions(-)

 create mode 100644 add_test

 delete mode 100644 merge_test2.txt



git push 부터는 다음에..

'Git' 카테고리의 다른 글

009.Git-bash 실습해보기 (push, pull, merge)  (0) 2016.02.17
007. SSH Key 없이 git clone하기  (0) 2016.02.17
006. Tortoise git 한번에 따라하기  (0) 2016.02.16
005. Git-bash 한번에 따라하기  (0) 2016.02.16
Git 강좌 후기  (1) 2016.02.16

Tortoise git 한번에 따라하기!!!!


bash랑 Tortoise 두개 같이 쓰려니까 힘드네요 ㅋㅋㅋㅋ. 자 바로 시작하죠. Tortoise는 전부 download 했다는 가정하에 진행하겠습니다.





1. puttygen으로 ssh-key 생성하기


Tortoise는 ssh-key 지우는 것 없이 새로 생성하는 것부터 등록하는 순서로 진행하겠습니다.


1. 컴퓨터 > C > Program Files > TortoiseGit > bin 으로 이동

2. puttygen.exe를 실행

3. Generate 버튼 클릭 후 열심히 마우스를 흔든다.

4. ssh-rsa 공개키가 생성 된 것을 확인




1.  Save priavete Key 를 클릭

2.  컴퓨터 > C > home 이동

3.  puttykey 로 저장

(만약 public key가 기억이 안날 경우 puttygen을 키고 생성한 puttykey.ppk를 Load하면 public key 확인 가능)






2. 서버에 등록하기 


***** 주의사항 *****

밑에보면 이미 등록된 SSH Key가 있다. 이것은 "005.git-bash 한번에 따라하기" 에서 등록한 ssh-key이므로 puttygen으로 만든 key와 pair가 아니다. Tortoise git을 이용하려면 puttygen으로 만든 key를 이용해야 하므로 한번 더 등록해준다. 당연히 공개키는 puttygen으로 만든 공개키를 복사한다.



1. SSH Keys 를 클릭

2. Add SSH Key 를 클릭



puttygen으로 생성한 공개키를 복사하여 붙여넣고 Add Key를 눌러줍니다.





3. git clone 하기


1. 파일탐색기를 켜고 C:\home 폴더에 test2 폴더를 새로 생성해줍니다.

2. 새로 생성한 test2 폴더로 들어갑니다.

3. 마우스 우클릭 후 Git Clone을 합니다.



여기가 좀 복잡합니다. 왼쪽부터 시작합니다. 잘 따라하길 바랍니다. 

1. URL 에 서버 주소를 복사해줍니다.

2. Directory 부분이 C:\home\test2\KITEL_TEST 가 맞는지 확인합니다.

3. Load Putty Key가 체크 되었는지 확인합니다.

4. 해당 .ppk 파일이 위에서 생성한 파일이 맞는지 확인합니다.

5. 위에서 생성한 C:\home\puttykey.ppk 가 아니라면 "..." 버튼을 눌러서 찾아줍니다.

6. 컴퓨터 > C > home 으로 이동합니다.

7. 위에서 생성한 puttykey.ppk 를 확인해줍니다.






***** 주의사항 ****

만약 서버에 등록한 ssh-key와 Tortoise에 등록된 putty key가 일치하지 않는다면 아래와 같은 오류가 뜹니다. puttykey.ppk 경로와 서버에 등록한 공개키가가 맞는지 잘 확인해 줍니다.




git clone을 성공하였다면 아래와 같이 KITEL_TEST 폴더가 제대로 생성 되었음을 확인 할 수 있습니다.




 현재 KITEL_TEST 폴더에는 readme.txt 밖에 없습니다. "05. git-bash 한번에 따라하기" 에서도 설명하였듯이 기본 branch가 master로 되어있으며 master의 상태는 readme.txt 밖에 없습니다. branch를 바꿉니다.

1. KITEL_TEST 폴더에서 우클릭

2. TortoisetGit -> Switch/Checkout 선택





제일 처음 Branch는 master로 되어있습니다. 이를 remotes/origin/develop으로 바꿔줍니다.




아래처럼 Server의 develop branch 저장소의 내용을 가져온 것을 확인합니다.






----- 끝 -----

TortoiseGit이 GUI로 되어있어서 더욱 보기 쉽겠지만 git의 기본 원리 구조는 git-bash입니다. 원리를 잘 이해하면 git을 쓰는데 더 원활한 도움이 될 것입니다.




Git-bash 한번에 따라하기.


 git 강좌 진행 후, 처음이라 따라오기 힘들었던 친구들이 있어서 다시 정리 글을 올립니다. 가장 문제가 됬던점은 ssh-key등록 및 branch의 상태였는데, 처음 시작하는 여러분들이 헷깔릴만한 포인트를 강조하여 포스트를 쓸까 합니다.


 개인적으로 손에 익으면 git-gui보다 git-bash가 편리한점이 많아서 git-bash로 하고 있습니다. 이 글은 git-bash로 하는 방법에 대한 포스팅을 하겠고 다음 글에서 git-gui 한번에 따라하기 포스팅을 하겠습니다.






1. 초기화하기 (ssh-key 삭제)


 ssh-key의 중요성, 편리성에 대해서는 git강좌시간에 설명하였으며, 다음을 참고 바랍니다.

 http://parkhyunjin.tistory.com/6


 강좌에서 git-bash와 Tortoise git을 동시에 진행하다보니 ssh-key 등록방법에서 엇갈린 부분이 있었던 것 같습니다. ssh-key 등록부터 다시 해보아요.



자기 이름을 누르고 Profile Setting을 누릅니다.



SSH Keys의 내용들을 다 지웁니다. (꼭 지워주세요)



SSH Keys가 깔끔하게 없어졌죠??




서버에 있는 SSH Key들을 다 지웠고, Local에 있는 ssh key도 다 지워보겠습니다.

먼저 git-bash를 엽니다.




기본 폴더로 이동하여 .ssh 폴더를 지웁니다.

$ cd            // C:\home  으로 이동

$ ls -la         // C:\home  디렉토리에 있는 폴더&파일 보기

$ rm -rf .ssh   // .ssh 및 하위 디렉토리 삭제 ( rm은 지우는 명령어 -rf는 하위폴더도 지우라는 옵션)

$ ls -la         // .ssh폴더를 지운 후 내용물 확인



아래 사진처럼 .ssh 폴더를 없애줍니다. (파일 탐색기에서 삭제해도 상관없음)



자 여기까지 함으로써 원격 저장소에 있는 SSH Key와 로컬에 있는 SSH key를 삭제하였습니다.

원격저장소는 Server를 가르키며 로컬은 자신의 컴퓨터(Client)를 가르킵니다.




2. ssh-key 생성 및 등록하기


Local에서 ssh key를 생성하여 Server에 다시 등록하는 과정을 진행합니다.


*****   주의사항   ******

반드시 Local과 Server의 쌍은 같아야 합니다. 같이 생성된 키여야 됩니다. 다른장소, 다른시간에 생성된 키와는 pair를 이룰 수 없습니다. (git-bash로 생성한 것과 puttyget을 이용하여 만든 key는 pair를 이룰 수 없음!!!)



.ssh 폴더를 만들고 .ssh폴더로 이동하여 ssh-key를 생성해줍니다.

경로를 옮기지 말고 c/home 경로에서 다음과 같이 명령어를 입력합니다.

$ mkdir .ssh             // .ssh 폴더를 새로 생성 (이미 있을 경우 생성 안됨)

$ cd .ssh                // .ssh 폴더로 이동

$ ssh-keygen -t rsa    // ssh-key를 생성하는 명령어

(Enter)                   // /c/home/.ssh/id_rsa 로 생성할 경로가 맞는지 물어본다. Enter 입력

(Enter)                   // 비밀번호를 지정하지 않을 것이기 때문에 Enter 입력

(Enter)                   // 비밀번호 재확인, Enter 입력

$ ls                      // c/home/.ssh 폴더에 id_rsa id_rsa.pub가 생성됬는지 확인




공개키 (id_rsa.pub) 를 확인하고 마우스 우클릭 후 복사 또는 Cntrl + C 로 복사합니다.

$ cat id_rsa.pub         // id_rsa.pub 의 내용을 console 화면에 출력




Server에 공개키를 등록합니다. 

SSH KEys -> Addn SSH Key 를 누릅니다.



git-bash에서 복사한 id_rsa.pub의 내용을 붙여넣기 한 후 제목을 입력하고 Add Key를 누릅니다.

***** 주의사항 *****

공개키 생성에는 여러 조건이 있습니다. 띄어쓰기나 개행에 주의하세요.





3. git clone을 통한 source code 다운로드.


여기까지 잘 따라했다면 아무 무리 없이 git clone을 할 수 있습니다. 이제 git clone을 통해 원격 저장소(Server) 에 있는 소스 코드를 로컬(개인 컴퓨터) 에 복사합니다.

먼저 공통된 작업을 위해 통일된 공간에서 새로운 directory를 만들고 git clone을 진행하겠습니다.


$ cd               // 기본 디렉토리로 이동

$ mkdir test       // test 폴더를 생성  (만약 있을 경우 rm-rf test 후 다시 생성)

$ cd test          // test 폴더로 이동

$ git clone git@gitlab.com:hjpark/KITEL_TEST.git      // server 저장소를 로컬로 복사

yes                // ssh-key 맞는지 물어본다. yes 입력



***** 주의사항 *****

git clone이 안되는 경우

1. 인터넷 연결이 안되었을 떄

2. ssh-key에 한글이 들어간 경우 한글이 깨져서 git version에 따라 간혹 안되는 경우가 있다. -> Tortoise 이용

3. 서버 주소 입력이 틀렸을 때

4. Project member 등록이 안되었을 때

5. ssh-key pair가 안맞을 때 -> ssh-key 등록이 잘못되었다. 1번부터 반복





git clone을 성공하여 해당 폴더로 들어가면 (master)라는 것을 볼 수 있습니다. 최초로 clone하게 될 경우 자동으로 master로 받습니다.


Web page에서 master에 위치를 보면 가장 밑에 readme added 부분에 있기 때문이 readme.txt 밖에 없습니다.

우리는 다른 branch로 작업환경을 변경할 것입니다.


$ cd KITEL_TEST

$ ls





짜잔!!! 서버에 있는 file 내용과 비교하였을 때 일치함을 알 수 있습니다.


$ git checkout develop

$ ls






---- 끝 ----

여기까지 ssh-key를 초기화하고 git clone하는 방법을 알아봤습니다.

혹시 여기서 안되는 사람은 댓글로 error log를 보여주고, 한글 문제때문에 안되는 사람은 Tortoise git 을 이용해보길 바랍니다.




2016.1.31 (일) 


모교 동아리(KITEL)에 방문하여 2,3,4학년 대상으로 Git강좌를 하였습니다.


 git을 왜 써야 하는지, 무엇이 좋은지 동기부여를 하였으며, git에 대한 이해를 돕기 위해 상황별 설명과 명령어를 bash로 실습해가면서 약 4시간 반정도 강좌를 진행하였습니다.


 git을 처음 접하는 친구들이라 어려워하지 않을까 걱정도 많았지만, 수업 전에 google docs에 올린 준비사항들을 꼼꼼히 해온 후배들을 보면서 자랑스럽고 뿌듯하였습니다.


 부족한 강좌동안 집중해주고 끝까지 잘 따라온 후배들이 참 자랑스러웠으며 기회가 되면 다른 강좌도 해 줄 생각입니다. 


KITEL 화이팅!!



자료 1. git강좌 ppt

git.pdf


자료 2. 강좌 전 준비사항들



자료 3. 어마어마한 git commit 내용들

 


기타. 강좌사진들


다음 강좌 때 또 봐요~~

'Git' 카테고리의 다른 글

006. Tortoise git 한번에 따라하기  (0) 2016.02.16
005. Git-bash 한번에 따라하기  (0) 2016.02.16
004. git server project 생성 및 git clone  (0) 2016.01.27
003. ssh-key 생성하기  (0) 2016.01.25
002. Git 설치하기 - Window  (0) 2016.01.25

1. Project 생성하기


 앞전까지 ssh-key를 등록하는 것 까지 진행했다. git server를 이용하기 위해 git lab에서 project를 생성하는 것을 실습하겠다. 먼저 로그인 후, 오른쪽 상단에 + 버튼을 눌러 새로운 프로젝트를 생성한다.







2. Project 다운받기 ( 원격 저장소 복사 )


프로젝트 이름, 설명, 보안 등급을 설정하고 왼쪽 하단에 Create Project 버튼을 눌러준다.






프로젝트가 생성되었으며 ssh-key가 등록되어 있다면 ssh 주소로 프로젝트를 받을 수 있으며, 

그렇지 않을 경우 https를 눌러서 url로 받으면 된다.






위의 화면에서 스크롤을 내려보면 아래와 같이 초기 설정법이 친절하게 설명되어 있다.

우리는 git-bash를 열어서 2번 "Create a new repository"를 실습한다.





git bash로 실습한 화면




$ mkdir git_work            -> 프로젝트를 받기 위한 git_work 디렉토리 생성

$ cd git_work              -> git_work 디렉토리 진입

$ git clone <ssh 주소>      -> 새로 생성한 server의 ssh 주소를 입력한다

  * 만약 https 주소를 입력할 경우 gitlab의 ID와 PW를 입력해주면 된다.

$ ll                        -> 내용 확인 : New_Test_Project가 생성되었다.

$ cd New_Test_Project      -> git 작업공간 폴더에 진입 (master라는 것이 보일 것이다)

$ touch README.txt        -> README.txt 파일 생성

$ git add --all               -> 추가된 모든 파일을 stage 영역에 저장

$ git commit -m "add README"  -> stage 영역을 "add README"라는 메시지를 붙여서 commit

$ git push -u origin master    -> 원격저장소(origin)의 master branch에 commit된 내용을 올림

$ gitk --all                  -> git bash에 내장된 git GUI를 실행



gitk -> git-bash에 내장된 git의 GUI 버젼.








3. Project에 member 추가하기


 Project의 등급에 따라서 해당 프로젝트에 추가된 멤버인 경우에만 저장소를 다운 받을 수 있는 경우가 있다. private project 일 경우, 반드시 member를 추가시켜 준다.


왼쪽 하단에 Members를 클릭 한 후, 멤버 이름을 검색하고 "Add users to project"를 눌러준다.

해당 멤버에게 master 권한을 줄지, develope 권한을 줄지 정하면 된다.



'Git' 카테고리의 다른 글

005. Git-bash 한번에 따라하기  (0) 2016.02.16
Git 강좌 후기  (1) 2016.02.16
003. ssh-key 생성하기  (0) 2016.01.25
002. Git 설치하기 - Window  (0) 2016.01.25
001. Git 설치하기 - Linux  (0) 2016.01.25

1. SSH (Secure Shell)


- 텔넷의 경우 데이터를 보내는데 암호화 되지 않았기 때문에 비밀번호 노출 등 보안에 취약함

- 원격 터미널 접속 시 Telnet의 보안 취약점을 보완해주는 응용 프로그램

client와 server 모두 ssh 데몬이 실행되고 있어야 ssh 접속 가능

참고) http://blog.naver.com/PostView.nhn?blogId=netmania78&logNo=120048392926




2. SSH-key


비밀번호보다 높은 수준의 보안이 필요할 때 SSH-key로 접속

한번 Server에 SSH키를 등록하고 나면 ID/PW 입력 없이 접속이 가능하다.

SSH 를 이용할 경우 관리에 더 용이하다.


SSH-Key는 일반적으로 두개가 존재하며, 접속시에 두 키를 비교하여 인증한다. 

1. 공개키 (public) -> 모두에게 공개, SSH Server에 등록

2. 비공개키 (rpivate) -> 외부에 비공개, 개인 local에 저장





3. SSH-key 생성하기


1. Linux : ssh-keygen

2. Window : puttygen

3. Window : git 2.7.0v 를 설치 했다면



3-1. Linux에서 ssh-keygen으로 생성하기


$ cd ~/            -> user 디렉토리 이동

$ mkdir .ssh        -> ssh-key 만들 폴더 생성

$ cd .ssh        

$ ssh-keygen -t rsa    -> ssh-key 생성


Generating public/private rsa key pair.

Enter file in which to save the key (/home/hjpark/.ssh/id_rsa):    -> key 생성할 위치 ( 그냥 Enter 입력)

Enter passphrase (empty for no passphrase):                    -> password 입력 (그냥 Enter 입력)

Enter same passphrase again:                                 -> password 재확인

key generated



$ ls -la ~/.ssh                                              -> ssh 키 생성 확인
-> id_rsa(private key)    id_rsa.pub(public key) 

$ git config --global user.sshid "$HOME/.ssh/id_rsa"         -> git config에 등록


만약 ssh-key 인증 오류가 난다면 각 키의 권한을 변경해 볼 것



3-2 Window에서 puttygen으로 생성하기


1) TortoiseGit을 설치 했다면 : Program Files\TortoiseGit\bin\puttygen.exe

2) putty download : http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html



puttygen.exe를 실행시킨다.




마우스를 마구마구 흔들어주세요



공개키가 생성되었다. Save public key와 Save private key를 통해 저장 할 수 있다.




.ppk 파일로 저장되며, puttygen의 Load를 통해 해당 키를 다시 불러 올 수 있다.





3-3 Git 2.7.0 V을 설치 했다면


git bash를 실행하여 다음과 같이 입력한다

$ cd                            -> MINGW32 home 폴더로 이동

$ ls -la                         -> directory 하위 정보 표시

$ cd .ssh

-> id_rsa    id_rsa.pub            -> 고맙게도 이미 생성되어 있다.






4. gitlab에 SSH-Key등록하기


- Github, Gitlab, Tuleap 등의 git server로 사용 할 수 있는 사이트가 많지만 우리는 Gitlab으로 실습한다.

우선 gitlab에 가입을 한 후 개인 계정에 ssh-key를 등록할 것이다.



왼쪽 하단의 자기 ID를 누른 후 Profile Setting을 클릭




왼쪽 중단에 SSH Key를 누른 뒤  오른쪽 상단의 Add keys를 클릭




$cat ~/.ssh/id_rsa.pub 를 통해 화면에 출력 한 뒤

Drag + 오른쪽 마우스 + copy 를 통해 복사하여 붙여넣기 한다.


Key를 생성 할 때 뛰어쓰기나 개행(\n) 등이 들어가면 오류가 나기 때문에 잘 입력하길 바란다.





'Git' 카테고리의 다른 글

Git 강좌 후기  (1) 2016.02.16
004. git server project 생성 및 git clone  (0) 2016.01.27
002. Git 설치하기 - Window  (0) 2016.01.25
001. Git 설치하기 - Linux  (0) 2016.01.25
000. Git  (0) 2016.01.25

+ Recent posts