Согласование и закрепление изменений в версию ветви

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

По окончании редактирования именованной версии вы можете выполнить процессы согласования и закрепления для слияния ваших правок. Процесс извлечения любых изменений из версии default и слияния в ней изменений из вашей версии называется процессом согласования. После этого вы можете отправить изменения, внесенные в версию default. Это процесс закрепления изменений.

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

Примечание:
В этой статье описывается процесс согласования и закрепления с помощью вкладки Версии. Вы также можете согласовать и закрепить версии с помощью инструмента геообработки Согласовать версии и кнопки Согласовать/Закрепить Согласование и закрепление на вкладке Версии при работе с видом Версии.

Процесс согласования

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

О внесении изменений в способ обработки конфликтов во время операции согласования см. в разделе Опции работы с версиями для редактирования.

Для выполнения процесса согласования необходимо использовать векторные веб-слои с включенной функцией управления версиями. Доступ к команде Согласовать можно получить на вкладке Управление версиями, нажав кнопку Список по источнику данных По источнику данных на панели Содержание. Чтобы начать процесс согласования, щелкните кнопку Согласовать на вкладке Версии. Появится диалоговое окно Согласовать.

Когда появится диалоговое окно Согласовать, вы должны предоставить следующую информацию:

  • Укажите желаемый метод разрешения конфликтов. У вас имеются следующие опции:

    Определять конфликты на этом уровнеФиксировать эти случаи

    Строка (по объекту)

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

    Столбец (по атрибуту)

    Второй пользователь редактирует те же атрибуты объекты или таблицу. Это значение по умолчанию

    Опции для выявления конфликтов

Примечание:

Конфликты всегда разрешаются в пользу редактируемой версии.

Для отмены изменений, внесенных после операции согласования источника данных разветвленных версий, нельзя использовать операции отмены.

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

При наличии конфликтов их можно просмотреть в виде Конфликты.

Процесс согласования только обновляет редактируемую версию: ArcGIS Pro может только произвести поиск конфликтов, он не производит внесение изменений в целевую версию. Закончив согласование и просмотр конфликтов, можно завершить процесс внесения изменений, закрепив свои изменения в целевой версии.

Просмотр конфликтов в виде Конфликты

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

В виде Конфликты содержатся все конфликтующие классы объектов, а также их объекты и строки, которые находятся в конфликте. Конфликты организованы по источнику данных, классу, категории конфликтов и идентификатору объекта (ObjectID). Классы конфликтов представляют собой векторные веб-слои конфликтов для всего сервиса.

Вид Конфликты позволяет выполнять следующее:

  • Определять поля или строки, участвующие в конфликте.
  • Просмотреть конфликты.
  • Пометить конфликты, как просмотренные и не просмотренные.
  • Разрешить конфликты путем указания того, какое представление следует использовать для замены пространственных объектов или атрибутов.

Конфликты возникают в следующих случаях:

  • Один и тот же объект обновляется в текущей версии, которая редактируется, и в целевой версии.
  • Один и тот же объект обновляется в одной версии и удаляется в другой.
  • Топологически связанный объект или класс отношений изменяется в текущей редактируемой версии и в целевой версии.

Вид Конфликты содержит также Дисплей конфликтов (Conflict Display) для просмотра различных представлений для редактирования геометрии. Содержание дисплея конфликтов зависит от того, присутствует ли класс конфликтов в активной карте:

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

Определение полей или строк, участвующих в конфликте

Все конфликтующие классы и объекты перечислены в списке в верхней левой части вида Конфликты. Этот список показывает общее количество конфликтов для векторных веб-слоев для всего сервиса.

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

  • Обновить-Удалить – объект был обновлен в текущей версии и удален в целевой.
  • Удалить-Обновить – объект был удален в текущей версии и обновлен в целевой.
  • Обновить-Обновить – объект был обновлен в обеих версиях: текущей и целевой.

Когда вы выделяете отдельный объект ObjectID в этом списке, то в правой части от списка в виде Конфликты появляются поля и их атрибуты в версии до согласования, конфликтной версии и версии общего предка этого объекта.

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

  • Текущая – представляет текущее состояние объектов и атрибутов в именованной версии. Оно включает в себя любые внесенные вами изменения.
  • Целевая – представляет объекты и атрибуты в целевой версии.
  • Общий предок – представляет объекты и атрибуты, когда версия была первоначально создана или во время последней операции согласования.

Красный индикатор слева от строки означает наличие конфликта. Например, если геометрия объекта редактировалась в каждой версии, рядом с полем Shape появится красная точка.

Если конфликтовать будут другие атрибутивные поля, то красный индикатор появится слева от строки. Если какой-то объект был удален в любой версии, то для значения атрибута этой версии появится надпись <Deleted>.

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

Примечание:

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

Пометьте конфликты, как просмотренные и не просмотренные

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

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

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

В разветвленных версиях можно также добавить заметку о просмотре. Щелкните правой кнопкой на объекте и выберите Добавить примечание просмотра, а затем введите текст в окно Добавить примечание просмотра. Чтобы изменить имеющееся примечание просмотра, щелкните правой кнопкой на объекте и выберите Изменить примечание просмотра.

Примечание:

Примечания просмотра очищаются при следующей операции согласование и закрепления.

Разрешение конфликтов

При устранении конфликтов вы решаете, какое представление пространственных объектов или атрибутов следует оставить. После операции согласования можно использовать вид Конфликты, чтобы указать представление для сохранения. Имейте в виду, что использование вариантов замены в виде Конфликты – это то же самое, что и выполнение операции редактирования.

В списке Различия щелкните правой кнопкой мыши версию, набор данных, объект или атрибут и выберите один из следующих вариантов замены:

  • Заменить текущей версией
  • Заменить целевой версией
  • Заменить версией общего предка

Ниже приведены различные уровни, на которых можно использовать варианты замены для разрешения конфликтов:

  • Замещение атрибутов

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

  • Замещение пространственных объектов

    Это происходит на уровне строки. Можно заменить весь объект представлением объекта в текущей версии, целевой версии или версии общего предка. Это значит, что все поля в конфликте будут заменены.

  • Замещение на уровне классов

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

    Чтобы выбрать опцию замены на уровне класса, щелкните правой кнопкой имя класса объектов в списке Различия и выберите необходимую версию.

  • Полное замещение

    Это происходит на корневом уровне. Вследствие использования данной опции замещения все конфликтные объекты и классы объектов в списке заменяются выбранным представлением. При наличии нескольких классов объектов и нескольких объектов в конфликте все они заменяются выбранной версией.

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

Фильтрация конфликтов на уровне поля

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

  • Выполняется пакетное обновление по одному полю в разных версиях.
  • Информация записывается в поле на основе изменений, выполненных в данной версии.

Чтобы предотвратить выявление конфликтов при обновлении одного и того же атрибута в родительской и дочерней версиях, можно использовать инструмент Добавить фильтр конфликтов полей, чтобы задать фильтрацию от конфликтов для набора полей. Фильтр конфликтов полей позволяет отметить тегом поле или набор полей в пределах классов объектов, чтобы отфильтровать их при определении конфликтов. Если изменяются только поля с фильтрами конфликтов, то во время операции согласования конфликты возвращаться не будут. Это применимо только в случае, если вы определяете конфликты по атрибуту.

Примечание:

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

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

Инструмент Удалить фильтр конфликта полей может удалить эти фильтры из указанных полей.

Примечание:

Службы с версионными данными ветвей должны быть перезапущены, чтобы получить изменения от инструментов Добавить фильтр конфликта полей или Удалить фильтр конфликта полей.

Для того чтобы узнать, заданы ли фильтры конфликтов для класса объектов или таблицы, можно использовать функцию Python ListFieldConflictFilters.

Разрешение конфликтов с правилами атрибутов

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

Разрешение конфликтов с классами отношений

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

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

Приведем пример того, когда между классами отношений может возникнуть конфликт:

  • В родительской версии вы добавляете целевой объект и связываете его с объектом в исходном классе.
  • В дочерней версии вы удаляете тот же исходный объект, который использовался для связи с новым целевым объектом.
  • Когда эти изменения будут согласованы, в целевом классе обнаруживается конфликт обновить-обновить, а в исходном – конфликт удалить-обновить.

Другой пример:

  • В наборе классов объектов электросетей вы удалили столб, который имеет связь с трансформатором: это вызовет удаление связанного со столбом трансформатора.
  • В другой сессии редактирования, начавшейся в то же время, редактор изменил атрибуты трансформатора, который только что был удален, поскольку вы удалили связанный с ним столб.
  • При согласовании изменений обнаруживается конфликт обновить-удалить в исходном и целевом классах.

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

Закрепление изменений

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

Более подробно о предоставлении доступа

Чтобы закрепить изменения в версии default после согласования и проверки конфликтов, щелкните Закрепить в группе Версии вкладки Версии.

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

Дополнительная информация о процессе закрепления:

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

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