| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- # Git Credential Configuration Script
- param(
- [string]$Username = "",
- [string]$Email = "",
- [SecureString]$Password = $null,
- [switch]$Global = $false
- )
- # ========== Configure your username, email and password here ==========
- $defaultUsername = "yichael" # Change to your Git username
- $defaultEmail = "2812319400@qq.com" # Change to your Git email
- $defaultPassword = "Qwerty123" # Change to your Git password or access token
- # ======================================================================
- # Use default values if parameters not provided
- if (-not $Username) { $Username = $defaultUsername }
- if (-not $Email) { $Email = $defaultEmail }
- if (-not $Password) {
- $Password = ConvertTo-SecureString $defaultPassword -AsPlainText -Force
- }
- # Get remote repository URL
- $RemoteUrl = git config --get remote.origin.url 2>$null
- # Convert SecureString to plain string (only when needed)
- $passwordPlain = $null
- if ($Password) {
- $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)
- $passwordPlain = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
- }
- # Set Git configuration
- $scope = if ($Global) { "--global" } else { "--local" }
- $success = $true
- if ($Username) {
- git config $scope user.name $Username 2>$null
- if ($LASTEXITCODE -ne 0) { $success = $false }
- }
- if ($Email) {
- git config $scope user.email $Email 2>$null
- if ($LASTEXITCODE -ne 0) { $success = $false }
- }
- # Clear old credentials
- if ($RemoteUrl -and $RemoteUrl -match "https?://([^/]+)") {
- $domain = $Matches[1]
- cmdkey /delete:"LegacyGeneric:target=git:https://$domain" 2>$null | Out-Null
- git credential-cache exit 2>$null | Out-Null
- }
- # Set new credentials
- if ($passwordPlain -and $RemoteUrl -and $RemoteUrl -match "https?://([^/]+)") {
- $domain = $Matches[1]
- $credentialInput = "protocol=https`nhost=$domain`nusername=$Username`npassword=$passwordPlain`n`n"
- $credentialInput | git credential approve 2>$null
- if ($LASTEXITCODE -ne 0) { $success = $false }
- # Clear plain password from memory
- [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
- $passwordPlain = $null
- }
- # Show result
- if ($success) {
- Write-Host "[OK] Configuration successful" -ForegroundColor Green
- } else {
- Write-Host "[X] Configuration failed" -ForegroundColor Red
- exit 1
- }
|