PowerShell脚本上的Git命令 - 授权

时间:2018-01-15 18:50:54

标签: c# git powershell azure tfs

我对在这种情况下最好做什么有疑问。我想编写一个创建本地存储库的脚本,然后可以从VSTS获取并推送到TFS以创建备份。

使用GIT Bash我能够按照以下说明进行此项工作。

git clone --mirror https://github.com/exampleuser/repository-to-mirror.git
cd repository-to-mirror.git
git remote set-url --push origin https://github.com/exampleuser/mirrored
git fetch -p origin
git push --mirror

我想在Windows 10上使用ISE制作一个Powershell脚本,也可以这样做。我安装了git-posh以便能够编写命令。

但是当我按照GIT(https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/

的指示编写命令时
    git clone https://github.com/username/repo.git
Username: your_username
Password: your_token

我收到错误:

remote:TF401019:名称或标识符为Logic-Test1.git的Git存储库不存在或者您没有 您正在尝试的操作的权限。

用户名::术语“用户名:”不会被识别为cmdlet,函数,脚本文件或可运行程序的名称。检查 拼写名称,或者如果包含路径,请验证路径是否正确,然后重试。

如何进行身份验证以便我可以克隆它?此外,有没有办法不必为每个命令键入身份验证?

1 个答案:

答案 0 :(得分:1)

此博客Script to clone all Git repositories from your VSTS collection提供了有关如何使用PowerShell从VSTS克隆git repo的示例,您可以检查它并将其用于其他命令。

首先,创建一个PowerShell脚本文件:

# Read configuration file
Get-Content "CloneAllRepos.config" | foreach-object -begin {$h=@{}} -process { 
    $k = [regex]::split($_,'='); 
    if(($k[0].CompareTo("") -ne 0) -and ($k[0].StartsWith("[") -ne $True)) { 
        $h.Add($k[0], $k[1]) 
    } 
}
$url = $h.Get_Item("Url")
$username = $h.Get_Item("Username")
$password = $h.Get_Item("Password")

# Retrieve list of all repositories
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$headers = @{
    "Authorization" = ("Basic {0}" -f $base64AuthInfo)
    "Accept" = "application/json"
}

Add-Type -AssemblyName System.Web
$gitcred = ("{0}:{1}" -f  [System.Web.HttpUtility]::UrlEncode($username),$password)

$resp = Invoke-WebRequest -Headers $headers -Uri ("{0}/_apis/git/repositories?api-version=1.0" -f $url)
$json = convertFrom-JSON $resp.Content

# Clone or pull all repositories
$initpath = get-location
foreach ($entry in $json.value) { 
    $name = $entry.name 
    Write-Host $name

    $url = $entry.remoteUrl -replace "://", ("://{0}@" -f $gitcred)
    if(!(Test-Path -Path $name)) {
        git clone $url
    } else {
        set-location $name
        git pull
        set-location $initpath
    }
}

然后使用您的配置在脚本旁边创建一个配置文件:

[General]
Url=https://myproject.visualstudio.com/defaultcollection
Username=user@domain.com
Password=YourAccessToken