Alexey Suvorov dev blog

Мой разработческий блог

Archive for Апрель 2015

Из TFS в git + удаляем dll и другие бинарники

with one comment

Я заметил что всегда пропускаю первую часть статьи, потому что там автор рассуждает о том, как он докатился до такой жизни. Но если я открыл статью с определённым заголовком — значит это для меня это уже не важно, я уже ищу решение проблемы а не мотивацию, так что к командам.

Понадобится:
https://github.com/git-tfs/git-tfs
Вот тут берём самую распоследнюю версию https://github.com/git-tfs/git-tfs/releases
Делаем так, чтобы в переменной PATH был путь к директории в которую распакован архив. Проверить можно тем, что команда в консоли
#>git tfs
должна выдать справку.
Команда на

X:\SomeTmpFolder1>git tfs clone http://tfs:8080/tfs/DefaultCollection "$/YourProject
/YourBranch" . --with-branches

Если проект имеет TFS бренчи, например на каждый релиз, то команда clone запускается для самого последнего (DEV или default или main или на что там фантазии хватило) бренча, все остальные бренчи, которые отходили от него будут перенесены git бренчами, для этого указывается —with-branches. У нас на проекте всё собралось само, на соседнем неправильно определились бренчи, так что как повезёт.
Сидим занимаемся своими делами несколько часов (в нашем случае было 7-8), если всё хорошо, то открываем получившийся репозиторий в любом клиенте и проверяем, что всё правильно перенеслось.

Если случилось так, что мы годами складывали в TFS бинарники и нугет пакеты и мы не боимся с ними расстаться (что очень рекомендуется), то выполняем несколько следующих шагов.
Переходим в папку где находятся только что созданный git репозитарий и выполняем
git filter-branch -f -d x:\tmp --index-filter "git rm --cached -f --ignore-unmatch '*.dll'; git rm --cached -f --ignore-unmatch '*.nupkg';" --tag-name-filter cat -- --all
x:\tmp можно так и оставить, главное, чтобы эта папка не существовала
Можно включить другие файлы по маске, думаю очевидно как.
Ждём ещё несколько часов (3-4 в нашем случае), после запускаем

git reflog expire --verbose --expire=0 --all
git gc --prune=0

Получили чистый от бинарников репозитарий, который можно пушать на сервер.

Информацию по удалению брал отсюда: http://blog.gbacon.com/2009/08/git-shrinking-subversion-import.html

Written by alexeysuvorov

16.04.2015 at 5:38 пп

Опубликовано в Uncategorized