Что является корректным способом преобразовать удаленные ответвления SVN и теги в локальные ответвления/теги Мерзавца во время SVN к миграции Мерзавца

Что является корректным способом сделать удаленные ответвления/теги, которые существуют после мерзавца-svn init/git-svn выборка в локальные ответвления/теги Мерзавца прежде, чем продвинуть моему удаленному Мерзавцу repo и отказаться от SVN в целом.

Я имею:

  • Выполненный git svn init
  • Обновленный svn-remote "svn" раздел моего .git/config файла к следующему:

    url = file:///Users/Developers/git_transition/svn_repo
    fetch = cascade/trunk:refs/remotes/svn/trunk
    branches = cascade/branches/{5.0GA_CLEANUP,drag-n-drop-def-builder,help-text,hib-annotations,hibernate-annotations,image-editor,ldapconfig,liquibase,move-rename-prototype,progress-bar,progress-bar2,quartz-upgrade,recyclebin,rendering_metrics,shuttle_upgrade,spring3,web-services-no-nuller}:refs/remotes/svn/*
    branches = cascade/branches/{6.x,5.x,4.x,3.x,archive}/*:refs/remotes/svn/*
    tags = cascade/tags/{3.7.x,4.x,5.x,6.x,old-releases}/*:refs/remotes/svn/tags/*
    
  • Выполненный git svn fetch

Делает git-svn clone что-то вне init/fetch, который превращает эти ответвления/теги в локальные?

Я примерил совет Pro Мерзавец, но не было ничего в .git/refs/remotes/svn/каталоге кроме пустого 6.x, 5.x, 4.x, 3.x, теги и каталоги архива. Я действительно проверял, что удаленные ответвления там с git branch -r.

Кто-то предположил, что мне были нужны к систематически контролю все удаленные ответвления как локальные: git checkout -b но я не получил категорический ответ нигде.

Я смог к conver теги при помощи этого сценария:

git for-each-ref --format="%(refname)" refs/remotes/svn/tags/6.x |
grep -v @ | while read tag; do GIT_COMMITTER_DATE="$(git log -1
--pretty=format:"%ad" "$tag")" GIT_COMMITTER_EMAIL="$(git log -1
--pretty=format:"%ce" "$tag")" GIT_COMMITTER_NAME="$(git log -1
--pretty=format:"%cn" "$tag")" git tag -m "$(git log -1
--pretty=format:"%s%n%b" "$tag")" ${tag#refs/remotes/svn/tags/6.x/}
"$tag"; done

для каждой из папок тегов.

7
задан Bradley 8 July 2010 в 17:40
поделиться

2 ответа

Для такой одноразовой операции, прежде чем оставлять репозиторий SVN, я предпочитаю клонировать его с помощью скрипта ruby ​​ svn2git

=== Примеры

Скажите У меня есть этот код в svn:

  trunk
    ...
  branches
    1.x
    2.x
  tags
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

git-svn будет просматривать историю коммитов для создания нового репозитория git.
Он будет импортировать все ветки и теги как удаленные ветки svn, тогда как на самом деле вам нужны локальные ветки git и объекты тегов git.
Итак, после импорта этого проекта я получу:

  $ git branch
  * master
  $ git branch -a
  * master
    1.x
    2.x
    tags/1.0.0
    tags/1.0.1
    tags/1.0.2
    tags/1.1.0
    tags/2.0.0
    trunk
  $ git tag -l
  [ empty ]

После завершения svn2git с вашим проектом вы получите вместо этого следующее:

  $ git branch
  * master
    1.x
    2.x
  $ git tag -l
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0
3
ответ дан 7 December 2019 в 05:17
поделиться

Согласно ответу на список рассылки Git, мне не нужно преобразовывать эти ветки в локальные, прежде чем отправлять их в мое удаленное репо. Мне просто нужно сделать:

git push <remote_git_repo_name> svn/<branch-name>:refs/heads/<branch-name>
3
ответ дан 7 December 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: