2012-03-09 3 views
1

В настоящее время я рассматриваю переход на git, но не могу найти элегантное решение для использования в настоящее время svn-тегов. В моем текущем хранилище у меня естьпроверка всех git-тегов

tags 
tags/1 
tags/1.1 
tags/1.n 
tags/live 
tags/library 
tags/library/1 
tags/library/2 

где 1-1.n являются выпуски, я сливаю последний релиз в живой и библиотека содержит библиотеки для каждой версии может использовать. Я понимаю, как создавать теги 1.n в git, но я изо всех сил пытаюсь понять, как создавать теги live и library.

Должен ли я иметь отдельное репо для этого и вытаскивать теги от 1-1.n в качестве вспомогательных модулей или может прямо сделать это?

+0

Если что-то меняется по истории, то это не должно быть тегом. И библиотеки не должны находиться в их теге. Они должны быть либо частью нормальной структуры репозитория, либо в другом репозитории. Другими словами, у вас беспорядок на руках, и может быть нелегко преобразовать это в git способами, которые имели бы смысл. – svick

+0

В svn эта структура папок работает для нашего стека развертывания и позволяет нам запускать разные версии на одной машине - я понимаю, что это не лучшая структура, но она хорошо работает для того, что нам нужно делать. –

+0

@JakeStride проблема в том, что те вещи, которые вы называете тегами в svn *, не являются тегами * и не могут использоваться как теги в VCS, которые действительно знают, что такое теги. Это просто, что svn невежественен и позволяет вам называть любую старую вещь тегом. – hobbs

ответ

1

Мне кажется, что live должен быть веткой, а не тегом. На всякий случай, когда вы не знаете: в отличие от svn, который рассматривает ветку и теги подобно простой операции копирования дерева (с единственным отличием, которое вы используете при работе с ними), ветви и теги git просто указывают на определенные коммиты, основное отличие состоит в том, что активная ветвь следует за фиксацией, тогда как теги всегда остаются на фиксации, которую они создали против.

Каталог библиотеки не является веткой или тегом. Его можно было бы заменить git-подмодулями, но они сложны с небольшими искателями, чтобы работать, поэтому вы можете избавиться от них, пока не набросите свои навыки немного в общем потоке git. Не поймите меня неправильно; подмодули - это именно то, что нужно для управления зависимостями третьих сторон, но они привыкли к тому, что они будут казаться совершенно таинственными и сломанными, если у вас нет сильной интуиции относительно базовой модели git.

Говоря в более общих терминах, большая вещь, которую вы теряете при переходе от svn в git, - это удобство заранее установленного рабочего процесса. Git позволяет вам следить за общими рабочими процессами svn и многое, многое другое, но вы можете легко сделать яичницу из вашей истории, если не используете какие-либо ограничения на использование git. Вы можете найти очень эффективный рабочий процесс here. Это не единственный возможный рабочий процесс, и он может быть даже не лучшим для вашей ситуации, но он может служить отправной точкой, из которой вы создаете свой собственный рабочий процесс. Например, в нашем магазине, который также перешел из svn, мы придерживались большинства наших коммитов на master, для которых они используют ветку develop, и мы помещаем вещи на ветку release вместо своих master. Таким образом, наш рабочий процесс в основном такой же, как у них, но с другим выбором имен для долгоживущих ветвей.

+0

Спасибо, это действительно полезно и отличное начало, но похоже, что git фактически не позволит нам делать то, что мы хотим, так как мы хотим, чтобы все те теги в одном каталоге одновременно. –

+0

@JakeStride, в git, теги не находятся ни в одной директории. У вашего репозитория и тэгов есть указатели на определенные коммиты в вашем репозитории. Это работает в git, потому что фиксация в git не является линейной: одна команда может иметь несколько предшественников и последователей. – svick

+0

@JakeStride: Вы правы, но обычно вам не нужно, чтобы каталоги отображали теги. Тэги - это всего лишь способ отметить конкретную фиксацию значимым именем. Вы можете перечислить теги так же легко, как 'git tag', и проверить тег с' git checkout '.Вы можете даже иметь несколько рабочих копий в разных тегах, используя 'git clone ; cd ; git checkout '. Если есть другие варианты использования, которые необходимо поддерживать, вы можете добавить их к своему вопросу; Я буду удивлен, если git не сможет что-то сделать. –

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