Настройка контроля версий исходных файлов

Введение

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

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

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

Создание приложения

Перед созданием приложения в AggreGate создайте каталог, в котором сервер имеет права на запись. В примере ниже путь к файлу - file/path/on/host/machine/app. Выберите путь, подходящий для вашей установки.

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

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

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

Окно конфигурации предлагает ряд опций. Сначала перейдите на вкладку Ресурсы (1), добавьте строку в таблицу (2) и щелкните на корневом контексте в поле Ресурсы (3).

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

Первый ресурс, который необходимо захватить, - это модель Additional Data, созданная в предыдущей главе для хранения переменных, не связанных с конкретным устройством. Откройте узел Модели в контекстном дереве, чтобы найти эту модель. После выбора узла отображается его контекстный путь. Нажмите OK, чтобы выбрать эту модель.

Теперь вы видите, что модель Additional Data выбрана в качестве целевого ресурса. Подкатегорию пока можно игнорировать. Это первая версия приложения, поэтому Версия останется 1. Оставьте Зависимости пустым, так как у этой модели нет зависимостей.

Аналогичным образом добавьте строки для моделей Transformer, Inverter и модели панели . Вспомните из предыдущего урока, что инверторы зависят от трансформаторов, а панели - от инверторов. Откройте поле Зависимости для инверторов, щелкнув по указанному значку, и откроется таблица данных для описания зависимостей.

Добавьте строку в таблицу Зависимости и откройте контекстное меню выбора.

Выберите в контекстном меню модель Transform и нажмите OK. Теперь вы должны увидеть Transformer в списке зависимостей (1). Нажмите на значок меню (2), чтобы вернуться к списку ресурсов.

Теперь в таблице ресурсов модель Transformer указана как зависимость от модели Inverter. Теперь добавьте трансформатор и инвертор в качестве зависимостей модели панели. Окно конфигурации должно выглядеть так, как показано ниже.

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

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

Сохранение приложения

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

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

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

application.properties
application.powerStationModels.prs
model.additionalData.prs
model.inverter.prs
model.panel.prs
model.transformer.prs

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

Использование Git

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

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

Linux:

$ cd /file/path/on/host/machine/app

Windows:

$ cd C:/file/path/on/host/machine/app

Остальные команды одинаковы как в Linux, так и в Windows.

Чтобы создать новый git-репозиторий в месте расположения файлов приложения:

$ git init
Initialized empty Git repository in /file/path/on/host/machine/app/.git/

Это создаст git-репозиторий в каталоге app. Сначала проверьте статус репозитория.

$ git status                                                                                      

On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
application.powerStationModels.prs
application.properties
model.additionalData.prs
model.inverter.prs
model.panel.prs
model.transformer.prs

nothing added to commit but untracked files present (use "git add" to track)

Вы можете использовать git add <filename> для добавления каждого из файлов по отдельности или git add . для добавления всех неотслеживаемых файлов в каталоге одной командой.

$ git add .
$ git status

On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: application.powerStationModels.prs
new file: application.properties
new file: model.additionalData.prs
new file: model.inverter.prs
new file: model.panel.prs
new file: model.transformer.prs

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

$ git commit -m "Начальная версия проекта"

[master (root-commit) fcc73d2] Initial Project Version
6 files changed, 10683 insertions(+)
create mode 100644 application.powerStationModels.prs
create mode 100644 application.properties
create mode 100644 model.additionalData.prs
create mode 100644 model.inverter.prs
create mode 100644 model.panel.prs
create mode 100644 model.transformer.prs

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

Изменение приложения

В предыдущем примере мы создали несколько переменных в модели Additional Data. В ожидании импорта исторических данных из удаленного источника добавьте в модель новую переменную outputHistory. Переменная должна содержать поле даты и поле TotalEnergyOutput.

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

В окне Дополнительные свойства вы должны увидеть, что новая переменная доступна.

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

Создание новой версии приложения

Перейдите в приложение Power Station Models и выберите Настроить из контекстного меню.

Перейдите на вкладку Ресурсы (1) окна конфигурации и увеличьте переменную версии Дополнительные данные до 2 (2). Нажмите OK для сохранения и закрытия.

Снова откройте контекстное меню для приложения Power Station Models, но на этот раз выберите Экспорт. Подтвердите правильный каталог экспорта и закройте диалоговое окно об успешном завершении операции.

Фиксация изменений в Git

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

$ git status      

On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: application.properties
modified: model.additionalData.prs

Если вы хотите посмотреть, какие изменения были сделаны, используйте команду git diff <имя файла> перед добавлением файла для фиксации. Например,

$ git diff application.properties

Создаст файл со следующей информацией.

diff --git a/application.properties b/application.properties
index 73af7c2..7e1a6c9 100644
--- a/application.properties
+++ b/application.properties
@@ -1,4 +1,4 @@
-#Thu Nov 3 17:13:27 NOVT 2022
+#Thu Nov 3 21:14:25 NOVT 2022
serverVersion=6.20.00
mainApplicationFileName=application.powerStationModels.prs
dependencies=

Ключевыми для интерпретации в приведенном выше файле являются части, предваряемые знаками + и -, которые, соответственно, указывают на добавленные или удаленные строки. Из приведенного выше фрагмента мы видим, что это обновление приложения просто изменило временную метку в файле application.properties.

-#Thu Nov 3 17:13:27 NOVT 2022
+#Thu Nov 3 21:14:25 NOVT 2022

Если вы изучите изменения в файле model.additionalData.prs, вы найдете несколько строк, описывающих новую переменную, которая была только что добавлена в модель.

Ветви Git

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

В любом случае вам нужно будет создать новую ветку. Создайте новую ветку power_history_variable и перейдите на неё с помощью команды checkout и флага -b.

$ git checkout -b power_history_variable

Switched to a new branch 'power_history_variable'

Теперь, когда вы находитесь в новой ветке, добавьте измененные файлы.

$ git add application.properties model.additionalData.prs

Зафиксируйте изменения в новой ветке с описательным комментарием.

git commit -m "Adds variable 'Power History' to the Additional Data model"

[power_history_variable 49a2a03] Adds variable 'Power History' to the Additional Data model
2 files changed, 455 insertions(+), 1 deletion(-)

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

Импорт версий приложения

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

Поскольку вы уже зафиксировали изменения в приложении с переменной Power History в ветке power_history_variable, вы можете спокойно вернуться в мастер-ветку без потери наработок.

Переключите ветки с помощью команды git checkout.

git checkout master

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

Вернувшись в веб-интерфейс AggreGate, откройте контекстное меню приложения Power Station Models и выберите опцию Обновить.

Окно Выберите папку приложения позволяет задать несколько параметров для импорта приложения.

  • Путь к папке приложения - как и ранее, каталог, в котором находятся файлы приложения.

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

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

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

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

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

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