migrate team foundation to git
기록
팀파운데이션에서 깃랩으로 이력을 포함해 모두 이전하기
준비물 : git-tf
git-tf 는 생명이 끝났다.
그래도 마이그레이션에는 문제가없다.
https://archive.codeplex.com/?p=gittf
(나는 개인 클라우드에 올려놓았다. 위에 사이트가 언제 폭파될지 모르므로...)
1. tfs 에서 clone 하기
git-tf clone http://myserver:8080/tfs/mycollection $/TeamProjectA/Main --deep [targetFolderPath]
ex) git-tf clone http://123.456.789.123:8080/tfs/Platform $/sampleProject --deep D:\projects\sampleProject
여기서 mycollection 은 tfs 경로에서 프로젝트 바로 윗 네이밍이다.
tfs는 보통 경로가 http://[서버URL]:[포트]/tfs/[collection]/[projectname]
$/[프로젝트명]/[브랜치명(option)]
2. Remove trash file
*.vssscc , *.vspscc, *sln 파일에서 GlobalSection(TeamFoundationVersionControl) ... EndGlobalSection
삭제한다.
3. Remote Git 연결 및 푸시
git remote add origin https://[remote git url].git
git push origin master
별첨. (삽질 3일의 결과물)
remote error hasDotgit: contains '.git'
원격저장소에 푸시하는 시점에 위 에러를 일으킬 수 있다.
git 에서는 보안때문에 파일의 경로에 .git이 있는 경우 error 를 일으킨다.
이 문제가 과거에 커밋한 파일들 중 '.git' 경로가 포함된 파일이 있는 이력이 있을경우 무조건 에러를 일으키는데
이 과거이력들까지 모두 삭제해줘야 정상적으로 푸시가 가능한것을 확인했다.
파일을 깨끗이 지우기위해서는 여러 방법이 있다.
1. git filter-branch 이용하기
2. bfg 이용하기 (https://rtyley.github.io/bfg-repo-cleaner/)
git에 있는 파일을 삭제하기위해서는 git 에서 지원하는 filter-branch 를 사용하여도 되지만 bfg 라는 별도의 툴을 사용하면 더 빠르고 편하게 삭제할 수 있다.
유튭 테스트 영상 참고
사용법
java -jar D:\bfg-1.13.0.jar --delete-folders .git --delete-files .git --no-blob-protection D:\sampleProject\.git
참고
git-tf 사용법: https://blog.aliencube.org/ko/2015/05/15/migrating-tfs-repos-to-git-with-whole-commit-histories/
bfg 사용법 : https://stackoverflow.com/a/16842506/13178590