Как Вы фиксируете Ошибку Конфликта SVN 409

Я раньше использовал SVN 1.4 на Leopard OS X, и все было прекрасно. Несколько недель назад я установил новую копию OS X 10.6. Версия SVN, который идет с Snow Leopard, 1.6.5. Я шел вперед и создал свою собственную копию с 1.6.6. Я использую созданный в апачском сервере и просто размещаю репозитории локально.

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

Transmitting file data .svn: Commit failed (details follow):
svn: MERGE of '/svn/svn2': 409 Conflict (http://localhost)

Это происходит с моими старыми репозиториями, таким образом, я создал несколько новых. То же соглашение. Я также пытался использовать 1.6.5 версий, которые идут с системой... то же. Наконец, я попытался обновить до последнего стабильного SVN (1.6.9) и все еще получил ту же проблему.

Журналы ошибок Apache следующее для каждой неудавшейся фиксации:

[Mon Mar 29 19:53:10 2010] [error] [client ::1] Could not MERGE resource "/svn/svn2/!svn/act/d399326f-c20f-424f-bb68-3bb40503b5b1" into "/svn/svn2".  [409, #0]
[Mon Mar 29 19:53:10 2010] [error] [client ::1] An error occurred while committing the transaction.  [409, #2]
[Mon Mar 29 19:53:10 2010] [error] [client ::1] Can't open directory '/usr/local/svn/svn2/db/transactions/5-6.txn/\xeb\xa9\x0f\x1f': No such file or directory  [409, #2]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] Could not DELETE /svn/svn2/!svn/act/d399326f-c20f-424f-bb68-3bb40503b5b1.  [500, #0]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] could not open transaction.  [500, #2]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] Can't open file '/usr/local/svn/svn2/db/transactions/5-6.txn/props': No such file or directory  [500, #2]

И от журнала доступа:

::1 - - [30/Mar/2010:13:02:20 -0400] "OPTIONS /svn/svn2 HTTP/1.1" 401 401
::1 - user [30/Mar/2010:13:02:20 -0400] "OPTIONS /svn/svn2 HTTP/1.1" 200 188
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2 HTTP/1.1" 207 647
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2 HTTP/1.1" 207 647
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2/!svn/vcc/default HTTP/1.1" 207 398
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2/!svn/bln/6 HTTP/1.1" 207 449
::1 - user [30/Mar/2010:13:02:20 -0400] "REPORT /svn/svn2/!svn/vcc/default HTTP/1.1" 200 1172

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

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

Любая справка значительно ценилась бы.

Обновление
Я попытался добавить автоуправление версиями к своему svn.conf файлу. Вот то, что мои файлы говорит:

LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
<Location /svn>
  DAV svn
  SVNParentPath /usr/local/svn
  SVNAutoversioning on

  # how to authenticate a user
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile /usr/local/etc/svn-auth-file

  # only authenticated users may access the repository
  Require valid-user
</Location>    

Обновление (Решение)

Я просто хотел обновить это с фактическим решением в случае, если у кого-либо еще есть та же проблема с абсолютно бесполезными сообщениями об ошибках. Проблема была с частями в апреле и апреле-util (как scherand предложена). Я создавал копию из обоих использований пакета зависимостей от подверсии. OS X 10.6 также имеет свою собственную версию. Обе версии были 1.3.8. По-видимому, хотя, я должен был использовать версии, которые использовала апачская установка по умолчанию.

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

./configure --with-apr=/usr/bin/ --with-apr-util=/usr/bin/ --with-ssl

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

Спасибо все для справки!

12
задан NerdStarGamer 9 April 2010 в 16:36
поделиться

4 ответа

Я нахожусь здесь на очень тонком льду (409 не очень конкретно), но я могу сформулировать два вопроса:

  1. Существуют ли какие-либо перехватчики до или после фиксации?
  2. Есть ли " Автоверсия "включена?

Если есть какие-то перехватчики, уверены ли вы, что они не содержат ошибок? Не могли бы вы отключить их для теста? Если автоматическая версия не включена, не могли бы вы попробовать включить ее для теста? Это должно работать в соответствии со строками

<Location /repos>
  DAV svn
  SVNPath /var/svn/repository
  SVNAutoversioning on
</Location>

при использовании mod_dav_svn (см. Ссылку на автоверсию выше).

Возможно, это поможет пролить свет на вашу проблему, и мы (и / или Google :)) могли бы решить эту проблему.

Кстати: журналы, которые вы опубликовали, не относятся к одному и тому же коммиту, верно? Разница во времени была бы огромной?!?

Редактировать: Приношу извинения, если вы обнаружили это давным-давно, но я попробую: Не удалось объединить ресурсы в COMMIT (Apache 2.0. 55) - это то, что Google нашел для меня :)

OP пишет, что «Apache диктует версию APR для использования». Это означает, что вы должны ссылаться на правильную APR-версию при компиляции SVN. Я установил SVN (v1.6.9) через MacPorts в своей системе (OS X 10.6). Я не использую WebDAV или Apache локально, но у меня установлен APR 1.3.12_1 (только для справки). OP предлагает использовать - with-apxs = / path / to / bin / apxs при компиляции SVN, хотя я не уверен, применимо ли это к вашей ситуации (я начал догадываться давно, вы могли заметить :)).

У вас есть шанс проверить APR-версию, которую ожидает Apache, и ту, которая использовалась для построения SVN (например,вы можете использовать порт sudo, установленный апр , чтобы увидеть, какие APR-версии существуют в вашей системе, если вы используете MacPorts)?

Просто для справки, выдержка из Построение Apache так, как вы хотите :

apxs - это автономная утилита для динамической компиляции модулей без необходимости использовать сценарий configure или иметь доступный исходный код Apache . Однако ему нужны файлы заголовков Apache , которые копируются в место, определенное параметром - includedir при установке Apache. Однако важно использовать apxs , который был построен с теми же параметрами конфигурации , что и Apache ; в противном случае это ' сделаю ошибочные предположения о том, где находятся различные места установки Apache.

3
ответ дан 2 December 2019 в 23:31
поделиться

Вы пробовали Версии клиента SVN для OSX? На самом деле это не решение вашей проблемы, но, возможно, альтернатива. У меня и моей команды были некоторые проблемы с тем, чтобы SVN и OSX правильно разговаривали друг с другом, поэтому мы начали искать альтернативных клиентов, и версии отлично работали для нас.

0
ответ дан 2 December 2019 в 23:31
поделиться

Сначала установите базовый уровень. При стандартной установке Snow Leopard (10.6.3) я сделал именно это.

Создан "/etc/apache2/other/svn.conf" с содержимым:

LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
<Location /svn>
    DAV svn
    SVNParentPath /usr/local/svn
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /usr/local/svn/htpasswd
    Require valid-user
</Location>

Создана папка subversion и репозиторий "test":

sudo mkdir /usr/local/svn
sudo svnadmin create /usr/local/svn/test
sudo chown -R _www:_www /usr/local/svn
sudo htpasswd -cb /usr/local/svn/htpasswd testuser testpass

От обычного пользователя, домашний каталог:

macmini:~ jclark$ mkdir Checkout && cd Checkout
macmini:Checkout jclark$ svn --username testuser checkout http://localhost/svn/test
Authentication realm: <http://localhost:80> Subversion repository
Password for 'testuser':
Checked out revision 0.
macmini:Checkout jclark$ cd test && touch test.txt && svn add test.txt && svn commit -m 'test' test.txt
A         test.txt
Adding         test.txt
Transmitting file data .
Commited revision 1.
macmini:test jclark$

Теперь, если все это работал должным образом, значит, у вас есть рабочий репозиторий subversion 1.6.5, обслуживаемый apache. Если этого не произошло, то вы, скорее всего, либо смешиваете поставляемые Apple двоичные файлы / библиотеки svn с вашими собственными (macports и т. Д.) , либо , есть проблемы с разрешениями. Убедитесь, что вы используете двоичные файлы, предоставленные Apple. Apple немного изменяет исходный код, и в прошлом я сталкивался с проблемами совместимости при смешивании «портов» с «стоковыми». Что касается разрешений, apache запускается как пользователь _www, группа _www. Убедитесь, что все файлы и каталоги принадлежат как таковые, и не забывайте обновлять их всякий раз, когда вы используете svnadmin или что-то еще для непосредственного управления репозиторием svn.

Поскольку это работает, переместите репозиторий 'svn2' обратно в / usr / local / svn (если вы еще этого не сделали), сделайте где-нибудь чистую проверку и попробуйте выполнить тестовую фиксацию.

Если у вас все еще возникают проблемы, попробуйте обновить репозиторий.

sudo svnadmin upgrade /usr/local/svn/svn2
sudo chown -R _www:_www /usr/local/svn/svn2

Повторите проверку проверки / фиксации.

В крайнем случае сделайте дамп и снова загрузите репозиторий.

sudo svnadmin dump /usr/local/svn/svn2 > /tmp/svn2.dump
sudo svnadmin create /usr/local/svn/svn3
sudo svnadmin load /usr/local/svn/svn3 < /tmp/svn2.dump
sudo chown -R _www:_www /usr/local/svn/svn3

Повторите проверку проверки / фиксации, на этот раз с / svn / svn3.

Наслаждайтесь исправленным репозиторием ... надеюсь :)

update

В клиенте командной строки Subversion может быть ошибка . После выполнения:

mkdir \!vcc && touch \!vcc/default
svn add \!vcc && svn commit -m 'test'
svn log

Обратите внимание, что вывод svn log (по крайней мере, для меня) ничего не значит. Журнал svn от черепахи в порядке, что означает, что сервер (как указано выше) работает правильно.

Еще можно попробовать получить доступ к репозиторию через «файл» вместо «http». Скопируйте весь репозиторий в свой домашний каталог или в другое место, владельцем которого является ваш пользователь, затем проверьте его (например, svn checkout / Users / Shared / svn / svn2) и попробуйте выполнить фиксацию.

1
ответ дан 2 December 2019 в 23:31
поделиться

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

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

Вторая идея - проверить совместимость версий svn рабочая копия-клиент-сервер-репозиторий. Ребята из Subversion клянутся, что и 1.5 , и 1.6 не нарушают совместимость на уровне репозитория с 1.4 (хотя и делают это на рабочих копиях). Но не помешало бы проверить соответствие формата всего стека. И пока вы это делаете, убедитесь, что созданные вами библиотеки apache совместимы с apache 2.2.11, который идет с 10.6 (опять же, они должны, но вы никогда не знаете)

И, наконец, удачи.

1
ответ дан 2 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: