2012-04-17 3 views
9

Я унаследовал проект, сохраненный в CVS. Предыдущий разработчик имеет огромные неуправляемые изменения в своем рабочем каталоге, в том числе удаление тонны файлов, которые я хотел бы проверить. Вот мой план:Могу ли я просто скопировать .git в другой каталог?

  1. cvs checkout the_project.
  2. Следуйте за the remote cvs/local git workflow, инициализируя git repo с нетронутым состоянием проекта.
  3. Скопируйте новый .git в другой рабочий каталог.
  4. Presto! Все удаления/изменения отображаются как неустановленные различия.

Это изначально похоже, что это сработает. Любые серьезные проблемы, о которых я должен беспокоиться?

+1

Я считаю, что это то же самое, что удаление всех файлов из рабочей копии Git и вставка файлов из репозитория CVS. Это должно работать и показывать все изменения, которые были сделаны. – Tadeck

ответ

4

Я делаю что-то подобное все время. Я использую GIT для отслеживания нескольких выпусков и нескольких ветвей из большого проекта SVN. Проект имеет ~ 200 модулей SVN каждый в подкаталоге 'src'. Когда я запустил репозиторий GIT, я проверил v9.4.4 проекта, добавил «git init» .gitignore и .gitattributes, сделал «git add -A» и «git commit -m» v9.4.4 ». Затем I переместил. Вышла из проекта и создала символическую ссылку . Когда вышла версия v9.4.5, я проверил ее, добавив символическую ссылку на теперь общий .git-каталог, добавленный .gitignore и .gitattributes, сделал «git add -A» и «git commit -m» v9. 4.5. На данный момент у меня есть один репозиторий GIT, символически связанный с двумя каталогами.

С помощью этой настройки вы можете выполнять любые операции git, которые не касаются рабочего каталога. Итак, для моего приложения «git diff v9.4.4..v9.4.5» отлично работает. Конечно, вы также можете выполнять операции git, которые касаются индекса и рабочего каталога, но тогда вам нужно быть осторожным, чтобы этот репозиторий находился в правом фиксации для выпуска, в котором вы находитесь.

Я также использовал это для нескольких ветвей. В этом случае крайне важно использовать «git symbolic-ref HEAD refs/heads/a-branch», чтобы изменить ветвь без, касаясь рабочего каталога. Поэтому, когда моя версия проекта s3 появилась, я сделал «git branch s3 v9.4.4», создал мою символическую ссылку .git, сделал «git symbolic-ref HEAD refs/heads/s3» и последовал за ней с помощью «add» и «совершить».

+0

Спасибо за описание вашего конкретного опыта. – chreekat

0

Да, это сработает. Вы, конечно, могли бы сделать и наоборот: удалите все, кроме .git, и вставьте файлы из других источников.

2

Это должно работать без проблем, но вы можете попробовать запустить git fsck --full, чтобы проверить возможность подключения и достоверность объектов в базе данных после этого. Для сравнения также см. Вопрос переполнения стека "Can I copy a Git working copy onto another machine?". Это немного другой сценарий, но относительно сопоставим.

Смежные вопросы