2021.2.2 팀장님 교육내용 정리
GMS project - 나의 담당업무인 Perl로 unitTest module 파일을 작성하는데 앞서,
먼저 전체적인 GMS의 구조를 보았을 때 MVC (Model, View, Controller)의 패턴을 사용하고 그것들을 구현하는 것이 web framework이기 때문에 perl의 Mojolicious를 사용한 웹프레임워크에 대한 이해가 필요하다.
따라서 책임님께서는 오늘 perl의 mojo를 비롯하여 Mojolicious의 간단한 사용법을 교육하려고 계획했으나, project를 진행하면서 사용할 tool인 gitlab에 대해 무지한 우리(인턴들) 때문에 오늘은 git에 대한 교육이 선행되었다.
git이 왜 필요한지부터 간단히 생각해보자면,
이렇게 기존에 중앙집중형 server는 오직 하나의 history만을 가져가고, 만약 같은 project를 작업하는 동료가 같은 file을 수정하여 upload할 경우, 충돌이 일어나게 된다. 또한 이렇게 100명의 작업자가 공동 project를 진행한다고 할 경우, 만약 한명이 잘못된 code를 upload했을 때, 100명의 모든 사람이 그 잘못된 code를 바라보게 된다. 문제가 심각하다.
반면, git은 분산형 관리 시스템을 이용하여 사용자 각각이 repository를 가지고 있고, history역시 개인의 update version별로 갖게 된다. 따라서 개인별 version관리에 용이하고, collision이 일어날 경우가 기존의 VCS방식보다 적다. 그렇기에 우리는 git을 사용한다. (참고로 원초적인 git 개념은 근본적으로 Server-Client 구조를 갖는 program이 아니다. client끼리 작성된 code들을 merge하는 어떠한 일정 공간이 필요할 뿐, server가 필요하진 않다. ) (github, gitlab등 은 git으로 작성된 project들을 upload할 수 있는 서버 공간이다. )
먼저, gitlab - 회사 홈페이지에 들어가서 해당 project(GMS)를 나의 working directory에 clone시킨다.
이 때, git clone 명령어를 이용하는데, clone의 방법은 2가지가 있다.
ssh 또는 HTTP 통신을 이용하여 git 을 가져오고 내보낼 수 있는데, 통상적으로 HTTP가 편하다. 그러나 ssh를 이용하여 clone 할 것이다.
사용자의 home directory에서 (ex - cd /home/dohyunkim/) .ssh directory를 찾는다.
$ cd /home/dohyunkim/.ssh
여기서 id_rsa.pub를 cat으로 열어서 전체 내용을 복사하고, gitlab 내 계정 설정의 ssh키 등록에 붙여넣는다.
이로써 나의 gitalb계정(server)에 나의 ssh 공개키가 등록되었고, 내가 git clone 명령어로 clone을 시도하면, gitlab server는 공개키로 암호화한 메세지를 나에게 보내어 내가 그 암호문을 나의 private key로 복호화할 수 있는지 확인하여 authentication을 마친다. (이후 clone할 수 있음)
server로부터 git을 clone받은 이후 나의 working directory에서 파일 생성 또는 수정을 한다. ---- (작업을 한다.)
이후 어느정도 작업을 진행하여, update할 준비가 되었으면, git add 명령어로 staging area에 upload 한다.
$ git add *
// git add . 은 되도록이면 사용하지 않는 것을 추천. (원치 않는 숨김 파일들까지 전부 add 된다.)
이후 commit을 하는데, 지금까지 몰랐던 option을 알려주셨다.
$ git commit -s
// -s 옵션으로 signed off 를 추가한다. (서명이라고 생각하면 됨.)
// 이후 나오는 vi창에서 commit message를 작성해주면 됨.
commit tip!
첫번째 line -> 명료하게 어떤 내용인지.
두번째 line -> 비워두기.
세번째 line부터~ -> 어떤 commit인지 detail 하게.
이제 여러가지 version을 commit 하였으면, git diff 명령어로 commit한 version들 간의 차이를 볼 수 있다.
$ git diff (이전commit) (최근commit)
// 이전commit과 최근commit 사이에 ...을 붙여서 range 를 비교할 수도 있다.
commit 이후, 원격 repository에 push.
$ git push -u
// -u 옵션은 set upstream 이라는 의미로, 내가 지금 push하는 것을 main branch로 하겠다. 즉 이게 main이다. 라는 뜻.