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 пытается предоставить.

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