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

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


person pcorcoran    schedule 15.10.2008    source источник
comment
Я предполагаю, что могут быть очень редкие ситуации, когда это необходимо. Но в большинстве случаев этого не должно быть. Каждая ревизия в SVN содержит снимок каждого файла в репозитории. В некотором смысле, вы ДЕЙСТВИТЕЛЬНО зафиксировали свой неизмененный файл в последней ревизии. Вы просто не внесли никаких изменений (потому что их не было).   -  person Ben    schedule 09.11.2014
comment
Одна из ситуаций, когда это необходимо, - это когда вы переключили кодировку символов для файла, который в остальном не изменился. Это остается незамеченным (по крайней мере, черепахой) SVN.   -  person KlaymenDK    schedule 19.01.2016


Ответы (11)


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

eg.

svn propset dummyproperty 1 yourfile
svn commit yourfile

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

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


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

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

person Andrew Edgecombe    schedule 15.10.2008
comment
Я на это не куплюсь. Даже в контексте интеграции VSS зачем нужно принудительно повторять фиксацию неизмененного файла? - person Chris Becke; 31.10.2008
comment
@Chris Becke Это действительно не имеет значения, не так ли? Ему это нужно, чего, по-видимому, нет у других. Мы можем либо помочь ему, либо проигнорировать вопрос. Некоторые из негативных отзывов, которые я здесь видел, просто смешны. - person Chris; 21.12.2008
comment
В 9 из 10 случаев (которые я обычно округляю до всегда :-)) респондент пытался решить проблему, но сделал это плохо, у него осталось больше проблем, чем в начале, и он просит о помощи. потушить огонь. - person JesperE; 21.12.2008
comment
Я видел такое поведение несколько раз на SO; спрашивающий может по какой-то причине не принять наиболее распространенный ответ (XXX в данном случае не вариант), но не объясняет почему и не уточняет вопрос, когда его просят. - person JesperE; 21.12.2008
comment
Я дам вам причину: какой-то дурак проверил файл, а его системные часы были установлены далеко в будущее. - person Joshua; 26.01.2009
comment
Пример использования: файл (config, xml и т. Д.) Выбран в качестве маяка канонической версии для других приложений. Это указывает на то, что запрошенный код представляет версию rXYZ в SVN. Использование макросов SVN при фиксации ($ Rev: xxxxx $) было бы идеальным для этих целей, при условии, что SVN соизволит обновить неизмененный файл. - person pcorcoran; 07.04.2009
comment
мои 2 цента: я попал сюда, потому что я использую $ Rev $ в моем thesis.tex, который я никогда не меняю, потому что я \ включаю все разделы. В руководстве по SVN предлагается «использовать svnversion плюс некоторые дополнительные инструменты» как часть моего процесса сборки. Я, конечно, могу это сделать, я уже использую код для замены некоторых других идентификаторов перед компиляцией, но это как бы сводит на нет полезность $ Rev $. То есть любой, кто проверяет мое репо и компилирует его, получит хороший номер версии на любой платформе. Использование $ Rev $ в качестве текста в любом случае - это хакерская игра (это должен быть комментарий), поэтому я могу просто изменить пробел. - person BlackShift; 15.01.2010
comment
Какое именно свойство я мог бы изменить без ущерба для проекта? stackoverflow.com/questions/2555711 / - person The Student; 31.03.2010
comment
@Tom Brito: Вы можете создать любое произвольное свойство, поэтому вы не ограничены уже имеющимися свойствами. Единственное ограничение заключается в том, что Subversion резервирует свойства, начинающиеся с svn:, для собственного использования. Помимо этого, и избегая каких-либо свойств, специально используемых в вашем проекте, вы можете создавать все, что захотите. Взгляните на svn help propset для получения более подробной информации. - person Andrew Edgecombe; 01.04.2010
comment
Спасибо за хороший ответ. Добавление новой собственности - отличное решение. Что касается вариантов использования: вполне возможно, что вы захотите исправить плохой комментарий, не разрешая редактирование свойств ревизии в репозитории (поскольку включение этого параметра упрощает потерю истории). Добавление свойства в соответствующие файлы и повторная фиксация с новым комментарием - полезный способ решить эту проблему. - person Magnus; 11.01.2011
comment
Часто изображения неправильно распознаются как измененные в результате подрывной деятельности. Следовательно, необходимо принудительно выполнить фиксацию. - person Sway; 05.07.2011
comment
Другой вариант использования: я редактировал файл изображения в Photoshop, использовал Photoshop Save for Web, чтобы повторно сохранить файл, удаляя версионный файл. Должен был сработать. TortoiseSVN не распознал обновление и пометил файл как текущий. Я не мог заставить TortoiseSVN распознать, что файл был изменен, даже с помощью копирования и вставки. Таким образом, свойства могут быть единственным вариантом - но действительно ли это фиксирует новую версию файла или просто меняет его свойства? - person Tom Auger; 16.08.2012
comment
О'Рейли использует SVN для управления источниками книг. Если вы забыли добавить orm: commitpdf к комментариям к отметкам, книга не будет создана для проверки (О'Рейли сканирует комментарии в поисках директивы). Итак, это допустимый вариант использования: как мне что-то проверить, чтобы я мог сделать комментарий orm: commitpdf для создания книги. Я столкнулся с этой ситуацией прямо сейчас (отсюда и причина, по которой я попал на эту страницу). - person jww; 29.09.2013
comment
Если вы обновляете свойство, редакция изменяется, но содержимое файла - нет, и файл не загружается повторно. Учитывая различия в хранении SVN, это именно то, что вам нужно - новый revnum, который ссылается на предыдущую версию для содержимого файла. У вас не может быть нулевой дельты, поэтому это решение. - person gbjbaanb; 14.11.2013
comment
еще одна причина сделать псевдо-фиксацию - это проверить скрипты ловушек на стороне сервера. - person David Bonnin; 08.03.2016
comment
Это потрясающе. Мой сценарий таков, что мне просто нужен серверный перехватчик для запуска с некоторыми новыми комментариями. Была начальная проверка. Позже я поместил некоторую информацию в фиктивный комментарий фиксации, который будет прочитан обработчиком сервера. Перехватчик сервера обновляет вики. - person Erik Olson; 05.05.2017

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

person user253217    schedule 18.01.2010
comment
В Git есть простой способ вносить поправки в коммиты. У svn ничего подобного нет? Это был бы более простой и лучший способ исправить неправильные / вводящие в заблуждение сообщения фиксации. - person iconoclast; 06.07.2010
comment
См. stackoverflow.com/questions/304383/ - person Raphael Schweikert; 11.02.2011
comment
Да, вы можете редактировать сообщения фиксации в SVN, но тогда это относится к полной фиксации, которая может включать множество других файлов. Повторное создание неизмененного файла по-прежнему будет полезно, если вы хотите предоставить более четкое сообщение о фиксации для конкретного файла, которое не будет применимо ко всем файлам в предыдущем фиксации. - person twm; 12.10.2014

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

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

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

person Mat    schedule 21.12.2008
comment
Изменение источника дает вам возможность точно указать, что вы сделали, то есть это изменение X привело к перекомпиляции двоичного файла Y, но двоичный файл Z не изменился. Принудительная фиксация, когда на самом деле не было изменений в двоичном Z, может на самом деле сбить людей с толку: почему, если не было изменений в двоичном Z, он сделал новую его ревизию? - person JesperE; 16.10.2010
comment
Для этого я использую каталог TAGS. - person ctrl-alt-delor; 27.09.2011
comment
Это древний вопрос и ответ, но я наткнулся на него в поисках чего-то еще, поэтому я хочу указать, что это БУДЕТ уничтожить всю историю изменений для файла, если вы удалите и повторно добавите его. В зависимости от того, чего вы пытаетесь достичь, вероятно, есть лучшие способы. - person Bryan Shaw; 04.08.2015

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

person johnstok    schedule 15.10.2008

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

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

person agata    schedule 04.03.2010

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

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

person rslite    schedule 15.10.2008
comment
О'Рейли использует SVN для управления источниками книг. Если вы забыли добавить orm: commitpdf к комментариям к отметкам, книга не будет создана для проверки (О'Рейли сканирует комментарии в поисках директивы). Итак, это допустимый вариант использования: как мне что-то проверить, чтобы я мог сделать комментарий orm: commitpdf для создания книги. Я столкнулся с этой ситуацией прямо сейчас (отсюда и причина, по которой я попал на эту страницу). - person jww; 29.09.2013
comment
Понятно - в этом случае я полагаю, что добавленное к файлу пространство не будет (не должно) иметь большого значения, и это будет проще, чем добавление свойства. По, я бы в любом случае использовал для этого свойство, а не комментарий. Означает ли это, что вам нужно не забывать добавлять этот текст каждый раз, когда вы фиксируете файл? - person rslite; 05.10.2013
comment
Означает ли это, что вам нужно не забывать добавлять этот текст каждый раз, когда вы фиксируете файл? - Да. - person jww; 05.10.2013
comment
... в этом случае я предполагаю, что добавление пробела в файл не будет (не должно) иметь большого значения, и было бы проще - да, пробел выглядит проще всего. Плюс они используют DocBook, так что он безвреден. - person jww; 05.10.2013

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

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

person Sergiy Sokolenko    schedule 02.12.2010
comment
Сергей - кто-то может просто захотеть что-то зафиксировать, чтобы запустить хук на сервере. Вызов триггера сервера не имеет ничего общего с изменением / возвратом файла. - person jww; 29.09.2013

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

person Community    schedule 01.05.2009
comment
Когда создается том Truecrypt, его двоичные данные остаются неизменными независимо от того, что вы с ним делаете. просто не может быть правдой. Либо изменилось, либо нет. В этом нет никакой магии. Я бы рекомендовал проверить, что вы на самом деле пытаетесь зафиксировать;) - person viraptor; 02.05.2009
comment
См. Здесь, как справиться с этим с помощью TC: flickspin.com/en/information_technology/ - person Nik; 03.08.2010
comment
у вас есть склад, полный идентичных лент с резервными копиями? но с разными датами. Я бы переживал по этому поводу. где-то что-то не так! - person ctrl-alt-delor; 27.09.2011

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

TortoiseSVN 1.4.5, сборка 10425 - 32-разрядная версия, 26.08.2007, 11:14:13

person Community    schedule 01.05.2009

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

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

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

person user41806    schedule 25.06.2009

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

svn ci -force <filename>

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

person endian    schedule 31.10.2008
comment
Нет. Для ci нет опции --force. - person richq; 31.10.2008
comment
единственное правильное в этом ответе - это то, что вы ошибаетесь! :) - person Luca Borrione; 06.09.2013