Как я могу заставить Subversion зафиксировать неизмененный файл? - PullRequest
56 голосов
/ 16 октября 2008

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

Ответы [ 11 ]

64 голосов
/ 16 октября 2008

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

например.

svn propset dummyproperty 1 yourfile
svn commit yourfile

Это выполнит коммит без изменения файла.

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


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

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

5 голосов
/ 18 января 2010

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

4 голосов
/ 21 декабря 2008

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

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

Возможно, точка зрения Мортена Холдфлода Мёллера о том, что «файл все еще будет частью новой ревизии» будет охватывать это указание, но я думаю, что в журнале неизмененного файла не было комментариев для этой ревизии.

2 голосов
/ 04 марта 2010

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

Сейчас я перемещаю документацию из статических каталогов в svn. файлы похожи на UG_v1.2, UG_v1.3 и т. д. Поэтому, чтобы сохранить историю, я беру 1.2, удаляю версию из имени файла, добавляю и фиксирую ее в svn. Затем я беру версию со второго, копирую поверх первого и хочу зафиксировать ее и более новую версию. Изменяется размер файла и дата создания (не говоря уже о том, что находится внутри документа), но svn утверждает, что это совершенно тот же файл, и запрещает мне коммитить. Когда я вручную изменяю документ, SVN видит другое. Черт? :>

2 голосов
/ 16 октября 2008

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

0 голосов
/ 02 декабря 2010

Причина, по которой кто-то хочет зафиксировать неизмененный файл, заключается в непонимании того, как вернуться к предыдущей версии файла.

Например, можно вернуть файл 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

0 голосов
/ 25 июня 2009

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

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

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

0 голосов
/ 02 мая 2009

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

TortoiseSVN 1.4.5, сборка 10425 - 32-разрядная, 2007/08/26 11: 14: 13

0 голосов
/ 02 мая 2009

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

0 голосов
/ 31 октября 2008

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

svn ci -force <filename>

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

...