Как я могу заставить subversion зафиксировать неизмененный файл?


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

11 52

11 ответов:

Если вы хотите, чтобы содержимое файла оставалось неизменным (это означает, что вы не можете просто изменить пробелы, как предложил джонсток), вы всегда можете изменить одно из свойств файла.

например.

svn propset dummyproperty 1 yourfile
svn commit yourfile

это будет выполнять фиксацию без необходимости изменения файла.

просто убедитесь, что вы не используете один из специальных svn: свойства. Все остальное должно быть в порядке.


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

Я не могу говорить за оригинальный плакат, но один сценарий, в котором я видел это, используется при попытке автоматически синхронизировать действия в репозитории Visual Sourcesafe с репозиторием subversion.

Я заморозил это, удалив затем повторно добавив оскорбительный файл. Не самый лучший способ сделать это, и это, вероятно, сломало историю пересмотра, но это соответствовало моим целям.

причина для этого: файл был одним из двух исполняемых файлов, построенных из одного и того же источника (с разными #defines set). Незначительные изменения в исходный означало одно изменилось, никто не. Я хотел записать в истории, что я обновил его до последней версии (хотя изменение.)

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

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

Если это текстовый файл, просто добавьте некоторые пробелы, такие как подача строки.

отвечая на некоторые вопросы, это должно быть возможно: по какой-то причине svn не распознает различия между файлами doc, поэтому я хотел бы также принудительно зафиксировать!

теперь я перемещаю документацию из статических dirs в svn. файлы как UG_v1.2, UG_v1.3 и т. д. Поэтому, чтобы сохранить историю, я беру 1.2, удаляю версию из имени файла и добавляю и фиксирую ее в svn. Затем я беру ver из второго, копирую его поверх первого и хочу зафиксировать его и более новую версию. Размер файла и дата создания меняются (не говоря уже о том, что находится внутри документа), но 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 ясно говорит, что индекс.HTML-код изменены удаленно и вы не можете зафиксировать его, т. е. он "думает", что индекс.html устарел и должен быть обновлен до более новой версии. Так что следующий svn update принесет индекса.html назад в редакцию 680.

чтобы действительно вернуть файл, вы должны объединить его в обратном порядке:

svn merge -r 680:650 index.html

а потом совершить его svn ci -m "Reverted to r650" index.html

на самом деле, я наткнулся на причину, чтобы сделать Force commit. Это, вероятно, не лучшая практика, но мы ставим Truecrypt (http://www.truecrypt.org/) тома в SVN, потому что нам нужно поддерживать строгую безопасность на некотором сценарии оболочки, поскольку он содержит конфиденциальную информацию. Когда создается том Truecrypt, его двоичные данные остаются неизменными независимо от того, что вы с ним делаете. Таким образом, я могу изменить содержимое тома, но объем никогда не изменяется.

изменение свойства не приведет к принудительной фиксации.

TortoiseSVN 1.4.5, Build 10425-32 Bit, 2007/08/26 11:14: 13

У меня такая же проблема с Томом trueCrypt.

Я добавил новое свойство (как предлагалось выше) "forceCommit1" и им я смог зафиксировать файл Тома. но только свойство было передано не содержимое файла.

Я удалил файл и добавил его снова в svn

Я думал, что вы могли сделать это из командной строки?

svn ci -force <filename>

У меня нет репозитория здесь, чтобы проверить это, поэтому я могу ошибаться.