Внешние SVN (или аналогичные) с общими файлами в одном дереве?

Итак, у меня есть эта дилемма, которую я пытаюсь решить. Я независимый разработчик игр, работающий над 6-7 клиентскими проектами одновременно с игровым движком Unity. Проблема, с которой я сталкиваюсь, заключается в том, что мой общий код синхронизируется между проектами - мое текущее решение очень «ручное» и требует много времени (и подвержено ошибкам, когда я забываю все обновить). Я начал рассматривать внешние SVN как решение, но есть одна проблема. Игровой движок Unity использует файлы *.meta для хранения данных о том, как рассматриваемые файлы используются в каждой игре.

В качестве быстрого примера - вот примерная структура папок:

Проект 1:

  • КОРЕНЬ
  • КОРЕНЬ/Активы
  • КОРЕНЬ/активы/общий код
  • ROOT/Активы/SharedCode/SharedScript.cs
  • ROOT/Активы/SharedCode/SharedScript.meta

Проект 2:

  • КОРЕНЬ
  • КОРЕНЬ/Активы
  • КОРЕНЬ/активы/общий код
  • ROOT/Активы/SharedCode/SharedScript.cs
  • ROOT/Активы/SharedCode/SharedScript.meta

Очевидное/немедленное решение состоит в том, чтобы просто сделать мою папку «SharedCode» внешней SVN. Проблема заключается в том, что файл SharedScript.cs должен быть идентичен в обоих проектах, но файл SharedScript.meta зависит от проекта и автоматически генерируется игровым движком (поэтому я не могу сказать, хранить все мои метафайлы в одну папку где-то вне папки «SharedCode»).

Таких файлов сотни, поэтому мне бы хотелось найти решение, которое не предполагает обработки каждого «общего» файла как внешнего по отношению к себе SVN.

Мое текущее уродливое решение состоит в том, чтобы сохранить все дерево проекта в SVN, и у меня есть подпапка, представляющая собой репозиторий GIT, который игнорирует файлы .meta. Это довольно уродливо, и я часто фиксирую/обновляю основной проект и забываю коммитить/нажимать/вытягивать проект "библиотеки" git.

Любые предложения будут ценны!


person user1348575    schedule 03.06.2012    source источник


Ответы (2)


Почему бы просто не использовать одну систему управления версиями для кода и одну для ресурсов проекта Unity. Затем используйте svn:externals для кода, который необходимо использовать совместно между проектами.

Вы можете игнорировать метафайлы в своем проекте и использовать git для версии метафайлов.

person Kristian    schedule 15.10.2012

Почему бы не сделать вашу папку «SharedCode» внешней SVN, но без файла «SharedScript.meta» (и любых других файлов, которые являются специфическими/автоматически генерируемыми для проекта).

Теперь пусть SharedCode.csproj указывает на несуществующий файл «$(SolutionDir)/‹(blah)/SharedScript.meta». Вы можете просто вручную отредактировать csproj, чтобы сделать это. Обратите внимание, что теперь все ваши решения ДОЛЖНЫ генерировать этот метафайл по этому относительному пути.

Теперь, когда вы добавите этот csproj в решение по вашему выбору, вам нужно будет настроить зависимости проекта, чтобы файл «SharedScript.meta» создавался до создания вашего проекта «SharedCode». Теперь проблем быть не должно.

Надеюсь, это поможет!

person Ani    schedule 03.06.2012
comment
У меня нет контроля над созданием или использованием файлов .meta — игровой движок Unity обрабатывает все это автоматически. Я хотел бы управлять ими вручную, я бы просто создал метафайлы по зеркальному пути (например, Assets/ для реальных скриптов и AssetsMetadata/ для файлов *.meta). Решение, которое я придумал до сих пор, состоит в том, чтобы использовать внешний SVN, а также соединение. Таким образом, внешний вид будет выглядеть как... SVNROOT/Externals/SharedCodeExternalRepo, а затем я бы соединил его с... SVNROOT/Assets/SharedCodeExternalRepo. - person user1348575; 03.06.2012
comment
Не имеет значения - приведенное выше решение все еще должно работать. - person Ani; 04.06.2012
comment
Согласен... как правило, хранить автоматически сгенерированные файлы в системе контроля версий - плохая практика... они могут нанести ущерб кросс-платформенными сборками и слияниями контроля версий. - person Peter Bratton; 04.06.2012
comment
В этом случае у нас просто нет выбора. Файлы .csproj также автоматически генерируются движком, но на самом деле они не используются ни для чего, кроме упрощения редактирования сценариев в среде IDE. Файлы *.meta существуют исключительно для контроля версий; если бы был способ обойти необходимость их использования, мы бы немедленно воспользовались им. Важным моментом является то, что .csproj совершенно не имеет значения, на самом деле он никогда не компилируется, и любое его ручное редактирование A: будет немедленно перезаписано движком, и B: не повлияет на то, как движок фактически использовал код в любом случае. - person user1348575; 04.06.2012
comment
Это проблема, очень специфичная для игрового движка Unity, и начинает казаться, что для нее нет хорошего решения. Спасибо за все предложения в любом случае, я действительно ценю это! - person user1348575; 04.06.2012