Как переключить существующие проекты Intellij IDEA с SVN на Git SVN
В настоящее время у меня есть существующие проекты Intellij IDEA, привязанные к репозиторию SVN. Я думаю о переключении этих проектов на использование Git SVN, потому что я нахожу необходимость иметь локальную систему управления версиями, когда я не подключен к репозиторию SVN.
Так как Intellij IDEA не предоставляет мост Git SVN, я запускаю из командной строки следующую команду, чтобы клонировать репозиторий SVN на Git: -
git svn clone --stdlayout --username myuser http://svnrepo/myproject -A authors.txt myproject
После клонирования репозитория SVN я открываю проект на основе Git, используя Intellij IDEA. На данный момент Intellij IDEA жалуется на недостающие каталоги контроля версий. Я узнал, что Intellij IDEA все еще помнит старую конфигурацию SVN. Поскольку проект теперь содержит каталоги .git вместо каталогов .svn, Intellij IDEA запутывается и не знает, как подключиться к каким-либо репозиториям прямо сейчас.
Единственное решение, которое работает для меня, - это сделать следующее: -
- Создайте новый проект (пустой проект) в репозитории SVN.
- Выполните "git svn clone".
- Создайте проект, используя Intellij на нем.
- В этот момент Intellij IDEA обнаруживает каталоги .git и подсказывает, нужно ли добавлять вновь созданные файлы в Git.
- Скопировать все из проекта на основе SVN в проект Git.
Тем не менее, я не могу запустить Git в этом проекте Intellij IDEA на одном компьютере и в то же время использовать SVN в этом проекте Intellij IDEA на другом компьютере. Обе машины должны использовать Git, иначе Intellij IDEA не сможет зафиксировать репозиторий управления версиями. Я в порядке с этим, и я могу использовать Git на всех моих машинах. Тем не менее, я пытаюсь найти способ не создавать новые проекты на основе Git для всех моих существующих проектов на основе SVN. Это очень утомительно, потому что у меня есть несколько проектов SVN, которые мне нужно запустить с помощью Git.
Есть ли лучшее решение для меня переключить мои проекты SVN на Git с помощью Intellij IDEA?
Спасибо.
Ответы
Ответ 1
Вы можете выбрать систему управления версиями для текущего проекта с File | Settings | Version Control
. Этот параметр сохраняется в одном из файлов проекта (.idea/vcs.xml
), поэтому, если вы не выполняете этот файл для управления версиями, вы можете использовать другую систему управления версиями на разных машинах.
Ответ 2
Кстати, вы можете использовать встроенную поддержку Git в IntelliJ Idea. Установите SubGit в ваш репозиторий Subversion и работайте с созданным репозиторием Git, как обычно, т.е. без git -svn вообще.
SubGit работает на стороне сервера и синхронизирует Subversion и репозитории Git при каждой входящей модификации.
Ответ 3
Для проектов на основе файлов вы можете настроить фильтр smudge.
В .git/info/attributes (или .gitattributes) добавьте строку:
/*.ipr filter=vcs
Затем запустите следующее (я храню локальные скрипты в ~/bin, но вы можете помещать их где угодно):
git config --global filter.vcs.smudge /path/to/filter-vcs-git
git config --global filter.vcs.clean /path/to/filter-vcs-svn
Мой фильтр-vcs- git (смажьте строки vcsDirectoryMappings mapping
, чтобы использовать git):
#!/bin/bash
sed 's/vcs="svn"/vcs="Git"/'
Мой фильтр-vcs-svn (очистите строки vcsDirectoryMappings mapping
, чтобы использовать svn):
#!/bin/bash
sed 's/vcs="Git"/vcs="svn"/'
Это работает только в * NIX-системах с sed. Но вы также можете сделать это на окнах, установив sed и написав .bat script, чтобы сделать то же самое, что и сценарии оболочки выше. Фильтры просто берут файл из stdin, фильтруют его и накладывают отфильтрованный файл на стандартный вывод.
В следующий раз, когда вы проверите файл .ipr, он будет отфильтрован, чтобы использовать git
, а когда вы его добавите (git add *.ipr
), он будет очищен, так что в файле с фиксацией используется svn
. Это, похоже, работает со всеми инструментами git (например, git diff
), которые заставляют думать, что в этой строке ничего не изменилось.
Ответ 4
Вы можете использовать раскрывающееся меню VCS в диалоговом окне "Параметры контроля версий"