SVN обновление не работает в пост фиксации - PullRequest
2 голосов
/ 30 марта 2009

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

Сначала я сделал

cd /home/user/working/copy
svn update

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

cd /home/user/working/copy
/usr/bin/svn update

но все равно не получилось.

Я изменил разрешения на 777 и запустил скрипт в пустой среде ... и он работает.

Ответы [ 8 ]

5 голосов
/ 30 марта 2009
#!/bin/bash
/usr/bin/svn update /home/user/working/copy

Приведенный выше код должен работать как ловушка после фиксации.

При необходимости добавьте опции --username & --password.

Edit:

См. http://subversion.tigris.org/faq.html#website-auto-update

Серверная программа, выполняющая фиксацию (svnserve или apache), является той же самой программой, которая будет запускать скрипт ловушки после фиксации. Это означает, что эта программа должна иметь соответствующие разрешения для обновления рабочей копии.

Если «рабочая копия», которую необходимо обновить, принадлежит одному и тому же пользователю, то вам НЕ нужно беспокоиться об имени пользователя и пароле.

В FAQ по Subversion предлагается использовать Setuid со следующей программой на Си.

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/",
    (const char *) NULL);
return(EXIT_FAILURE);
}
1 голос
/ 11 марта 2015

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

Конечно, я также каждый раз запускаю chmod -R и chown -R www-data: www-data по мере необходимости.

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

наконец, следующие шаги хорошо работают для меня:

в режиме запуска после фиксации

export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/] # heading tail slash
/usr/bin/svn checkout [source path]

один раз, затем обновите хук после фиксации до

export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/]
/usr/bin/svn update

сейчас это работает, и я слишком устал, чтобы найти основную причину. потратил целый день только на 'svn update'

1 голос
/ 30 марта 2009

Если вы не используете рабочую копию самостоятельно, вы можете chown рабочую копию для пользователя, который запускает скрипт-хук

1 голос
/ 30 марта 2009

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

Вы не должны делиться рабочими копиями среди нескольких пользователей . Если вам действительно нужно, то просто дать разрешение на чтение / запись каждому пользователю недостаточно. Вам также необходимо убедиться, что никто из пользователей не создает файлы, недоступные для других пользователей. Для этого вам нужно написать сценарии-оболочки для команд svn, которые задают правильный umask , или дать всем вовлеченным пользователям возможность действовать как один конкретный пользователь через sudo .

0 голосов
/ 20 апреля 2010

Этот скрипт лучше, потому что он обновляет только необходимые файлы ... http://vidax.net/blog/en/2010/03/subversion-post-commit-hook/

0 голосов
/ 02 апреля 2009

Ответ wcoenen определенно на правильном пути. Самый простой способ обойти эту проблему - добавить пользователя SVN в свою группу. Допустим, ваш хук после фиксации принадлежит пользователю someUser и группе someUser. Добавление сервера SVN в группу someUser и изменение сценария перехвата после фиксации для выполнения в группе позволит решить вашу проблему.

Надеюсь, это имело смысл: P

0 голосов
/ 31 марта 2009

окончательное решение, которое я получил, было смесью некоторых ответов, которые я получил. На моем сервере был запущен apache, как никто, поэтому я создал рабочую копию никем и в группе UserName, а затем изменил ее на 775. Таким образом, ловушка будет работать, а также у имени пользователя будет разрешение на обновление файлов по FTP.

0 голосов
/ 30 марта 2009

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

Я могу ошибаться. Это строго по памяти. Что-нибудь попробовать хотя бы.

...