Можно ли всегда перезаписывать локальные изменения при обновлении из SVN? - PullRequest
6 голосов
/ 14 сентября 2009

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

Можно ли заставить SVN всегда перезаписывать локальный файл файлом в хранилище, даже если есть локальные изменения?

РЕДАКТИРОВАТЬ: Это файл проекта VB6. Они содержат GUID указанных классов ActiveX и их локальных имен файлов. Когда проект открывается, локальные имена файлов автоматически обновляются. Он должен находиться под контролем версий, потому что приложение не может быть построено без него.

Ответы [ 6 ]

4 голосов
/ 14 сентября 2009

Во-первых, мне жаль, что вы работаете в VB6.

Во-вторых, я полагаю, что вам действительно нужно удалить файл перед обновлением. Так что в этом случае у вас может быть файл bat под названием «do update», и вы просто дважды щелкните по нему, вместо того, чтобы фактически использовать TortiseSVN (или что-то еще) для выполнения обновлений. Вы заставляете эту летучую мышь удалить ее, а затем, что неудивительно, обновить.

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

1 голос
/ 14 сентября 2009

Можно ли заставить SVN всегда перезаписать локальный файл одним в хранилище

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

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

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

1 голос
/ 14 сентября 2009

Обновлено : поскольку файл, который вы описываете, генерируется автоматически, лучше всего развернуть файл и предоставить каждой рабочей копии независимую копию. Вам не нужно беспокоиться о сборке проекта без него, так как VB создаст файл заново при необходимости (верно?). Если вы используете непрерывную интеграцию или другой сервер сборки, просто сохраните копию файла на сервере сборки или даже копию в SVN (названную иначе, чтобы она не конфликтовала), которая подходит для вашего сервера сборки, и измените процесс сборки, чтобы переименовать файл как первый шаг.

Например, если ваш файл называется «foo», вы можете сохранить файл «foo.example» в SVN. Затем, когда вы впервые проверяете проект на любом компьютере, первое, что вам нужно сделать, это переименовать «foo.example» в «foo», а затем открыть свою IDE. IDE изменит его, но ваши изменения останутся локальными. Таким образом, они не будут затронуты обновлениями, и если вы добавите "foo.example" в свой список svn:ignore, вам не придется беспокоиться о его случайной регистрации. Единственным недостатком является то, что он делает вашу первоначальную проверку немного более сложным, но это похоже на небольшую цену.

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

1 голос
/ 14 сентября 2009

Я предполагаю, что это файл, который всегда динамически создается / изменяется вашей IDE.

Я думаю, что если вы добавите этот файл в svn: ignore settings, это будет лучше соответствовать вашим потребностям. Посмотрите svn-configuration для более подробной информации. Этот параметр заставляет SVN игнорировать этот файл при добавлении или импорте. С его помощью вы также можете сохранить свои локальные изменения в файле, если у вас возникнет необходимость сделать это в один момент.

0 голосов
/ 14 сентября 2009

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

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

0 голосов
/ 14 сентября 2009

Ну, вы всегда можете использовать Checkout вместо обновления.

Я не уверен на 100%, но поскольку SubVersion хранит различия между файлами, я не уверен, что вы могли бы это сделать Вы также можете использовать возврат к вашему локальному репозиторию.

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