Использование git-svn со слегка странным форматом SVN - PullRequest
1 голос
/ 11 июня 2010

Я делаю стажировку, и они используют SVN (хотя было некоторое обсуждение перехода на hg или git, но это не в ближайшем будущем). Мне нравится git, поэтому я хотел бы использовать git-svn для взаимодействия с репозиторием svn и иметь возможность выполнять локальные коммиты, ветки и тому подобное (конечно, перебазировать перед фиксацией в svn). Тем не менее, есть одна небольшая складка, расположение репозитория SVN немного странно. В основном это выглядит так

/FOO
  +-branches
  +-tags
  +-trunk
    +-FOO
    +-myproject

По сути, мой проект застрял в подкаталоге транка, и есть еще один проект, который также является подкаталогом транка. Если я использую git-svn и только клонирую каталог для своего проекта вместо корня, это запутается или вызовет какие-либо проблемы? Мне просто интересно, потому что номера коммитов увеличиваются для всего репозитория, а не только для моего проекта, поэтому коммиты будут отключены или что-то в этом роде? Я, вероятно, не буду выдвигать какие-либо ветви или теги в SVN, потому что я предпочитаю делать это локально в git, и я не знаю, как git-svn работает с ветками и тегами в любом случае, и никто больше не использует их, поэтому я нахожу мало смысла в этом. Спасибо за помощь!

1 Ответ

1 голос
/ 11 июня 2010

Я использую git-svn в многопроектном многоплатформенном репозитории svn.

Обычно у меня есть точка локального git-репо прямо в интересующем каталоге svn-репо, и я отказываюсь от какой-либо встроенной поддержки веток и так далее, хотя я слышу хорошие отзывы о поддержке. Кажется, в документации git-core есть поддержка git svn branch.

Как я это делаю:

git svn init http://repo.farts.com/svn/path/to/the/directory/of/project
git svn fetch

А когда пора совершать ...

git stash
git svn rebase
git stash pop
git commit -am "Some really awesome stuff"
git svn dcommit

У меня не было проблем с этим. Попадание в тайник запускает слияние, если произошли изменения в коде, на который вы перебазировали. Rebase сохраняет историю линейной. Возможно, есть лучший способ сделать это, но я выжил, с описанным выше процессом плюс git mergetool.

Вы также можете посмотреть пользовательские параметры макета, которые поставляются с git svn, чтобы указать, где ствол, ветви и теги связаны друг с другом. Вы можете указать каждый из них отдельно с помощью тегов -T trunk -b ветки -t - они являются относительными по умолчанию, но вы можете указать абсолютные пути.

Также, в качестве совета, я бы лично использовал клиента SVN в зависимости от чувствительности стажировки. Я не являюсь членом добропорядочного гражданина гит-тауна, говоря это, но контроль над источниками может быть основной болью в заднице, а также святой почвой для людей - если это причинит кому-то одну унцию неудобства, его почти не стоит. При этом, если вы можете оставаться независимым и никого не обременять своим выбором инструментов, счастливого пути; -)

Josh

...