2012-01-25 3 views
1

Мы просто перешли на SVN на работу, я нажал на Mercurial, но это было отклонено на том основании, что никто больше не работал здесь.Продвинутые разработки для разработчиков, использующие SVN

Моя текущая задача требует от меня взломать живое дерьмо из созданной на заказ системы сборки C++, чтобы заставить ее хорошо играть с новой системой управления версиями. Это потребует значительных изменений в кодовой базе.

рабочий процесс, я изо всех сил, чтобы достичь это:

  • Ствол Отделение в некоторой частной области.
  • Hack, в том числе крупного структурного изменения дерева
  • Hack
  • Hack
  • Merge конечного результата обратно в ствол.

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

Вот проблемы, которые я вижу с достижением этого рабочего процесса.

Наш SVN репозиторий структурирована следующим образом:

SVN 
    \_ Project1 
     \_ trunk 
     \_ branches 
     \_ tags 
     \_ shelves 
      \_ dev1 
      \_ dev2 
    \_ Project2 
    . . . 
    \_ Project3 
    . . . 

Проекты 2 и 3 имеют ту же структуру каталогов, как Project 1. Мы создали каталог полки в надежде, что разработчики смогут расшириться и совершить помогать развитию так же, как они могли бы использовать Git или Mercurial. К сожалению, я не вижу способа, которым это может работать с помощью SVN. Проблема в том, что, когда материал передается SVN, другим пользователям не нужно игнорировать его. Поэтому, если я создаю 2 или 3 работающие ветви в Project1-> shelves-> Dev1, то в следующий раз, когда кто-либо еще обновит Project 1 или свою рабочую копию всего репозитория, потребуется кровопролитный возраст, поскольку они должны ждать каждую новую ветку для загрузки. Каждый новый филиал занимает около 5 минут, чтобы обновить, поэтому с полдюжины разработчиков, создающих одну или несколько новых рабочих ведомых отраслей каждый день, он совершенно неработоспособный.

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

Мой другой путь исследования состоял в том, чтобы рассмотреть возможность использования Mercurial или Git для проверки непосредственно из SVN (Mercurial с использованием hgsubversion и Git с использованием git-svn). Оба эти подхода имеют сложности, связанные с объединением ветвей развития обратно в отрасль, которые должны быть переданы SVN, но, несмотря на эту сложность, подход имел некоторые перспективы. До тех пор, пока я не проверил некоторые тесты и не обнаружил, что ни hgsubversion, ни git-svn не обратили внимания на внешние файлы SVN, и я также столкнулся с некоторой документацией, в которой предположилось, что переименование или перемещение файлов в Git не будет должным образом запущено в SVN, т. Е. история файла будет потеряна, что неприемлемо.

Так что прямо сейчас то, что я ищу, это.

  • Проверка моего источника с помощью SVN.
  • Копирование источника в новый каталог.
  • hg инициализировать новый каталог, чтобы дать мне рабочий класс Mercurial, который я могу взломать.
  • Когда я закончил использовать KDiff3 для сравнения моей последней рабочей копии Mercurial с исходным источником SVN.
  • Используйте SVN move/rename/delete для исправления структурных изменений вручную.
  • Скопируйте рабочую копию Mercurial поверх источника SVN и передайте обратно в SVN.

Должен быть лучший способ. Пожалуйста, помогите мне найти его!

ответ

1

Обычно вы бы не проверить весь репозиторий подобного - вы только извлекаете ветвь, с которым вы работаете (и использовать переключатель СВН для перемещения между ветвями)

+0

Ях, вы никогда не проверить всю репо с SVN. Если это то, с чем работают люди, с которыми вы работаете, вам нужно заставить их остановиться. –

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