Facebook Server Side Architecture Group #SSAG
https://www.facebook.com/groups/serverside/

git4

드디어 Getting Start IntelliJ 시리즈 마지막 Part 입니다. ^^
그 동안 쭈욱 관심 가져 주셔서 감사 합니다.

지금 까지 정리된 것을 말씀 드리자면

이번 시간에는 Part3에서 말했듯이 IntelliJ에서 Git 사용법에 대해서 설명 드리겠습니다.

[– Pre – Requirements ——]

(1) Git 설치

IntelliJ에서 사용을 하기 전에 반드시 Git을 먼저 설치를 해야 합니다.
Git은 OS에 따라서 설치 방법 과 패키지가 틀립니다.

Window 환경같은 경우는 msysGit를 설치 해야 합니다.

※ Mac 사용자 분들은 git-osx-installer를 설치 하시면 됩니다.
최신 msysGit 버전을 다운로드 받습니다.

http://code.google.com/p/msysgit/downloads/detail?name=Git-1.8.0-preview20121022.exe&can=2&q=

이미지 25
window 설치 프로그램 이기 때문에 아래의 순서로 설치를 진행 합니다.

이미지 22

이미지 23

이미지 24

설치가 완료 되면 바탕화면에 Git Bash 아이콘 생성 됩니다.
실행을 하면 마치 linux 터미널 모습을 보실 수 있습니다.

$ git config –list

이미지 27

git을 사용하기 위해서 아래의 기본 설정을 반드시 해야 합니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#사용자 정보 입력

$ git config --global user.name "beyondj2ee"

$ git config --global user.email "beyondj2ee@gmail.com"

#쉘 color 지정

$ git config --global color.ui "auto"

#사설 인증서를 사용할 경우 ssl 검증을 클라이언트에서 하지 않음

$ git config --global --bool --add http.sslVerify false

#Http POST 요청 버퍼 사이즈를 설정 한다.

$ git config --global http.postBuffer 524288000

#UTF-8 설정 (Window 환경에서만 해당됨)

$ git config --global i18n.commitEncoding cp949

$ git config --global i18n.logOutputEncoding cp949

 

#intelliJ에서는 ignored 기능이 적용이 되지 않아서 설정해야함

#설정 scope은 global로 적용됨

vi ~/.gitignore_global

target

build

bin

.git

.svn

*.class

*.bak

$ git config --global core.excludesfile ~/.gitignore_global

(2) Github Repository 생성

Git은 로컬에도 Repository가 존재하기 때문에 원격 저장소가 없어도 되지만,
대부분 원격 저장소를 사용을 합니다.

여기서는 무료로 제공되는 Github를 통해서 원격 Repository
를 생성 하겠습니다.

※ Github 계정 및 repository 생성은 완전 쉽습니다. ^^

Github 생성 페이지에 접속 합니다. (https://github.com/users)
그리고 usernameemailpassword 만 입력 하면 됩니다.

--이미지 1

계정 생성 완료 후 우측 상단에 Create a new repo 를 선택 합니다.

--이미지 2

여기서는 Repository name이 제일 중요합니다.  이유는 URL에 포함이 되기 때문입니다.
되도록 짧게 작성을 합니다.
입력이 완료되면 Create repository 버튼을 선택 합니다.

--이미지 3

생성이 완료 되면 Repository 화면으로 이동 하며,
상단에 Repository URL ( https://github.com/beyondj2ee/intellij.git) 을 확인 할 수 있습니다.

--이미지 4

[- Compare Svn with Git ——]

Svn 과 Git에 대해서 비교해서 간략하게 설명 드리겠습니다.

Svn 같은 경우  “workspace“, “index“, “repository”  3개의 저장 영역이 있습니다.

workspace : 원격 저장소로 부터 checkout을 받은 로컬 디렉토리 입니다.
index : 커밋 대상이 대상이 되는 파일들에 대한 메타 정보 입니다.
repository : 원격 저장소 입니다.

신규 파일을 workspace(로컬 디렉토리)에 추가를 합니다.
하지만 파일을 생성한다고 해서 svn이 자동으로 인식하지 못합니다.
그래서 commit 대상 파일 이란것을 add 명령어를 통해서
메타 데이터에 등록을 합니다.

이제 모든 작업을 완료 되면 원격 저장소에 저장을 하기 위해서 commit을 합니다.
즉 Svn에서 말하는 commit은 “원격 저장소에 수정 사항을 영구적으로 저장한다” 입니다.

svn-transport


반면 Git은 전체적으로 SVN  동일한 프로세스로 되어 있습니다.
틀린점이 repository가 2개(local, remote) 입니다.

workspace : 원격 저장소로 부터 checkout을 받은 로컬 디렉토리 입니다.
index : 커밋 대상이 대상이 되는 파일들에 대한 메타 정보 입니다.
Local Repository : 로컬  저장소 입니다.
Remote Repository : 원격 저장소 입니다.

신규 파일을 workspace에 생성 하고 add 명령을 통해서 commit 대상 파일 등록을 합니다.
수정이 완료 되면 commit 명령을 통해서 local repository에 저장을 합니다.
여기서 중요한 점은 위에서 말씀 드렸듯이 원격 저장소가 아닌 로컬 저장소에
저장을 하는 것입니다.

로컬 저장소에 commit이 완료되면 push 명령을 통해서 원격 저장소에
최종 버전을 저장 합니다.

물론 내부적으로 Git에 대한 명령어가 많지만, 아키텍쳐 관점에서 보면
repository가 2개로 분리된것 뿐입니다.

이렇게 분리한 이유는 원격 저장소에 의존하지 않고,
로컬 환경에서 VCS의 기능을 개인이 자유롭게 쓰기 위함 입니다.

git-transport

※ 실생활에 비유 하면 SVN은 모든 주문/판매/정산을 직영점에서만
하는 것이고, Git은 각 대리점에서 주문/판매/정산을 하고, 최종 결과만
본점으로 통보 하는 것이라고 할 수 있습니다.

[– Git Import ——]

Git에서는 Import는 SVN 과 전혀 틀리지만, 결과론적 관점에서는 같습니다.

(1) 자바 프로젝트를 생성 하고 초안 작업을 합니다.
(2) 자바 프로젝트를 Git 로컬 Repository로 인식을 시킵니다.
(3) 작업 했던 내용을 로컬 Repository에 commit 합니다.
(4) 원격 Repository를 생성 합니다.
(5) push 명령을 통해서 로컬 Repository에 내용을 원격 Repository에 반영 합니다.

--이미지 10

자바 모듈을 생성 합니다.

--이미지 12


module3-git 모듈의 로컬 Repository를 생성 합니다.
VCS – Import into Version Control – Create Git Repository …

--이미지 13

module3-git 모듈 디렉토리를 선택 합니다.

--이미지 4

Part3에서 설명 드렸듯이 IntelliJ에서는 모듈 별로 반드시
어떤 VCS 를 사용할지 선택 해야 합니다.

Settings – Version Control로 이동 합니다.
모듈이 VCS를 인식 하기전에 로컬 Repository가 생성이 되었기 때문에
추가하라는 경고 문구를 볼 수 있습니다.

Add root를 선택 합니다.

--이미지 25

--이미지 26

적용이 완료 되면 module3-git의 폰트 색깔이 빨강색으로 변경 됩니다.
폰트 색깔의 의미는 아래와 같습니다.

  • red : workspace file
  • green  : staged file
  • blue  : modified file
  • white : commited file
  • gray : deleted file

--이미지 28

원격 Repository에 push를 하기 위해서는 접속 정보를 git에 등록 해야 합니다.
※IntelliJ는 원격 Repository 접속 정보 등록 기능이 없습니다.

module3-git 모듈 디렉토리로 이동 후 오른쪽 클릭 – Git Bash를 선택 합니다.

--이미지 15

아래와 같이 명령어를 실행 합니다.
※ 반든시 본인이 생성한 원격 Repository URL를 입력 해야 합니다.

1

2

3

4

5

$ git remote remove origin

$ git remote add origin https://github.com/beyondj2ee/intellij.git

$ git config --list

remote.origin.url=https://github.com/beyondj2ee/intellij.git

remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

이제 모든 기본 설정이 완료가 되었습니다. 마지막으로 IntelliJ에서
변경된 내용을 반영 하기 위해서

module3-git 오른쪽 클릭 – Synchronize… 를 선택 합니다.

--이미지 18

원격 Repository에 Push 할때 매번 Github 계정을 물어 봅니다.
IntelliJ에서는 계정 정보를 한번 설정 후 자동으로 로그인 하도록 지원 합니다.

Settings – Version Control – GitHub 에서 계정 정보를 입력 합니다.

--이미지 16

지금까지 정리를 하면 아래와 같습니다.

  • module3-git 자바 모듈 생성
  • 로컬 Repository 생성
  • module3-git 모듈에 VCS for Git 설정
  • 원격 Repository 접속 정보 설정
  • Github 계정 등록

이제 서버로 Push를 하도록 하겠습니다.

module3-git 모듈의  첫번째 하위 디렉토리를 전체 선택 – 오른쪽 클릭 – Git –+Add 를 선택 합니다.

--이미지 21

※ module3-git 모듈 디렉토리를 선택하면 안됩니다. IntelliJ 버그 인지 인식이 되지를 않습니다.

--이미지 22

그다음 module3-git 모듈의  첫번째 하위 디렉토리를 전체 선택
– 오른쪽 클릭 – Git – Commit Directories.. 를 선택 합니다.

--이미지 31

왼쪽 프레임에는 Commit 대상이 되는 소스들이 표시 됩니다.
comment를 입력 합니다. (커밋 메세지)
Commit and Push..“를 선택 합니다.

11이미지 3

commit 완료 후 push 화면이 나옵니다.

오른쪽은 Push 되어질 소스들 입니다.
하단에 Push current… 를 체크 합니다. 위에서 원격 Repository를 설정 했던
alias가 origin 이었습니다.  그래서 origin으로 설정 합니다.

그 다음은 원격 레파지토리의 branch를 설정 합니다. Git에서는 trunk 브렌치라고 하지 않고
master branch 라고 합니다.

즉 “로컬 Repository의 master 브렌치를 원격 Repository의 master 브렌치로
소스를 반영 해라” 라는 뜻입니다.

11이미지 5

push가 완료되면 module의 폰트 색깔은 white 색깔로 변경 됩니다.

11이미지 6

원격 Repository에 반영이 되었는지 확인 합니다.

11이미지 8

[– Git Revert, Add, Commit & Push——]
(1) Revert

새로운 파일 “NewFile.txt“를 생성 합니다.
그런데 빨강색(workspace 영역)으로 표시가 되어야 하는데, 녹색 (staging 영역)으로
표시 됩니다.
이렇게 IntelliJ에서는 신규 파일 추가시 자동으로 staging 영역으로 add가 됩니다.

11이미지 9

11이미지 10

staging” -> “workspace“로 강등(?) 하기 위해서 “revert“를 실행 합니다.
완료가 되면 빨강색으로 표시 됩니다.

11이미지 12

11이미지 13

11이미지 14

(2) Add

파랑색으로 표시된 파일은 기존에 존재 하는 파일이 변경된 것입니다.
빨강색은 신규로 생성된 파일 입니다.

11이미지 15

NewFile.txt“를  “Add” 합니다.

11이미지 17

NewFile.txt“파일이 녹색(staging 영역)으로 변경 된 것을 확인 할 수 있습니다.

11이미지 18

Module3” 파일을 수정하고 저장을 하면 파란색으로 변경 됩니다.
하지만 Git Bash를 통해서 확인 하면 staging 되어 있지 않습니다.

11이미지 19

11이미지 20

즉, IntelliJ에서는 정확하게 Git의 각 단계에 따라서 색깔의 변화가 있는 것이
아니라 New, Updated, Commit 이렇게 구분이 됩니다.
그래서 반드시 작업 후 습관적으로 “add“를 할 필요가 있습니다.

11이미지 22

(3) Commit & Push

Commit을 실행 합니다.

11이미지 24

commit 될 파일을 보면 “NewFile.txt“이 보이지 않습니다. 이유는 staging 영역에 존재 하지 않기 때문 입니다.

11이미지 25

NewFile.txt“를 “Add” 하고 다시 “Commit“을 실행 하면 아래와 같이
대상 파일에 포함이 됩니다.

Commit 메세지를 입력 합니다.
Commit 후에 추후에 Push 할 경우는 “Commit” 버튼을 선택 합니다.

11이미지 29

만약 Commit 과 Push를 동시에 할 경우


11이미지 30

11이미지 31

[– Git Checkout ——]

Git에서 Checkout 기능을 “clone“이라고 합니다. 즉 원격 레파지토리에 있는 소스를
로컬 PC에 데이터를 받으면서 동시에 로컬 Repository도 생성 합니다.

VCS – Checkout from.. – Git을 선택 합니다.

11이미지 33

아래의 정보를 설정 합니다.

Git Repository URL : 원격 Repository URL
Parent Directory : IntelliJ Project 디렉토리 위치
Directory Name : Module 명

11이미지 34

※ Clone를 실행 하기 전에 “Test” 버튼을 선택해서 확인 합니다.

11이미지 35

No“를 선택 합니다.

11이미지 36

Clone“한 소스를 Import 합니다.

--이미지 41
.iml” 파일을 선택 합니다.

11이미지 38

IntelliJ에서 모듈이 생성 되었는지 확인 합니다.

11이미지 39

module3-git” 모듈이 VCS를 git을 사용 하도록 인식 시킵니다.

11이미지 40

원격 Repository에 Push 테스트를 합니다.

11이미지 31

Conclusion

Part4에서는 Git에 대해서 설명 드렸습니다.
사실 IntelliJ 보다 Git에 대한 학습이 더 필요합니다. 최근에 좋은 국내 자료들이
많이 있어서 좀더 쉽게 접근하지 않을까 기대 합니다.

이제 Getting Start IntelliJ를 마무리 하려고 합니다.
개인적으로 전달해드리고 싶은 것들이 Part1 ~ Part4 보다 훨씬 많이 있습니다.

다소 부족하지만 Part1 ~ Part4까지 실습을 해보시면 충분히 본인 스스로
할수 있지 않을까 합니다.

IntelliJ를 구매한지 얼마 안되서 혼자서 많은 삽집을 거듭하다가
정리 차원에서 공유를 하면 어떨까 해서 시작을 했습니다.

특히 IntelliJ 같은 경우는 국내서적도 없고, 외국 서적도 2007년도
버전이라서 많이 틀렸습니다.
Jetbrains 메뉴얼이 있긴 하지만 생각보다 친절하지 않아서(?)
실무적으로 정리하는게 쉽지는 않았습니다.

가끔 “꼭 IntelliJ를 써야 하냐고 ?” 묻는 분들이 계십니다.

저는 그럴 필요가 없다고” 얘기 합니다. 특히나 IDE 같은 경우는 철저하게
개발자 스스로의 영역이라고 봅니다.

즉, 본인이 편한게 장땡 입니다. ㅋㅋ

하지만 제가 IntelliJ를 사용하는 이유는 멋있어 보여서 라기 보다는
확실히 Eclipse 보다 빠릅니다. 그리고 계속 쓰면 쓸수록
개발에만 집중하게 만드는 묘한 매력이 있습니다.

그리고  2013 구글 IO에서 “안드로이드 스튜디오“를 공개 함으로써
IntelliJ에 대한 반응이 더욱 좋아 진것 같습니다.

최근에 저의 생각은 크게 비싸지 않는 다면 상용 제품을 구매해서
사용하자는 생각 입니다.

장기적인 관점에서 더욱 비용을 절약 할 수 있고, 유료이다 보니 더욱 관심을
갖고 사용을 하는 것 같습니다.

마지막으로 IntelliJ를 처음 시작하시는 분들에게 조금이나마 도움을 드린것 같아서
보람을 느낍니다.
감사 합니다.