SVN atomic commit how-to
где я: командная строка Linux
проблема у меня сейчас:
иногда я не мог сделать атомарные коммиты (состоящие из всех изменений, необходимых для одного конкретного билета/задачи), потому что у нас есть некоторые файлы в репозитории, содержимое которых варьируется в локальных средах разработки.
например: database.xml
(dbname, имя пользователя, пароль и т. д.). Я изменяю этот файл в своей локальной среде, и каждый раз, когда мне нужно сделать фиксацию/проверку, у меня есть вручную перечислите все необходимые файлы / папки для фиксации (за исключением локально измененных файлов).
возможно, это неправильное дизайнерское решение и database.xml
должен быть удален из репозитория и изменен на database.xml.template
(хранится в SVN), поэтому этот файл не будет включен для фиксации, пока вы вручную не выполните svn add
за это? Возможно, это неправильный подход-хранить всю эту зависимую от среды информацию в репозитории - в этом случае мы можем сломать все, зафиксировав измененный конфигурация, например..
как я понимаю, svn:ignore
собственность не мог помочь в этой ситуации, потому что его можно использовать только для файлов, которые не хранятся в репозитории..
как можно решить эту проблему?
П. С.: Я использую Ubuntu и в основном чисто командная строка для SVN.
3 ответов
"стандартная" процедура для этого что-то вроде этого (прощая синтаксис SVN, я использовал базар в последнее время):
echo config > database.xml.template
svn add database.xml.template
svn ignore database.xml
svn commit
затем на машине развития каждого человека:
svn checkout
cp database.xml.template database.xml
...edit database.xml...
и когда они совершают,
echo foo > someotherfile
svn commit
на database.xml
файл не будет добавлен в Subversion.
вы должны хранить шаблон в репозитории, но не фактический файл, который необходимо изменить локально.
таким образом, вы можете восстановить первозданный файл, если вам нужно, не рискуя хранить файл в репозитории, которого там не должно быть.
и нет, svn: ignore не поможет вам здесь.
мои 2 цента: прежде всего, вам нужно убедиться, есть ли (простой) способ гармонизировать ваши пути для всех разработчиков, участвующих в вашем проекте. Это может быть та же относительная структура каталогов или какой-то тонкий слой в вашем приложении, который поддерживает некоторые оболочки vars или такие как $home, %USERPROFILE% и т. д. Это было бы намного удобнее с течением времени, чем позволить каждому разработчику иметь дело с собственной неверсионной конфигурацией, и это то, что IDEs пытается предоставить.
В общем, версионные конфигурационные файлы отлично подходят для меня, это просто время, потраченное разработчиком на настройку, и не должно потеряться случайно.