Git Integration and Export Reference
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 Database | Single source of truth | .dbsln file |
| Automatic Exports | Version control tracking | Git folder |
| Selective Export | Configuration elements | JSON files |
| Sensitive Data | Protected via placeholders | Database only |
| Bidirectional Sync | Database ↔ Git repository | Automated |
Git-Friendly JSON Format
| Consistent Formatting | Clean diffs | Easy review |
| Sorted Keys | Minimize conflicts | Better merging |
| Array-based Tables | Efficient storage | Smaller files |
| Metadata Preservation | Version tracking | Audit trail |
| Binary Asset Handling | Separate files with checksums | Integrity |
Configuration
Enabling Git Export
Navigate to Solution → Settings → Version Control:
| Enable Git Export | On/Off | Off |
| Export Mode | Automatic/Manual | Manual |
| Export Trigger | On Version Change | - |
| Export Delay | 5-60 seconds | 5 |
| Target Directory | Path | Solution-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)
- Layouts/ - Display configurations
- Scripts/ - Application logic
- Tasks/ - Server-side scripts
- ServerStartup.json
- Classes/ - Reusable code libraries
- DataProcessor.json
- ScriptsExpressions.json
- Tasks/ - Server-side scripts
- 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 */ }
]
}ObjectIdentification | Identifies module and table type | Ignored - inferred from Data |
VersionInfo | Tracks solution/table versions | Ignored - auto-assigned |
ExportMetadata | Audit trail for export | Ignored - metadata only |
Data | Array of configuration objects | Processed - 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 contentVersionInfo- Versions assigned automaticallyExportMetadata- Export audit data only
Ignored Fields (auto-generated):
ID | Auto-assigned unique identifier |
VersionID | Auto-incremented on change |
DateCreated | Set to import timestamp |
DateModified | Set to import timestamp |
XRefInfo | Cross-reference data rebuilt |
LockState | Lock status reset |
ContentsRun | Runtime 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 object | Skipped - cannot modify system objects |
| Missing required field | Error - import fails for that object |
| Invalid reference | Error - referenced object must exist |
Import Order Dependencies
When importing related objects, order matters:
- Independent objects first: Tags, Channels, AlarmGroups, StorageLocations, DatasetDBs
- Dependent objects after: Nodes→Channels, Points→Nodes+Tags, AlarmItems→Tags+Groups
TableType Reference
Valid TableType values for the ObjectIdentification section:
UnsTags | Tag | UNS |
UnsUserTypes | UserType | UNS |
UnsEnumerations | Enumeration | UNS |
UnsTagProviders | TagProvider | UNS |
UnsAssetTree | AssetFolder | UNS |
DevicesChannels | Channel | Devices |
DevicesNodes | DeviceNode | Devices |
DevicesPoints | DevicePoint | Devices |
AlarmsGroups | AlarmGroup | Alarms |
AlarmsItems | AlarmItem | Alarms |
AlarmsAreas | AlarmArea | Alarms |
HistorianStorageLocations | StorageLocation | Historian |
HistorianTables | HistorianTable | Historian |
HistorianTags | HistorianTag | Historian |
DatasetsDBs | DatasetDB | Datasets |
DatasetsQueries | DatasetQuery | Datasets |
DatasetsTables | DatasetTable | Datasets |
ScriptsTasks | ScriptTask | Scripts |
ScriptsClasses | ScriptClass | Scripts |
ScriptsExpressions | ScriptExpression | Scripts |
SecurityUsers | SecurityUser | Security |
SecurityPermissions | SecurityPermission | Security |
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" |
| Channel | Device.Channel.{name} | "Device.Channel.ModbusPLC1" |
| Node | Device.Node.{name} | "Device.Node.PLC1" |
| AccessType | Device.AccessType.{name} | "Device.AccessType.Read" |
| AlarmGroup | Alarm.Group.{name} | "Alarm.Group.Critical" |
| AlarmArea | Alarm.Area.{name} | "Alarm.Area.Plant1" |
| HistorianTable | Historian.Table.{name} | "Historian.Table.Table1" |
| DatasetDB | DB.{name} | "DB.TagHistorian" |
Security & Sensitive Data
Data Protection
| Passwords | Never exported | Database only |
| Connection Strings | Environment placeholders | ${DB_CONNECTION} |
| API Keys | Vault references | Secure storage |
| Encrypted Values | Not exported | Database 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
- Initialize Repository
bash
cd /path/to/solution
git init
git remote add origin https://github.com/company/scada-config.git- 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- 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 sec | 50-100 | <1 MB |
| Medium (1,000 objects) | 3-5 sec | 200-500 | 5-10 MB |
| Large (10,000 objects) | 15-20 sec | 1,000+ | 50-100 MB |
| Enterprise (50,000+) | 60-90 sec | 5,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 triggering | Automatic export disabled | Enable in settings |
| Large file sizes | Many objects | Use selective export |
| Merge conflicts | Concurrent edits | Use branches |
| Missing exports | Permission issues | Check directory access |
| Sensitive data exposed | Wrong configuration | Review export filters |
| mport fails silently | Object already exists | Check for duplicates |
| Import error on reference | Referenced object missing | Import dependencies first |
See Also
- → — Complete object reference
- → — Detailed field reference
- → — Internal change tracking