कोड का उपयोग करके Git रिपॉजिटरी से Dataverse को कनेक्ट और डिस्कनेक्ट करें

अपने Microsoft Dataverse परिवेश को Git स्रोत नियंत्रण के साथ प्रोग्रामेटिक रूप से एकीकृत करने के लिए और API ConnectToGit का उपयोग DisconnectFromGit करें. इन एपीआई का उपयोग करके, आप अलग-अलग समाधानों या संपूर्ण वातावरण को समर्थित गिट रिपॉजिटरी से जोड़ सकते हैं और कोड के माध्यम से उन कनेक्शनों को प्रबंधित कर सकते हैं।

पूर्वावश्यकताएँ

इन एपीआई का उपयोग करने से पहले, सुनिश्चित करें कि आपके पास है:

  • Microsoft Dataverse वातावरण तक पहुंच
  • सिस्टम व्यवस्थापक अनुमतियाँ
  • Git रिपॉजिटरी तक पहुंच पढ़ें और लिखें

ConnectToGit एपीआई

Dataverse समाधान या परिवेश और Git रिपॉजिटरी के बीच एक कनेक्शन बनाता है. इस कनेक्शन का उपयोग करके, आप अपने Dataverse घटकों के लिए स्रोत नियंत्रण प्रबंधित कर सकते हैं।

पैरामीटर

ConnectToGit एपीआई निम्नलिखित मापदंडों को स्वीकार करता है:

पैरामीटर प्रकार आवश्यक विवरण
GitFolder तार हां उस फ़ोल्डर का नाम जिससे आप अपने समाधान या परिवेश को बाइंड करना चाहते हैं.
Branch तार हां उस शाखा का नाम जिससे आप कनेक्ट करना चाहते हैं.
ConnectionType पूर्णांक नहीं निर्दिष्ट करता है कि किससे कनेक्ट करना है। ConnectionType पैरामीटर देखें।
GitProvider पूर्णांक नहीं गिट प्रदाता। GitProvider पैरामीटर देखें।
Organization तार नहीं उस संगठन का नाम जिससे आप कनेक्ट करना चाहते हैं.
Project तार नहीं उस प्रोजेक्ट का नाम जिससे आप कनेक्ट करना चाहते हैं.
Repository तार नहीं उस रिपॉजिटरी का नाम जिससे आप कनेक्ट करना चाहते हैं.
RootFolder तार नहीं रूट फ़ोल्डर का नाम जहां आपके सभी समाधान समाधान क्षेत्र में रहते हैं।
SolutionUniqueName तार नहीं समाधान का अनूठा नाम जिसे आप गिट से कनेक्ट करना चाहते हैं।
UpstreamBranch तार नहीं उस अपस्ट्रीम शाखा का नाम जिससे आप कनेक्ट करना चाहते हैं. रिपॉजिटरी की डिफ़ॉल्ट शाखा के लिए डिफ़ॉल्ट।
GitHubConnectionId तार नहीं Power Platform GitHub कनेक्शन के लिए कनेक्शन ID. जब तक आप प्रदान नहीं करते GitHubPATहैं तब तक GitProvider1 आवश्यक है। Dataverse परिवेश के लिए वर्चुअल नेटवर्क (VNET) समर्थन सक्षम होने पर इसका उपयोग नहीं किया जा सकता है.
GitHubPAT तार नहीं लक्ष्य रिपॉजिटरी तक पहुंच के साथ GitHub व्यक्तिगत एक्सेस टोकन। जब तक आप प्रदान नहीं करते GitHubConnectionIdहैं तब तक GitProvider1 आवश्यक है। Dataverse वातावरण के लिए वर्चुअल नेटवर्क (VNET) समर्थन सक्षम किया गया है जब आवश्यक है।
GitHubAppConfigId तार नहीं GitHub ऐप कॉन्फ़िगरेशन रिकॉर्ड का संदर्भ। आवश्यक है जब GitProvider है 1. githubappconfigs(<recordId>)स्वरूप का उपयोग करें.

कनेक्शन प्रकार पैरामीटर

ConnectionType पैरामीटर नियंत्रित करता है कि संपूर्ण Dataverse वातावरण से कनेक्ट करना है या किसी विशिष्ट समाधान से।

मूल्य लेबल विवरण
0 समाधान एक विशिष्ट Dataverse समाधान को Git से जोड़ता है।
1 पर्यावरण संपूर्ण Dataverse वातावरण को Git से जोड़ता है।

GitProvider पैरामीटर

आप जिस प्रकार के Git प्रदाता का उपयोग कर रहे हैं, उसे निर्दिष्ट करने के लिए पैरामीटर का GitProvider उपयोग करें, या तो Azure DevOps या GitHub।

मूल्य लेबल विवरण
0 Azure DevOps Azure DevOps पर होस्ट किए गए रिपॉजिटरी के लिए उपयोग करें
1 GitHub GitHub पर होस्ट किए गए रिपॉजिटरी के लिए उपयोग करें

DisconnectFromGit API

Dataverse समाधान या परिवेश से Git कनेक्शन को निकालता है, और स्रोत नियंत्रण एकीकरण को अक्षम करता है.

पैरामीटर

एपीआई में DisconnectFromGit केवल एक पैरामीटर है।

पैरामीटर प्रकार आवश्यक विवरण
SolutionUniqueName तार नहीं समाधान का अद्वितीय नाम जिसे आप Git से डिस्कनेक्ट करना चाहते हैं। सभी समाधानों या पर्यावरण को डिस्कनेक्ट करने के लिए छोड़ दें।

अतिरिक्त जानकारी

यहां कुछ पैरामीटर मान विकल्प दिए गए हैं जिन्हें निर्दिष्ट किया जा सकता है जब आह्वान किया जाता है DisconnectFromGit।

  • एकल समाधान डिस्कनेक्ट करें: एक विशिष्ट समाधान को डिस्कनेक्ट करने के लिए प्रदान करें SolutionUniqueName ।
  • सभी समाधानों को डिस्कनेक्ट करें: सभी समाधान-स्तरीय कनेक्शन को डिस्कनेक्ट करने के लिए कोई पैरामीटर प्रदान करें।
  • पर्यावरण को डिस्कनेक्ट करें: पर्यावरण-स्तरीय कनेक्शन को डिस्कनेक्ट करने के लिए कोई पैरामीटर प्रदान करें।

उदाहरण

निम्न उदाहरण और API DisconnectFromGit का उपयोग करने ConnectToGit के लिए परिदृश्यों का वर्णन करते हैं:

अपने संपूर्ण Dataverse परिवेश को Azure DevOps रिपॉजिटरी से कनेक्ट करें

यह कनेक्शन सभी पर्यावरण-स्तरीय कॉन्फ़िगरेशन और घटकों के लिए स्रोत नियंत्रण को सक्षम करता है।

इस कनेक्शन के साथ इन पैरामीटर का उपयोग न करें:

  • RootFolder
  • SolutionUniqueName
  • UpstreamBranch

यह उदाहरण दिखाता है कि अपने संपूर्ण Dataverse परिवेश को Azure DevOps रिपॉजिटरी से कनेक्ट करने के लिए ConnectToGit क्रिया का उपयोग कैसे करें.

अनुरोध

POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
   "GitFolder": "yourGitfolderName",
   "Branch": "yourBranchName",
   "ConnectionType": 1,
   "GitProvider": 0,
   "Organization": "yourOrganizationName",
   "Project": "yourProjectName",
   "Repository": "yourRepositoryName"
}

प्रतिसाद

HTTP/1.1 204 No Content
OData-Version: 4.0

वेब एपीआई कार्रवाइयों को लागू करने का तरीका जानें

किसी GitHub रिपॉजिटरी से कनेक्ट करें

इससे पहले कि आप GitHub से कनेक्ट करने के लिए API का उपयोग करें, GitHub ऐप बनाने के लिए सेटअप चरणों को पूरा करें, इसे लक्ष्य रिपॉजिटरी पर इंस्टॉल करें, इसकी निजी कुंजी को Azure Key Vault में आयात करें, और Power Platform GitHub कनेक्शन बनाएं। अधिक जानकारी के लिए, GitHub से कनेक्ट करें देखें.

वेब API का उपयोग करके एक GitHub अनुप्रयोग कॉन्फ़िगरेशन रिकॉर्ड बनाएँ

रिकॉर्ड बनाने githubappconfig के लिए Dataverse OData वेब API का उपयोग करें. GitHub ऐप क्लाइंट आईडी, Key Vault URI और कुंजी नाम के साथ एक POST अनुरोध भेजें।

आप इन कॉल करने के लिए किसी भी HTTP क्लाइंट, जैसे Insomnia, Visual Studio Code REST क्लाइंट या curl का उपयोग कर सकते हैं। प्रमाणीकरण के लिए आपको एक वाहक टोकन की आवश्यकता है। अधिक जानकारी के लिए, Microsoft Dataverse Web API का उपयोग करना देखें.

POST {{DataverseOrgUrl}}/api/data/v9.2/githubappconfigs
Authorization: Bearer {{token}}
Content-Type: application/json

{
    "githubappid": "Iv23liBWoH9sf7xDrRe6",
    "keyvaulturi": "{{KeyVaultUri}}",
    "keyname": "demoGitHubKey"
}

Important

प्रतिसाद शीर्ष लेख में दिए गए रिकॉर्ड ID पर ध्यान दें। प्रबंधित पहचान की पहचान करने, RBAC कॉन्फ़िगर करने और कॉल ConnectToGitकरने के लिए आपको इस मान की आवश्यकता है। रिकॉर्ड ID एक स्वरूप का उपयोग करता है जैसे .13d565bb-4c22-f111-a546-7ced8d6e3e85

GitHub ऐप कॉन्फ़िगरेशन रिकॉर्ड बनाने के बाद, Configure Key Vault रोल-आधारित एक्सेस कंट्रोल (RBAC) में वर्णित Dataverse प्रबंधित पहचान को Key Vault Crypto उपयोगकर्ता भूमिका असाइन करें।

ConnectToGit API को कॉल करें

रिकॉर्ड बनाने githubappconfig और Key Vault RBAC को कॉन्फ़िगर करने के बाद, कार्रवाई को ConnectToGit कॉल करके स्रोत नियंत्रण कनेक्शन स्थापित करने के लिए Dataverse Web API का उपयोग करें.

POST {{DataverseOrgUrl}}/api/data/v9.2/ConnectToGit
Authorization: Bearer {{token}}
Content-Type: application/json

{
    "GitProvider": 1,
    "ConnectionType": 1,
    "Organization": "YourGitHubOrg",
    "Repository": "YourRepo",
    "Project": "placeholder",
    "Branch": "yourBranch",
    "UpstreamBranch": "main",
    "GitFolder": "YourFolder",
    "GitHubConnectionId": "<connectionId>",
    "GitHubAppConfigId": "githubappconfigs(<recordId>)"
}

Important

शाखा पहले से ही भंडार में मौजूद होनी चाहिए। जरूरत पड़ने पर इसे पहले GitHub में बनाएं। मान को GitHubAppConfigId प्रारूप githubappconfigs(<recordId>)का उपयोग करना चाहिए।

GitHub मापदंडों के साथ ConnectToGit API के लिए HTTP अनुरोध निकाय का स्क्रीनशॉट।

यदि आपको एक सफल प्रतिक्रिया मिलती है, तो वातावरण GitHub से जुड़ा होता है।

PowerShell का उपयोग करके किसी GitHub रिपॉजिटरी से कनेक्ट करें

निम्न PowerShell उदाहरण GitHub अनुप्रयोग कॉन्फ़िगरेशन रिकॉर्ड बनाता है, Microsoft Entra ID में Dataverse प्रबंधित पहचान के प्रकट होने की प्रतीक्षा करता है, प्रबंधित पहचान के लिए Key Vault Crypto उपयोगकर्ता भूमिका असाइन करता है, और कार्रवाई को ConnectToGit कॉल करता है। यदि आपके पास पहले से ही GitHub ऐप कॉन्फ़िगरेशन रिकॉर्ड है, तो कॉन्फ़िगरेशन और Key Vault भूमिका असाइनमेंट चरणों को छोड़ने के लिए प्रदान करेंGitHubAppConfigId।

उदाहरण चलाने से पहले , और Az.KeyVaultAz.Resources PowerShell मॉड्यूल स्थापित करें और आयात Az.Accountsकरें। एक ऐसे खाते का उपयोग करके साइन Connect-AzAccount इन करें जिसके पास Dataverse परिवेश तक पहुंच है और Key Vault भूमिकाएँ असाइन करने की अनुमति है।

यदि वर्चुअल नेटवर्क (VNET) समर्थन Dataverse परिवेश के लिए सक्षम है, तो प्रदान करें GitHubPAT। GitHub कनेक्शन का उपयोग वर्चुअल नेटवर्क समर्थन के साथ नहीं किया जा सकता है।

[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [string]$DataverseOrgUrl,

    [Parameter(Mandatory)]
    [string]$GitHubOrg,

    [Parameter(Mandatory)]
    [string]$GitHubRepo,

    [Parameter(Mandatory)]
    [string]$Branch,

    [Parameter(Mandatory)]
    [string]$GitFolder,

    [string]$GitHubAppClientId,

    [string]$KeyVaultName,

    [string]$KeyVaultKeyName,

    [string]$GitHubAppConfigId,

    [string]$GitHubConnectionId,

    [string]$GitHubPAT,

    [ValidateSet(0, 1)]
    [int]$ConnectionType = 1,

    [string]$UpstreamBranch,

    [string]$RootFolder,

    [string]$SolutionUniqueName
)

Set-StrictMode -Version 3.0
$ErrorActionPreference = "Stop"

if (($GitHubConnectionId -and $GitHubPAT) -or (-not $GitHubConnectionId -and -not $GitHubPAT)) {
    throw "Specify either -GitHubConnectionId or -GitHubPAT, but not both."
}

if (-not $GitHubAppConfigId) {
    foreach ($name in @('GitHubAppClientId', 'KeyVaultName', 'KeyVaultKeyName')) {
        if ([string]::IsNullOrWhiteSpace((Get-Variable -Name $name -ValueOnly))) {
            throw "Specify -$name when -GitHubAppConfigId is not provided."
        }
    }
}

$dataverseResource = $DataverseOrgUrl.TrimEnd('/')
$tokenResult = Get-AzAccessToken -ResourceUrl $dataverseResource -AsSecureString
$dataverseToken = [System.Net.NetworkCredential]::new('', $tokenResult.Token).Password

function Invoke-DataverseApi {
    param(
        [Parameter(Mandatory)]
        [string]$Method,

        [Parameter(Mandatory)]
        [string]$Endpoint,

        [object]$Body,

        [switch]$ReturnHeaders
    )

    $headers = @{
        Authorization      = "Bearer $dataverseToken"
        "OData-MaxVersion" = "4.0"
        "OData-Version"    = "4.0"
    }

    $request = @{
        Method      = $Method
        Uri         = "$dataverseResource/api/data/v9.2/$Endpoint"
        Headers     = $headers
        ContentType = "application/json; charset=utf-8"
    }

    if ($Body) {
        $request.Body = $Body | ConvertTo-Json -Depth 10
    }

    if ($ReturnHeaders) {
        return (Invoke-WebRequest @request).Headers
    }

    Invoke-RestMethod @request
}

$appConfigRecordId = $GitHubAppConfigId

if (-not $appConfigRecordId) {
    $keyVault = Get-AzKeyVault -VaultName $KeyVaultName
    $keyVaultUri = 'https://' + $KeyVaultName + '.vault.azure.net/'

    $appConfigBody = @{
        githubappid = $GitHubAppClientId
        keyvaulturi = $keyVaultUri
        keyname     = $KeyVaultKeyName
    }

    $responseHeaders = Invoke-DataverseApi `
        -Method POST `
        -Endpoint "githubappconfigs" `
        -Body $appConfigBody `
        -ReturnHeaders

    $entityIdHeader = [string]$responseHeaders["OData-EntityId"]
    if ($entityIdHeader -notmatch '\(([0-9a-f-]+)\)') {
        throw "Could not read the GitHub App configuration record ID from the Dataverse response."
    }

    $appConfigRecordId = $Matches[1]
    $managedIdentityName = "PPMI-githubappconfigmanagedidentity-$appConfigRecordId"

    $servicePrincipal = $null
    for ($attempt = 1; $attempt -le 60; $attempt++) {
        $servicePrincipal = Get-AzADServicePrincipal -DisplayName $managedIdentityName -ErrorAction SilentlyContinue
        if ($servicePrincipal) {
            break
        }

        Start-Sleep -Seconds 1
    }

    if (-not $servicePrincipal) {
        throw "The Dataverse managed identity was not found in Microsoft Entra ID. Check Dataverse System Jobs for GitHub App configuration errors."
    }

    $keyVaultScope = $keyVault.ResourceId
    if (-not $keyVaultScope) {
        $subscriptionId = (Get-AzContext).Subscription.Id
        $keyVaultScope = "/subscriptions/$subscriptionId/resourceGroups/$($keyVault.ResourceGroupName)/providers/Microsoft.KeyVault/vaults/$KeyVaultName"
    }

    $keyVaultCryptoUserRoleId = "12338af0-0e69-4776-bea7-57ae8d297424"
    $existingAssignment = Get-AzRoleAssignment `
        -ObjectId $servicePrincipal.Id `
        -RoleDefinitionId $keyVaultCryptoUserRoleId `
        -Scope $keyVaultScope `
        -ErrorAction SilentlyContinue

    if (-not $existingAssignment) {
        New-AzRoleAssignment `
            -ObjectId $servicePrincipal.Id `
            -RoleDefinitionId $keyVaultCryptoUserRoleId `
            -Scope $keyVaultScope | Out-Null
    }
}

$connectBody = @{
    GitProvider          = 1
    ConnectionType       = $ConnectionType
    Organization         = $GitHubOrg
    Repository           = $GitHubRepo
    Project              = "placeholder"
    Branch               = $Branch
    GitFolder            = $GitFolder
    GitHubAppConfigId    = "githubappconfigs($appConfigRecordId)"
}

if ($GitHubConnectionId) { $connectBody.GitHubConnectionId = $GitHubConnectionId }
if ($GitHubPAT)          { $connectBody.GitHubPAT          = $GitHubPAT }
if ($UpstreamBranch)     { $connectBody.UpstreamBranch     = $UpstreamBranch }
if ($RootFolder)         { $connectBody.RootFolder         = $RootFolder }
if ($SolutionUniqueName) { $connectBody.SolutionUniqueName = $SolutionUniqueName }

Invoke-DataverseApi -Method POST -Endpoint "ConnectToGit" -Body $connectBody
Write-Host "Connected Dataverse Git integration to GitHub."

अपने संपूर्ण Dataverse परिवेश को Git स्रोत नियंत्रण से डिस्कनेक्ट करें

यह क्रिया पर्यावरण-स्तरीय Git कनेक्शन को हटा देती है। इस कार्रवाई के लिए पैरामीटर का SolutionUniqueName उपयोग न करें। Dataverse स्वचालित रूप से पर्यावरण-स्तरीय Git कनेक्शन की पहचान करता है और उसे हटा देता है।

यह उदाहरण दिखाता है कि Git स्रोत नियंत्रण से अपने संपूर्ण Dataverse वातावरण को डिस्कनेक्ट करने के लिए DisconnectFromGit क्रिया का उपयोग कैसे करें.

अनुरोध

POST [Organization URI]/api/data/v9.2/DisconnectFromGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

प्रतिसाद

HTTP/1.1 204 No Content
OData-Version: 4.0

वेब एपीआई कार्रवाइयों को लागू करने का तरीका जानें

पहले समाधान को Git रिपॉजिटरी से कनेक्ट करें

यह कनेक्शन किसी वातावरण में पहले समाधान के लिए समाधान-स्तरीय स्रोत नियंत्रण के लिए रिपॉजिटरी लिंक और फ़ोल्डर संरचना स्थापित करता है।

समाधान निर्दिष्ट करने के लिए आपको इन मापदंडों के लिए मान शामिल करने की आवश्यकता है:

  • RootFolder
  • SolutionUniqueName

यह उदाहरण दिखाता है कि पहले समाधान को Git रिपॉजिटरी से कनेक्ट करने के लिए ConnectToGit क्रिया का उपयोग कैसे करें।

अनुरोध

POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
   "GitFolder": "yourGitfolderName",
   "Branch": "yourBranchName",
   "ConnectionType": 1,
   "GitProvider": 0,
   "Organization": "yourOrganizationName",
   "Project": "yourProjectName",
   "Repository": "yourRepositoryName",
   "RootFolder": "yourRootFolderName",
   "SolutionUniqueName": "yourSolutionUniqueName"
}

प्रतिसाद

HTTP/1.1 204 No Content
OData-Version: 4.0

वेब एपीआई कार्रवाइयों को लागू करने का तरीका जानें

प्रारंभिक समाधान कनेक्ट करने के बाद अतिरिक्त समाधानों को उसी Git रिपॉजिटरी से कनेक्ट करें

पहला समाधान कनेक्ट करने के बाद, आपको केवल समाधान-विशिष्ट मापदंडों की आवश्यकता होती है। आपको प्रारंभिक कनेक्शन से रिपॉजिटरी कनेक्शन विवरण इनहेरिट होता है।

केवल ये पैरामीटर सेट करें:

  • SolutionUniqueName
  • Branch
  • GitFolder

Important

यह काम करने से पहले आपको पहले समाधान कनेक्ट करना होगा। पहले समाधान को Git रिपॉजिटरी से कनेक्ट करें देखें।

यह उदाहरण दिखाता है कि Git रिपॉजिटरी के लिए बाद के समाधानों को कनेक्ट करने के लिए ConnectToGit क्रिया का उपयोग कैसे करें।

अनुरोध

POST [Organization URI]/api/data/v9.2/ConnectToGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
   "GitFolder": "yourGitfolderName",
   "Branch": "yourBranchName",
   "SolutionUniqueName": "yourSolutionUniqueName"
}

प्रतिसाद

HTTP/1.1 204 No Content
OData-Version: 4.0

वेब एपीआई कार्रवाइयों को लागू करने का तरीका जानें

अन्य समाधानों को कनेक्ट रखते हुए Git स्रोत नियंत्रण से एक विशिष्ट समाधान को डिस्कनेक्ट करें

दूसरों को प्रभावित किए बिना एक समाधान के लिए स्रोत नियंत्रण को हटाने के लिए इस दृष्टिकोण का उपयोग करें।

यह उदाहरण दिखाता है कि दूसरों को प्रभावित किए बिना एक समाधान के लिए स्रोत नियंत्रण को हटाने के लिए DisconnectFromGit क्रिया का उपयोग कैसे करें।

अनुरोध

POST [Organization URI]/api/data/v9.2/DisconnectFromGit HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
   "SolutionUniqueName": "yourSolutionUniqueName"
}

प्रतिसाद

HTTP/1.1 204 No Content
OData-Version: 4.0

वेब एपीआई कार्रवाइयों को लागू करने का तरीका जानें

त्रुटि प्रबंधन

न तो एपीआई ConnectToGitDisconnectFromGit सफलतापूर्वक पूरा होने पर कोई मान लौटाता है। जब कोई एपीआई विफल हो जाता है, तो यह एक त्रुटि लौटाता है।

सामान्य त्रुटि परिदृश्यों में शामिल हैं:

  • अमान्य क्रेडेंशियल्स: सुनिश्चित करें कि आपके पास Git प्रदाता के लिए वैध प्रमाणीकरण है।
  • रिपॉजिटरी नहीं मिला: संगठन, प्रोजेक्ट और रिपॉजिटरी नामों की जाँच करें।
  • अनुमति अस्वीकृत: सुनिश्चित करें कि आपके Dataverse खाते में स्रोत नियंत्रण प्रबंधन अनुमतियाँ हैं।
  • समाधान नहीं मिला: सत्यापित करें कि आपके परिवेश में मौजूद है SolutionUniqueName ।
  • शाखा मौजूद नहीं है: पुष्टि करें कि निर्दिष्ट शाखा रिपॉजिटरी में मौजूद है।

समर्थन और अतिरिक्त संसाधन

Dataverse के साथ स्रोत नियंत्रण एकीकरण के बारे में अधिक जानकारी के लिए, देखें: