본문 바로가기
프로그래밍 놀이터/Tips

[도서 정리] 9. Git 과 여타 버전 관리 시스템 - ProGit

by 돼지왕 왕돼지 2020. 1. 14.
반응형

[도서 정리] 9. Git 과 여타 버전 관리 시스템 - ProGit



9.1. Git: 범용 Client


* Git 과 Subversion


-

git 이 자랑하는 또 하나의 기능은 git svn 이라는 양방향 subversion 지원 도구이다.

git 을 subversion 클라로 사용할 수 있으므로 로컬에서는 git 의 기능을 활용하고 push 할 때는 subversion 서버에 push 할 수 있다.



-

git 과 subversion 을 이어주는 명령은 git svn 으로 시작한다.

우리가 로컬 브랜치와 머지를 맘대로 쓸 수 있다 하더라도 최대한 일직선으로 히스토리를 유지하는 게 좋다.

git 저장소처럼 사용하지 않기 때문이다.

히스토리를 재작성해서 push 하지 말아야 한다. git 을 사용하는 동료들끼리 따로 git 저장소에 push 하지도 말아야 한다.

subversion 은 단순하게 일직선 히스토리만 가능하다.



-

$ git svn clone url -T turnk -b branches -t tags


이 명령은 git svn init 과 git svn fetch 명령을 순서대로 실행한 것과 같다.

subversion 이 어떤 브랜치 구조를 가졌는지 git 에 알려준다.

subversion 표준 형식과 다르면 옵션 부분에 알맞은 이름을 지정해준다.

표준 형식을 사용하면 간단히 -s 옵션을 사용하면 된다.



-

push 는 git svn dcommit 을 이용한다.

push 하기 전에 upstream 과 머지해야 하는 git 과 달리 git svn 은 충돌이 날 때만 서버에 업데이트할 것이 있다고 알려준다. (subveresion 처럼). 이 점을 꼭 기억해야 한다.


push 시 conflict 가 있다면 git svn rebase 로 머지할 후 다시 push 해주어야 한다.



-

git svn fetch 명령은 가져오기만 하고, git svn rebase 는 pull 의 역할을 한다.



-

git svn 으로 subversion 서버에 push 할 때에는 브랜치를 머지하지 않고 rebase 해야 한다.

subversion 은 일직선 히스토리밖에 모르고, git 의 merge 도 알지 못한다.

머지를 한 경우에는 git merge —squash 한 것 마냥 결과가 합처진 머지 커밋 하나만 볼 수 있다.



-

subversion 의 브랜치는 git 의 브랜치와 달라서 가능한 사용하지 않는 것이 좋다.

그래서 자세한 내용은 생략한다.



-

git svn 명령은 git 으로 전향하기 쉽도록 subversion 에 있는 것과 비슷한 명령어를 지원한다.



-

git svn log 명령은 svn 형식으로 히스토리를 보여준다.

이는 오프라인에서 동작한다. 그리고 서버로 전송한 커밋만 출력해준다.


SVN 의 svn log 명령어는 히스토리 데이터를 조회할 때 서버가 필요하기 때문이다.



-

git svn blame file_name 으로 svn annotate 명령을 흉내낼 수 있다.

이 명령도 아직 서버로 전송하지 않은 커밋은 보여주지 않는다.

$ git svn blame <file_name>



-

git svn info 명령으로 svn info 를 대신할 수 있다.



-

svn:ignore 를 .gitignore 로 만들 수 있다.

git svn create-ignore 명령은 .gitignore 를 만들어준다.

git svn show-ignore 는 리다이렉트 해서 .git/info/exclude 등으로 정보를 옮기는 데 좋다.

$ git svn create-ignore

$ git svn show-ignore



* Git 과 Mercurial


-

DVCS 중 git 이외에는 mercurial 이 가장 많이 사용되는 녀석이며 git 과 닮은 점이 많다.

mercurial 로 코드 관리하는 프로젝트에서 git 을 쓸 수 있다.

git-remote-hg 를 사용하면 된다.



-

자세한 내용은 생략한다.




* Git 과 Perforce


-

Perforce 는 기업에서 많이 사용하는 버전 관리 시스템이다.

Perforce 와 git 을 함께 사용하는 방법은 두 가지다.

첫번째는 Perforce 가 제공하는 git fusion 을 사용하는 방법이다.

두번째 방법은 git-p4 라는 클라이언트 bridge 를 사용하여 git 을 perforce 의 클라로 사용하는 것이다. 이 방법은 perforce 서버를 건드리지 않아도 된다.



-

자세한 내용은 생략!




* Git 과 TFS


-

윈도우에서 개발한다면 MS 의 Team Foundation Server(TFS)를 쓸 가능성이 크다.

TFS 는 결함과 작업 항목을 추적하고, 스크럼 등의 개발 방법을 지원하고, 코드 리뷰와 버전 컨트롤 등을 모아놓은 협업 도구다.


TFVS (Team Foundation Version Control)은 VCS 이고, TFS 는 git 과 tfvs 같은 vcs 를 사용하는 다기능 서버이다.

TFS 에서는 대부분 TFVC 를 사용하지만 2013년 이후에 나온 제품부터는 git 도 지원한다.



-

자세한 내용은 생략한다.







9.2. Git 으로 옮기기


* Subversion


-

git svn clone 명령으로 저장소를 가져오고 나서 subversion 서버는 중지하고 git 서버를 만들고 사용하면 된다.

author 를 매칭하는 작업을 해주는 것이 좋다.

…..




* Mercurial


-

hg-fast-export 툴을 사용하면 된다.

….




* Perforce


-

git-p4 나 Perforce Git Fusion 을 이용하면 된다.

….




* TFS


-

git-tfs, git-tf 를 이용하면 된다.

….




* 직접 Importer 만들기


-

사용하는 VCS 가 다른 종류라면 인터넷에서 적당한 Importer 를 찾아야 한다.

사람들이 잘 쓰지 않는 시스템을 사용하고 있는데 적당한 importer 를 찾지 못했거나 부족해서 좀 더 고쳐야 한다면 git fast-import 를 사용하면 된다.

…..





9.3. 요약



반응형

댓글