기트(Git) 주요 개념

참조: http://git.or.cz/course/svn.html

저장소(Repository): 서브버전에서 각각의 프로젝트는 체크아웃하고 커밋하는 중앙에 위치한 단일 저장소에 위치한다. Git는 다르게 동작한다. 각각의 프로젝트 트리(working copy라고 부른다) 복사본을 각자의 저장소에 가지고 있는다. 따라서 로컬과 원격 브랜치를 가질 수 있다. 또한 워킹 카피에 붙어있지 않은 베어 저장소(Bare repository)를 가질 수 있는데, 이 것은 특히 저장소를 공개하고 싶을 때 유용하다.

URL: 서브버전에서 URL은 저장소 위치 식별자와 저장소 내부 경로를 나타낸다. 따라서 저장소의 레이아웃과 그 의미를 구조화 한다. 보통 trunk/, branches/, tags/ 디렉터리를 가지고 있을 것이다. 기트에서 URL은 단순 저장소 위치다. 브랜치와 태그는 항상 내포하고 있다. 브랜치중 하나를 기본으로 사용하고 그 이름이 보통 master다.

리비전(Revision): 서브버전은 리지번을 증가만 하는 정수 id로 식별한다. 대규모 프로젝트에서는 금방 수 백, 수 천이 되는 경향이 있다. Git 같은 분산 시스템에서는 실용적이지 않다. Git는 SHA1 id로 리비전을 식별한다. 16 진수의 기다란 160 비트 숫자다. 처음엔 좀 당황스럽지만 실제로는 그리 방해가 되지 않는다. 최신 리비전을 HEAD로 참조할 수 있고, 그 부모를 HEAD^ 로 참조하고 부모의 부모는 HEAF^^ = HEAD^2 이런식으로 참조할 수 있다. 또한 리비전의 앞 부분 몇 개만으로 참조할 수 있다. 그것으로 식별할 수 있다면 기트가 나머지를 추측할 것이다.

커밋(commit): 각각의 커밋은 author와 committer가 있다. 누가 언제 코드를 변경했고 누가 그것을 커밋했는지 알려주는 정보다.(Git는 메일로 주는 패치를 잘 적용할 수 있도록 설계 했는데, 이런 경우 author와 committer가 다를 수 있다.) git config -I로 이름과 이메일을 확인할 수 있다. 그리고 다음 명령어로 그 정보를 설정할 수 있다.

git config –global user.name “Your Name Comes Here”
git config –global user.email you@yourdomain.example.com

명령어: git command 형태인데, git-command 형태로 사용할 수도 있다.

색상: 다음과 같이 설정하면 컬러풀한 결과를 볼 수 있다. 기본값으로 색상을 사용하지 않는다.

git config –global color.diff auto
git config –global color.status auto
git config –global color.branch auto

비주얼: gitk를 사용해서 저장소를 살펴보면 편리할 것이다. 맥용 gitk 대체 애플리케이션

JUnit에서 setUp() 또는 @Before를 사용하는 이유?

참조: http://stackoverflow.com/questions/512184/best-practice-initialize-junit-class-fields-in-setup-or-at-declaration

JUnit은 각각의 테스트를 독립적으로 테스트하기 위해 테스트 마다 개별적인 객체를 생성합니다. 따라서..

public class SomeTest extends TestCase
{
   private final List list = new ArrayList();

    public void testPopulateList()
   {
       // Add stuff to the list
       // Assert the list contains what I expect
   }
}

이런식으로 테스트를 작성해도

public class SomeTest extends TestCase
{
   private List list;

    @Override
   protected void setUp() throws Exception
   {
       super.setUp();
       this.list = new ArrayList();
   }

    public void testPopulateList()
   {
       // Add stuff to the list
       // Assert the list contains what I expect
   }
}

이렇게 작성한 것과 동일하게 각각의 테스트를 실행하기 전에 초기화 하는 코드를 실행합니다.

그럼 대체 setUp이나 @Before는 왜 사용할까요? 그냥 생성자를 사용하거나 저렇게 필드에 직접 객체를 생성하게 해도 비슷한데 말이죠.

윗 글을 찾아보기 전에는 ‘그냥 tearDown이랑 균형을 맞출려고 만들었나?’, ‘생성자를 쓰면 안 좋은 뭔가가 있나?’ 등등 막연하게 생각하고 있었습니다. 그러다가 도무지 궁금해서 구글신에게 문의했더니 윗 글을 찾을 수 있었습니다.

댓글들을 조사해 본 결과.

1. Exception 발생: setUp()에서 예외를 던지면 JUnit이 유용한 스택 트레이스 정보를 돌려주지만, 생성자에서 예외가 발생하면 그냥 테스트 객체를 못 만드는 것이기 때문에 유용한 정보를 얻을 수 없음.

2. 베스트 프랙티스: 테스트 하려는 클래스의 인스턴스는 테스트 또는 setUp()에서 생성하고, 테스트 대상이 아닌 속성들은 필드에서 직접 new로 생성해도 상관없다.

이 두 가지가 유력해 보이네요.

20090327 GMP

모닝 단어

sign up for a class: 수강 신청하다
elective course: 선택 과목
pre-requisite course: 필수 과목
major in: 전공하다
business administration: 경영학

GER(general education requirement): 교양 과목
enroll in: 수강 신청하다
minor in: 부전공하다
double major: 복수전공
수강취소: drop a class, cancle
청강: seat in a class, monitor

I signed up for five classes in this semester.: 이번 학기 다섯 과목 수강 신청했다.
For each term, you are required to enroll two electives: 한 학기에 선택 과목 두 개씩 들어야해.

스크린 잉글리쉬

I should have done something.(뭐라도 했었어야 했는데)
Hey IQ, you want some?
Scuter, you are alive.
I should kill you.
You and your compulsive(충동적인) eating, you almost got us killed.
Scuter, you gotta go want a diet.
I promise I will.
They are all American flies after all.

팝스 잉글리쉬

브리트니 스피어스-서커스

I’m like the ringleader
I call the shots(명령은 내가 내린다.)
I’m like a firecracker
I make it hot
When I put on a show

Talk Play Learn

Can you give me a hand ~ing?

Can you give me a hand figuring this out?
Can you give me a hand washing my car?
Can you give me a hand setting the table?
Can you give me a hand writing my report?
Can you give me a hand fixing my bicycle?
Can you give me a hand organizing the party?

20090326 GMP

모닝 단어

All-nighter: 밤을 새다.
cram: 벼락치기 하다.
credit: 이수 학점
midterms: 중간고사
GPA: Grade Point Average 평균점수

성적, 학점, 학년: grade
낙제점: flunk
쪽지시험: pop quiz
점수를 짜게 주는 선생님: tough grader

벼락치기 해야돼: I need to cram.
I polled on All-nighter to finish my term-end paper.

스크린 잉글리쉬

Huston tranquility(고요한) base, the eagle has landed.
We are on the moon.
Did you hear something?
I thought I did for a moment there.
Never mind.
We did it commander

팝스 잉글리쉬

브리트니 스피어스-서커스

there’s only two types of people in the world
the ones that entertain
and the ones that observe

well baby I’m a put-on-a-show kinda girl
(I) don’t like the backseat(뒤에 물러나 있는건 싫다.)
gotta be first

Talk Play Learn

Where do you want to ~ ?

Where do you want to go?
Where do you want to seat?
Where do you want to meet?
Where do you want to take a trip?
Where do you want to look around?
Where do you want to go for a beer?
Where do you want to have a party?

JGit 설치

이클립스 업데이트 사이트: http://www.jgit.org/update-site
위 업데이트 사이트를 이용해서 설치하면 됩니다.

그런 다음 Git로 버전 관리할 프로젝트에서 Team -> Share Project -> Git를 선택합니다. 그럼 이제 Team 메뉴에서 Git 명령어 몇 개를 사용할 수 있습니다.

사용자 삽입 이미지사용자 삽입 이미지
아직은… 툴 지원이 Subversion에 비해 미약한 듯 합니다. 특히 Git에서 자주 사용할 것 같은 명령어인 Add, Commit, Pull, Push에 대한 단축키가 지정되어 있지 않다는 것이 좀 걸립니다. 물론 수동으로 단축키를 등록하고 사용하는 방법도 있지만… 조금 귀찮죠.

새로 추가한 파일은 관리 대상이 아니라는 표시가 나오고 관리 중인 코드를 변경하고 아직 commit 하지 않았을 경우 not updated라고 표시해줍니다. 이 상태에서 commit을 하면 not updated인 코드만 commit하고 새로 추가한 파일은 commit하지 않습니다.

오른쪽 조그만 빨간색은 JUnit Max인데 저장하는 순간 바로 테스트를 하고 그 결과를 알려주기 때문에 굉장히 유용한 툴인것 같습니다. 손수 테스트를 돌리지 않아도 되기 때문에 코딩 흐름을 빠르게 이어 나갈 수 있습니다.