Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[git] 소스 추적 기준은 파일명이 아니라 파일 내용 Computer & Program

코드를 작성하고 refactoring을 하다보면 폴더/파일명을 변경해야 하는 경우가 많이 생긴다. 하지만 SVN이나 CVS는 어떤식으로 변경됐는지 확인하는 것이 쉽지는 않았다. 왜냐하면 SNV이나 CVS와 같은 다른 VCS들은 일반적으로 변경된 내용을 추척하는 기준이 파일명이다. 어떤 파일명의 내용이 어떻게 바뀌었다를 기준으로 하기 때문에 이름이 바뀌면 난감하다.

CVS와 같은 경우는 파일 마다 버전을 부여해서 관리하기 때문에 파일명이 변경되면 파일을 삭제/추가를 해야 한다. 당연히 새 파일은 새로 버전 관리가 시작되고.. 정말로 새로 추가된 파일인지, 다른 파일의 이름이 변경된 것인지 알 길이 없다.
SVN은 좀 나은게 svn move 명령을 쓰면 파일명을 변경하고 이력을 추적할 수 있다. 헌데 문제는 svn move 명령을 사용하지 않는 경우 SVN은 같은 revision 내에서 추가/삭제된 파일을 일일이 확인해야 하는 문제가 있다. 파일명을 직접적으로 변경하거나 Eclipse 같은 IDE에서 파일명을 변경하면 나중에 commit할 때 일일이 파일명을 찾아야 하는 정말 피곤한 상황이 닥칠 수 있다.


헌데 git 이 녀석은.. 파일 내용을 추적한다. 겁나 멋지다. +ㅅ+
a.html이라고 간단하게 파일을 하나 만들자. 파일 내용은 아무렇게나 적어주자. 내용으로 추적하니 내용이 없으면 추적이 힘들지 모르니 아무거나.. ㅋ 그리고 이 파일을 local repository에 commit해 준다.

$ git add a.html
$ git commit -m 'create a page' a.html


그리고 파일 이름을 바꾸자. 파일 이름을 바꾸는 방법은 git mv 명령을 사용하거나,

$ git mv a.html b.html


아래처럼 직접 파일명을 변경해도 된다. 직접 파일명을 변경하는 경우 변경된 파일이 stage(index)에 등록되지 않았기 때문에 등록/제거해주어야 한다. SourceTree(@AppStore)와 같은 툴을 사용하면 버튼 한 번 클릭으로 간단하게 체크해 주는 기능이 있으니 git add/git rm은 필요 없다. (SourceTree 좋다. Jira 만드는 Atlassian에서 만드는데 branch를 깔끔하게 그려줘서 좋다.)

$ mv a.html b.html
$ git rm a.html
$ git add b.html


자.. 이제 git status 명령으로 상태를 체크해 보자. 파일 내용을 체크해서 a.html 파일이 b.html 파일로 바뀐 것(rename)을 인식했음을 알 수 있다.

$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# renamed: a.html -> b.html
#


b.html 파일 내용을 일부 수정해도 git은 역시나 찾아낼 것이다. git 이 녀석 재밌다.

덧글

댓글 입력 영역

Google AdSense (text/image)