Безопасно ли использовать svn для git-миграции без префикса? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть несколько репозиториев в Subversion, которые я хочу перенести в git. После завершения миграции репозитории svn будут помечены как доступные только для чтения и никогда не будут зафиксированы. В конкретном случае, над которым я работаю, есть две активные ветви, назовем их BranchA и BranchB. После завершения миграции я бы предпочел, чтобы они выглядели как "обычные" ветки git без префикса.

В настоящее время я использую команду:

 git svn clone --prefix=svn/ --stdlayout http://repos-url/ <git-name>

В этом случае мои ветви в конечном итоге называются svn/BranchA и svn/BranchB

Но я бы лучше использовал

 git svn clone --prefix="" --stdlayout http://repos-url/ <git-name>

И пусть они называются BranchA и BranchB в git.

Однако, Документы предостерегают против этого высказывания

Установка префикса (с косой чертой) настоятельно рекомендуется в любом случае ...

Но я не уверен, что понимаю почему. В нем также говорится, что URL SVN будет добавлен как «удаленный», но это не совсем то, что я хочу.

Я беспокоюсь, что с помощью --prefix="" я столкнусь с некоторыми проблемами позже, потому что я действительно не понимаю предупреждение.

Итак, я думаю, мои вопросы:

  • Каковы недостатки использования --prefix=""?
  • Можно ли запретить svn-git сохранять ссылку на репозитории SVN?

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете просто не использовать --prefix вообще. Из документов ...

- префикс =

Это позволяет указать префикс, который предшествует именам пульты, если указаны ствол / ветви / теги. Префикс не автоматически включать завершающий слеш, поэтому обязательно включите его в аргумент, если это то, что вы хотите.

Если вы не хотите добавлять префиксы к именам веток, не используйте --prefix. Это в первую очередь полезно, когда вы зеркалируете репозиторий SVN, чтобы отделить ветки SVN от веток Git. Если вы мигрируете, вам это не нужно.

В конце косая черта дает понять, что если вы скажете --prefix=foo, вы получите fooBranchA и fooBranchB. Git не имеет значения, есть ли в имени вашей ветки косая черта или нет.

В нем также говорится, что URL-адрес SVN будет добавлен как «удаленный», но это не совсем то, что я хочу.

Это также используется для зеркалирования, бесполезно при миграции.

Вы можете просто удалить его позже с помощью git remote rm. Или вы можете игнорировать это. Remotes прикреплены к физическому каталогу .git на вашем диске, они не являются общими. Этот пульт не будет отправлен на сервер Git. У любого, кто клонирует репозиторий, не будет этого svn remote.

Таким образом, вы можете получить «чистый» репозиторий после миграции, просто клонировав его. И вы можете клонировать каталоги.

git clone path/to/migrated/repo path/to/clean/repo

В Bitbucket есть хорошее руководство по переходу с SVN на Git .


В отличие от SVN, где «ветви» - довольно громоздкие вещи, «ветви» Git - это просто метки на реальных ветках. И в отличие от SVN, где история похожа на стопку блинов, которые вы можете добавить только в начало, история Git представляет собой граф узлов и соединений и может быть изменена.

Вместо того, чтобы беспокоиться о том, чтобы сделать это прямо во время миграции, вы можете потом внести небольшие изменения. Например, вы можете смело менять имя ветки в Git после миграции. И вы можете удалить SVN Remote.

...