Существует ли быстрый способ заблокировать соединительную линию моего репозитория SVN?

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

SVN, "блокирующий" все файлы, не реалистичен (очень долго, так как проект огромен). Я также не полагаю, что блокировка препятствует тому, чтобы кто-то фиксировал новые файлы.

Каков был бы быстрый способ удостовериться, что никто ничего не передает папке, пока я не сделан, что я делаю?

Спасибо

8
задан Michael Hackner 8 February 2010 в 20:18
поделиться

6 ответов

Мы столкнулись с этой проблемой при компиляции наших проектов для сборок выпуска, где свойство сервера сборки (метка проекта CruiseControl.NET) используется как часть сборки и версия установщика.

Решение простое, если вы разветвляете (или помечаете) рабочую копию, например для релизных сборок.

Рабочий процесс:

  1. Оформить новую рабочую копию ствола (или ветви).
  2. Создайте свой выпуск, это обновляет файлы, оставляя вашу рабочую копию в измененном состоянии.
  3. Если ваша сборка прошла успешно, svn скопирует рабочую копию в вашу новую ветку или тег.

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

Чтобы решить эту проблему, можно использовать svn authorization control , добавить пользователя сервера сборки в svn и иметь разные файлы authz для репозитория.

Рабочий процесс:

  1. Замените authz файлом, предоставляющим доступ на запись для пользователя сервера сборки и доступ на чтение для всех остальных пользователей.
  2. Выполните сборку как обычно.
  3. Замените authz файлом, предоставляющим нормальный доступ для всех пользователей.

Обратите внимание, что авторизация svn позволяет управлять на основе пути, поэтому вы можете ограничить это только транком (или где-то еще), чтобы уменьшить влияние на пользователей.

Другой способ использования аналогичного подхода (тот же рабочий процесс) - заменить обработчик предварительной фиксации и проверить пользователя; отклонение фиксации (с соответствующим сообщением об ошибке), если фиксацию выполнял не пользователь вашего сервера сборки. Опять же, это может быть основано на пути (с небольшой дополнительной работой с регулярным выражением), если это необходимо.

6
ответ дан 5 December 2019 в 08:52
поделиться

Если вы делаете сборку релиза, первое, что вы делаете, это проверяете конкретную ревизию.

На самом деле не имеет значения, совершит ли кто-то что-то еще в это время - это не повлияет на вашу сборку.

8
ответ дан 5 December 2019 в 08:52
поделиться

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

Возможности:

  • Эффективное общение с разработчиками.
    • Объявите, что собираетесь делать.
    • Разработчики должны, по крайней мере, знать, что они не должны коммитировать ветку, на которой идет сборка выпуска.
  • Делайте сборки в ветке. Затем пометьте ветку, когда сборка будет завершена.
  • Разработчики выполняют разработку на отдельных ветках. Затем производятся интеграционные слияния в ответвлении с интеграцией (возможно, в стволе ).
    • Разработчики должны знать, что интеграция не должна осуществляться в ответвлении, в котором сборка выпуска находится в процессе разработки.
2
ответ дан 5 December 2019 в 08:52
поделиться

Сначала вы можете попробовать выполнить эти операции с конкретными ревизиями, а не с головой.

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

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

1
ответ дан 5 December 2019 в 08:52
поделиться

В зависимости от того, какой у вас доступ к серверу, отправьте объявление, в котором никому не сообщается о фиксации до определенного времени.

Если вы не можете этого сделать, то выполните оформление / проверку с помощью file: // или file + ssh: // для сборок выпуска и в это время выключите SVN. серверный процесс. (будь то apache или svnserver), а затем перезапустите его, как только сборка будет завершена.

Также не забудьте переделать это так, чтобы не требовалось как можно скорее блокировать репо. (Я понимаю, что это всего лишь временная вещь, которую вы унаследовали)

1
ответ дан 5 December 2019 в 08:52
поделиться

SciPy kmeans2 () имеет некоторые числовые проблемы: другие сообщили сообщения об ошибках, такие как «Матрица не является положительной определённой - разложение Холески не может быть вычислено» в версии 0,6,0, и я только что столкнулся с тем же в версии 0,7,1.

На данный момент я бы рекомендовал использовать PyCluster . Пример использования:

>>> import numpy
>>> import Pycluster
>>> points = numpy.vstack([numpy.random.multivariate_normal(mean, 
                                                            0.03 * numpy.diag([1,1]),
                                                            20) 
                           for mean in [(1, 1), (2, 4), (3, 2)]])
>>> labels, error, nfound = Pycluster.kcluster(points, 3)
>>> labels  # Cluster number for each point
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int32)
>>> error   # The within-cluster sum of distances for the solution
1.7721661785401261
>>> nfound  # Number of times this solution was found
1
-121--1098360-

boost:: spirit:: qi не нуждается в лексере, хотя в качестве переднего плана можно использовать boost:: spirit:: lex . От введения boost:: spirit:: lex :

Фактически Spirit.Qi позволяет писать парсеры без использования лексера, синтаксический анализ непосредственно входной поток символов, и по большей части это путь Дух используется с момента его изобретение.

boost:: spirit (оригинальный) на самом деле работал так, как вы хотели, но он был перемещен в boost:: spirit:: classic . дух:: qi , дух:: lex - это новый дизайн духа, поэтому я оставил классический вариант:)

-121--1579618-

Файл паролей может быть временно изменен во время выполнения работы. Недостатком является то, что это влияет на весь репозиторий, а не только на одну папку.

0
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

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