Я хочу, чтобы Subversion зафиксировала файл, даже если он не изменился. Есть ли способ сделать это?
Как я могу заставить Subversion зафиксировать неизмененный файл?
Ответы (11)
Если вы хотите, чтобы содержимое файла оставалось неизменным (это означает, что вы не можете просто изменить пробелы, как предложил Джонсток), вы всегда можете изменить одно из свойств файла.
eg.
svn propset dummyproperty 1 yourfile svn commit yourfile
Это выполнит фиксацию без изменения файла.
Просто убедитесь, что вы не используете одно из специальных свойств svn:
. Все остальное должно быть в порядке.
Изменить: ряд других плакатов спрашивал, почему кто-то захочет это сделать - по-видимому, люди, отметившие этот ответ, также имели те же проблемы.
Я не могу говорить от имени оригинального плаката, но один из сценариев, в которых я видел, как это использовалось, - это попытка автоматической синхронизации действий в репозитории Visual Sourcesafe с репозиторием Subversion.
Что же до ответа, зачем делать принудительные коммиты. Я видел случаи, когда кто-то использовал сообщение фиксации, которое было неправильным или неясным. Приятно, если можно выполнить принудительную фиксацию, где можно исправить эту ошибку. Таким образом обновленное сообщение фиксации попадает в репозиторий, поэтому оно не теряется.
Я испортил это, удалив, а затем повторно добавив оскорбительный файл. Не самый лучший способ сделать это, и, вероятно, он нарушил историю изменений, но он соответствовал моим целям.
Причина желания сделать это: файл был одним из двух исполняемых файлов, созданных из одного источника (с разными установленными #defines). Незначительное изменение источника означало, что один был изменен, другой - нет. Я хотел записать в истории изменений, что я действительно обновил его до последней версии (хотя изменений не было).
Возможно, указание Мортена Холдфлода Мёллера о том, что «файл все еще будет частью новой ревизии», покрывает это указание, но я думаю, что журнал неизмененного файла не содержит комментариев для этой ревизии.
Если это текстовый файл, просто добавьте пробел, например перевод строки.
Ответы на вопросы некоторых людей должны быть возможны: по какой-то причине svn не распознает различия между файлами документов, поэтому я также хотел бы принудительно выполнить фиксацию!
Сейчас я перемещаю документацию из статических каталогов в svn. файлы похожи на UG_v1.2, UG_v1.3 и т. д. Итак, чтобы сохранить историю, я беру 1.2, удаляю версию из имени файла, добавляю и фиксирую ее в svn. Затем я беру версию из второй, копирую ее поверх первой и хочу зафиксировать ее и более новую версию. Размер файла и дата создания меняются (не говоря уже о том, что находится внутри документа), но svn утверждает, что это совершенно тот же файл, и запрещает мне совершать коммит. Когда я вручную меняю документ, svn видит другое. Черт? :>
Я не думаю, что это возможно, но, прежде всего, зачем вам это нужно? Если файл не изменился, его нельзя коммитить.
Если вы действительно хотите, чтобы этот файл был сгруппирован с другими файлами в коммите, вы можете изменить что-то незначительное внутри (например, добавить пробел).
Причина, по которой кто-то хочет зафиксировать неизмененный файл, заключается в непонимании того, как вернуться к предыдущей версии файла.
Например, можно вернуть файл index.html
в ревизии 680, просто обновив его до более ранней ревизии, например 650:
svn update index.html -r 650
но это не решает проблему, потому что:
svn status -u index.html * 650 index.html Status against revision: 680
svn четко говорит, что index.html изменен удаленно и вы не можете его зафиксировать, т.е. он «думает», что index.html старый и его следует обновить до более новой версии. Таким образом, следующий svn update
вернет index.html к версии 680.
Чтобы действительно вернуть файл, вы должны объединить его в обратном порядке:
svn merge -r 680:650 index.html
а затем зафиксировать svn ci -m "Reverted to r650" index.html
На самом деле, я нашел причину для принудительного коммита. Вероятно, это не лучшая практика, но мы используем Truecrypt (http://www.truecrypt.org/) тома в SVN, потому что нам нужно обеспечить строгую безопасность некоторых сценариев оболочки, поскольку они содержат конфиденциальную информацию. Когда создается том Truecrypt, его двоичные данные остаются неизменными независимо от того, что вы с ним делаете. Фактически, я могу изменить содержимое тома, но объем никогда не изменится.
Изменение свойства НЕ приведет к принудительной фиксации.
TortoiseSVN 1.4.5, сборка 10425 - 32-разрядная версия, 26.08.2007, 11:14:13
У меня такая же проблема с томом trueCrypt.
Я добавил новое свойство (как было предложено выше) «forceCommit1», и им я смог зафиксировать файл тома. но зафиксировано только свойство, а не содержимое файла.
Я удалил файл и снова добавил в svn
Я думал, ты сможешь сделать это из командной строки?
svn ci -force <filename>
У меня нет репозитория, чтобы это проверить, поэтому я могу ошибаться.