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

StackOverflow https://stackoverflow.com/questions/206183

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

например.

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>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top