Subversion - работа с генерацией кода - PullRequest
9 голосов
/ 17 мая 2009

У нас есть платформа веб-приложений, которую мы хотим использовать с Subversion. Мы уже пару раз пытались его настроить, но часть нашего приложения, генерирующая код, вызывает проблемы.

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

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

Есть предложения, как решить эту проблему в Subversion?

Ответы [ 6 ]

24 голосов
/ 17 мая 2009

Лучший способ решить, должно ли что-то быть в Subversion, - помнить, что это система контроля версий . Если вам не нужно помнить, как оно изменялось со временем, его не нужно указывать в svn. Используйте svn:ignore, чтобы исключить файлы из такого рассмотрения. 1009 *

Это тот случай: вам все равно, как сгенерированные файлы менялись со временем, только оригинальный код, используемый для их создания. Это означает, что они должны быть исключены из Subversion. Вы можете сделать это с помощью ловушки перед фиксацией - например, принудительно запретить фиксацию всех файлов, генерируемых кодом. У меня есть любимая фраза для этой тактики: «Версия рецепт, а не торт».

А как узнать, есть ли у вас последний сгенерированный файл?

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

10 голосов
/ 17 мая 2009

Одним из решений, которое мы рассмотрели, является исключение файлов, сгенерированных кодом

Да! Тысячу раз да! Никогда не делайте контроль версий файлов, которые вы можете генерировать из других файлов. Вместо этого добавьте правила генерации в ваш make-файл (или другой скрипт сборки).

они автоматически добавляются в хранилище

Что автоматически добавляет их? Насколько я помню, мне всегда приходилось добавлять файлы вручную. Если инструмент, который автоматически добавляет, является неправильным, то, возможно, исправление этого инструмента - правильный путь?

если мы не забудем исключить его

У вас есть инструмент генерации, добавляющий комментарий с надписью "файл, автоматически сгенерированный $ TOOL", и добавьте ловушку subversion, которая ищет файлы для этого комментария и отклоняет их. Сделайте подходящие условия для инструментов генерации кода; например: если файл содержит «автоматически сгенерированный» комментарий, добавьте его в любом случае, если он также имеет «svn отклонение кроме» в комментарии к той же строке (строкам).

А как узнать, есть ли у вас последний сгенерированный файл?

Генерируя его по последнему рецепту, который входит в последний коммит subversion.

4 голосов
/ 17 мая 2009

Вы должны использовать svn: ignore , потому что вы действительно не хотите фиксировать автоматически сгенерированные вещи в subversion.

2 голосов
/ 17 мая 2009

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

С помощью кода и xml для генерации в управлении версиями вы всегда можете также генерировать код для каждой версии.

0 голосов
/ 17 мая 2009

Назовите сгенерированный файл чем-то вроде «className.autoGenerated.cs» и добавьте рекурсивный атрибут svn: ignore с соответствующим шаблоном имени «* .autoGenerated.cs».

0 голосов
/ 17 мая 2009

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

Храните логику в сгенерированном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...