Git Integration and Export Reference

Integrate solutions with Git repositories.

Reference → Solution → DevOps → Track Changes | Git 


Git Integration & Export (Reference): Comprehensive Git integration for version control, collaboration, and DevOps workflows while maintaining centralized database architecture security.

Access: Solution → Export (Git Export settings)


Git Export Architecture

Hybrid Configuration Management

Centralized DatabaseSingle source of truth.dbsln file
Automatic ExportsVersion control trackingGit folder
Selective ExportConfiguration elementsJSON files
Sensitive DataProtected via placeholdersDatabase only
Bidirectional SyncDatabase ↔ Git repositoryAutomated

Git-Friendly JSON Format

Consistent FormattingClean diffsEasy review
Sorted KeysMinimize conflictsBetter merging
Array-based TablesEfficient storageSmaller files
Metadata PreservationVersion trackingAudit trail
Binary Asset HandlingSeparate files with checksumsIntegrity

Configuration

Enabling Git Export

Navigate to Solution → Settings → Version Control:

Enable Git ExportOn/OffOff
Export ModeAutomatic/ManualManual
Export TriggerOn Version Change-
Export Delay5-60 seconds5
Target DirectoryPathSolution-Data\Git

Export Modes

Automatic Export:

  • Monitors configuration changes
  • Exports on version increment
  • Batches rapid changes
  • Background operation

Manual Export:

  • Export All - Complete solution
  • Export Module - Selected module
  • Export Current - Active object

Directory Structure

Solution Root Directory:

  • Solution/ - Core configuration files
    • SolutionCategories.json
    • SolutionSettings.json
  • Displays/ - UI and visualization components
    • Layouts/ - Display configurations
      • MainPage.json
      • Overview.json
    • Images/ - Visual assets
      • Logo.json (metadata)
      • Logo.png (binary file)
  • Scripts/ - Application logic
    • Tasks/ - Server-side scripts
      • ServerStartup.json
    • Classes/ - Reusable code libraries
      • DataProcessor.json
    • ScriptsExpressions.json
  • UNS/ - Unified Namespace data model
    • UnsTags.json
    • UserTypes/ - Custom data templates
      • CustomTemplate.json
  • Alarms/ - Alarm configuration
    • AlarmsGlobalSettings.json
    • AlarmsItems.json
  • .gitignore - Version control exclusions

JSON File Format

Standard Structure

json

{
  "ObjectIdentification": {
    "Module": "Script",
    "TableType": "ScriptsTasks",
    "TableGroup": "Objects"
  },
  "VersionInfo": {
    "TableVersionID": 6,
    "SolutionVersionID": 245,
    "SolutionName": "MyProject"
  },
  "ExportMetadata": {
    "ExportDate": "2025-08-23T10:30:00Z",
    "ExportUser": "john.doe",
    "ExportProduct": "Designer",
    "ExportProductVersion": "10.1.1.1011",
    "ExportFormat": "1.0"
  },
  "Data": [
    { /* object properties */ }
  ]
}


ObjectIdentificationIdentifies module and table typeIgnored - inferred from Data
VersionInfoTracks solution/table versionsIgnored - auto-assigned
ExportMetadataAudit trail for exportIgnored - metadata only
DataArray of configuration objectsProcessed - actual data



Export Categories

Individual Object Files:

  • Script Tasks and Classes
  • Display Layouts
  • SQL Queries
  • Report Definitions
  • Symbol Definitions

Table Export Files:

  • Tags (UNS)
  • Alarm Items
  • Device Points
  • Security Settings
  • Expressions

JSON Import Behavior

The import function uses the same JSON format as export. Understanding what gets processed vs ignored is essential for programmatic configuration.

Ignored on Import

Ignored Sections (metadata only):

  • ObjectIdentification - Inferred from Data content
  • VersionInfo - Versions assigned automatically
  • ExportMetadata - Export audit data only

Ignored Fields (auto-generated):

IDAuto-assigned unique identifier
VersionIDAuto-incremented on change
DateCreatedSet to import timestamp
DateModifiedSet to import timestamp
XRefInfoCross-reference data rebuilt
LockStateLock status reset
ContentsRunRuntime counter reset


Import Behavior Rules

New object (Name doesn't exist)Created with specified properties
Existing object (Name matches)Skipped - no update, no error
Pre-defined objectSkipped - cannot modify system objects
Missing required fieldError - import fails for that object
Invalid referenceError - referenced object must exist

Import Order Dependencies

When importing related objects, order matters:

  1. Independent objects first: Tags, Channels, AlarmGroups, StorageLocations, DatasetDBs
  2. Dependent objects after: Nodes→Channels, Points→Nodes+Tags, AlarmItems→Tags+Groups

TableType Reference

Valid TableType values for the ObjectIdentification section:

UnsTagsTagUNS
UnsUserTypesUserTypeUNS
UnsEnumerationsEnumerationUNS
UnsTagProvidersTagProviderUNS
UnsAssetTreeAssetFolderUNS
DevicesChannelsChannelDevices
DevicesNodesDeviceNodeDevices
DevicesPointsDevicePointDevices
AlarmsGroupsAlarmGroupAlarms
AlarmsItemsAlarmItemAlarms
AlarmsAreasAlarmAreaAlarms
HistorianStorageLocationsStorageLocationHistorian
HistorianTablesHistorianTableHistorian
HistorianTagsHistorianTagHistorian
DatasetsDBsDatasetDBDatasets
DatasetsQueriesDatasetQueryDatasets
DatasetsTablesDatasetTableDatasets
ScriptsTasksScriptTaskScripts
ScriptsClassesScriptClassScripts
ScriptsExpressionsScriptExpressionScripts
SecurityUsersSecurityUserSecurity
SecurityPermissionsSecurityPermissionSecurity



Object Reference Formats

When JSON fields reference other objects, use these formats:

Tag (root)Tag.{name}"Tag.Temperature"
Tag (nested)Tag.{path}.{name}"Tag.Line1.Tank1.Level"
ChannelDevice.Channel.{name}"Device.Channel.ModbusPLC1"
NodeDevice.Node.{name}"Device.Node.PLC1"
AccessTypeDevice.AccessType.{name}"Device.AccessType.Read"
AlarmGroupAlarm.Group.{name}"Alarm.Group.Critical"
AlarmAreaAlarm.Area.{name}"Alarm.Area.Plant1"
HistorianTableHistorian.Table.{name}"Historian.Table.Table1"
DatasetDBDB.{name}"DB.TagHistorian"

Security & Sensitive Data

Data Protection

PasswordsNever exportedDatabase only
Connection StringsEnvironment placeholders${DB_CONNECTION}
API KeysVault referencesSecure storage
Encrypted ValuesNot exportedDatabase only

Environment Variables

json

{
  "DatabaseConnection": "${DB_CONNECTION}",
  "EmailServer": "${SMTP_SERVER}",
  "HistorianPath": "${HISTORIAN_PATH}"
}

Variables resolved at runtime for environment-specific deployment.


Git Workflow

Recommended Process

  1. Initialize Repository

bash

cd /path/to/solution
git init
git remote add origin https://github.com/company/scada-config.git
  1. Development Branch

bash

git checkout -b feature/new-alarm-logic
# Make changes in ProView DS
git add .
git commit -m "Add temperature monitoring for Reactor-3"
git push origin feature/new-alarm-logic
  1. Code Review
    • Create pull request
    • Team reviews changes
    • Merge to main branch

Branching Strategy

Main Branches:

  • main - Production-ready code
  • develop - Integration branch for features

Feature Branches:

  • feature/new-screens - New display development
  • feature/alarm-updates - Alarm system modifications
  • feature/script-optimization - Script performance improvements

Maintenance Branches:

  • hotfix/critical-alarm-fix - Emergency production fixes
  • release/v2.1 - Release preparation and stabilization

Branch Hierarchy:

  • Main branch serves as production baseline
  • Develop branch integrates all feature work
  • Feature branches created from develop
  • Hotfix branches created from main for urgent fixes
  • Release branches created from develop for version preparation

Best Practices Checklist 

What to Export

  • Export to Git:
    • Application configuration
    • Display definitions
    • Script code
    • Alarm rules
    • Report templates
    • Static settings
  • Keep in Database Only:
    • Runtime tag values
    • Historical data
    • User passwords
    • Session information
    • Temporary data
    • High-frequency updates

Commit Guidelines

"Add temperature monitoring for Reactor-3""Updated stuff"
"Fix alarm delay calculation in Tank-Level""Changes"
"Implement new batch report template""Friday work"

Performance

Export Performance

Small (<100 objects)<1 sec50-100<1 MB
Medium (1,000 objects)3-5 sec200-5005-10 MB
Large (10,000 objects)15-20 sec1,000+50-100 MB
Enterprise (50,000+)60-90 sec5,000+500+ MB

Optimization Tips

  • Use selective export for large systems
  • Enable compression for repository
  • Implement .gitignore for generated files
  • Schedule exports during low activity
  • Use shallow clones for CI/CD

CI/CD Integration

Example GitHub Actions

yaml

name: Validate ProView DS Configuration

on:
  pull_request:
    branches: [ main, develop ]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    
    - name: Validate JSON Schema
      run: |
        for file in $(find . -name "*.json"); do
          python validate_schema.py $file
        done
    
    - name: Check Tag Naming Convention
      run: python check_naming.py ./UNS/UnsTags.json
    
    - name: Verify No Credentials
      run: |
        ! grep -r "password\|credential\|secret" --include="*.json"

Troubleshooting

Export not triggeringAutomatic export disabledEnable in settings
Large file sizesMany objectsUse selective export
Merge conflictsConcurrent editsUse branches
Missing exportsPermission issuesCheck directory access
Sensitive data exposedWrong configurationReview export filters
mport fails silentlyObject already existsCheck for duplicates
Import error on referenceReferenced object missingImport dependencies first

See Also

  • → — Complete object reference
  • → — Detailed field reference
  • → — Internal change tracking