팀이 TFVC를 Git으로 옮기기로 했다면 가능한 많은 데이터를 옮기고자 할 것이다. 앞에서 git-tfs와 git-tf를 둘 다 설명했지만 여기서는 git-tfs만 사용한다. git-tfs는 브랜치를 지원하지만, git-tf로는 어렵다.
Note
|
여기서는 단방향 변환만 다룬다. 변환한 Git 저장소는 원 TFVC 저장소와 아무런 연결고리가 없다. |
먼저 사용자이름을 대응시킨다.
TFVC Changeset의 Author 필드는 형식이 자유롭지만 Git에는 사람이 읽을 수 있는 이름과 E-mail 주소로 정해져 있다.
이 정보는 커맨드라인 클라이언트인 tf
로 가져온다.
PS> tf history $/myproject -recursive > AUTHORS_TMP
이 명령어는 프로젝트의 모든 Chagneset을 가져와서 AUTHORS_TMP 파일에 저장한다. AUTHORS_TMP 파일에서 두 번째 열의 'User' 정보를 추출해서 사용한다.
추출할 때 아래 이어지는 cut
명령에서 사용할 11-20
과 같은 파라미터를 구하기 위해 몇 번 실험해서 해당 필드를 자를 수 있는 적당한 숫자를 알아내야 한다.
PS> cat AUTHORS_TMP | cut -b 11-20 | tail -n+3 | sort | uniq > AUTHORS
cut
명령어는 각 라인에서 11-20의 문자열만 취한다.
tail
명령어로는 필드 헤더와 밑줄인 윗 두 라인을 건너뛴다.
그 결과를 sort
, uniq
명령에 파이프로 보내서 중복을 지운다. 그리고는 AUTHORS
파일에 저장한다.
그 다음은 수동으로 한다. git-tfs가 필요로 하는 파일의 포맷은 아래와 같다.
DOMAIN\username = User Name <[email protected]>
=
의 왼쪽은 TFVC의 “User” 필드고 오른쪽은 Git 커밋에 사용할 개발자 정보다.
이 파일을 만들었으면 해당 TFVC 프로젝트를 Clone 한다.
PS> git tfs clone --with-branches --authors=AUTHORS https://username.visualstudio.com/DefaultCollection $/project/Trunk project_git
그리고 커밋 메시지 밑에 붙은 git-tfs-id
부분을 지운다.
아래 명령어를 사용하면 된다.
PS> git filter-branch -f --msg-filter 'sed "s/^git-tfs-id:.*$//g"' '--' --all
Git-bash 환경에서 sed
명령어로 “git-tfs-id:” 로 시작하는 줄을 빈 줄로 바꾼다. 그럼 Git은 그 라인을 무시한다.
다 됐다. 리모트를 새로 추가하고 모든 브랜치를 Push 한다. 그리고 나서 팀원들과 Git으로 작업을 시작하면 된다.