Как обновить файл SVN без выполнения проверки?

Я пишу несколько скриптов для обновления ящика Linux SVN-репо с более новыми версиями xml файлов. Репо огромно, и в той же коробке нет версии проверки. Идея состоит в том, чтобы обновить xml без рабочей копии. Возможно ли это, или мне нужно проверить во временную папку, скопировать/перезаписать, проверить и удалить временную папку?

Изменить: Большое спасибо за ваши ответы.

Я знаю, что вы можете сделать это с помощью API и кода, не уверен, что какая-либо команда SVN делает это...

Большое спасибо.

Ответы

Ответ 1

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

Вы должны сделать чек в Subversion. Вы не можете просто отправлять изменения без рабочей копии. (Не совсем верно, вы можете сделать svn delete и svn mkdir без выписки.)

Однако вы можете ограничить количество файлов, которые будут извлечены с помощью переключателя --depth. Например, вы можете сделать следующее:

$ svn co --depth=empty http://myserver/myrepos/mydirectory

Это будет проверка каталога, но без каких-либо файлов. Затем вы можете сделать svn update только файлы, которые хотите изменить, а затем зафиксировать эти изменения:

$ cd mydirectory            #Enter the empty working copy just checked out
$ svn update fileToChange   #Adds file you want to change to your working dir
$ edit fileToChange.xml
$ svn commit -m "Modified 'fileToChange.xml' with latest version"

Это позволит вам изменить файл fileToChange.xml без необходимости проверки всего каталога.

Ответ 2

Существует способ "обновить" файл без рабочего каталога, но это будет зависеть от того, что вы хотите сделать. В большинстве случаев, когда я делаю некоторые автоматические проверки, я нашел это решение достаточно хорошим:

Вы можете использовать svn import для обновления файлов

Что-то вроде:

svn import -m "updating the xml" local.xml http://server/path/to/repo/server.xml

Поймать, что вы не можете импортировать уже существующий файл, поэтому вам нужно будет удалить удаление и затем импортировать:

svn delete -m "deleting for update" http://server/path/to/repo/server.xml

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

Ответ 3

Вы не можете совершать изменения без рабочей копии. Причина в том, что svn не отправляет файл на сервер, он отправляет дельта (то есть различия). Это предназначено для снижения сетевого трафика, но, очевидно, ему нужно знать предыдущую версию, чтобы рассчитать diff.

Вы можете проверить рабочую копию с использованием разреженных опций, чтобы вы могли создать WC только с этим 1 файлом, нет необходимости проверять весь репозиторий. Альтернативно, вы можете открыть репо с помощью webdav, а затем просто скопировать новый файл поверх старого, а параметр автоматической фиксации будет вычислять diff и проверять файл.

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

Ответ 4

Если у вас есть клиент Subversion 1.8 или более поздний, вы можете добавлять или обновлять один или несколько существующих файлов за раз, не проверяя репозиторий с помощью команды svnmucc put. См. http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html.

Ответ 5

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

Если ваш представитель находится в https://your.domain/myrep, вы можете проверить https://your.domain/myrep/myfolder

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