Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
eeccd46
build(deps): bump actions/setup-dotnet from 5.1.0 to 5.2.0
dependabot[bot] Mar 5, 2026
32e7ff7
Added support for cachyos
BartekDeveloper Mar 10, 2026
42bf6e9
github/gitlab: use correct param order
mjcheetham Mar 31, 2026
51a2379
streamextensions: fix a bug in multi-var reset handling
mjcheetham Mar 31, 2026
20734ab
github: handle empty domain or enterprise hints
mjcheetham Mar 31, 2026
453ae23
github: do not filter accounts outside of dotcom
mjcheetham Mar 31, 2026
817f5e3
diagnose: fix network diag to await HTTP requests
mjcheetham Mar 31, 2026
774af8e
macos: add die function to notarize.sh script
mjcheetham Mar 31, 2026
66c6ef0
build(deps): bump actions/github-script from 8 to 9
dependabot[bot] Apr 10, 2026
b47259c
Bump Tmds.DBus.Protocol from 0.16.0 to 0.21.3
dependabot[bot] Apr 22, 2026
a78b60d
Added support for cachyos (#2284)
mjcheetham Apr 23, 2026
265c4ac
Initial plan
Copilot Apr 23, 2026
868bf00
build(deps): bump actions/github-script from 8 to 9 (#2315)
mjcheetham Apr 23, 2026
ed13a29
Bump Tmds.DBus.Protocol from 0.16.0 to 0.21.3 (#2316)
mjcheetham Apr 23, 2026
95502ae
Add dark theme support to OAuth authentication response pages
Copilot Apr 23, 2026
50cdad4
Fix Bitbucket dark mode footer-logo background
Copilot Apr 23, 2026
632413f
Dark theme support for OAuth authentication response pages (#2325)
mjcheetham Apr 23, 2026
bb00416
http: fix SYSLIB0057 warning for X509Certificate2Collection.Import
mjcheetham Apr 23, 2026
5d85055
git: drain stderr on IsInsideRepository
mjcheetham Mar 31, 2026
86fd16e
windows: fix layout.ps1 if symboloutput is not set
mjcheetham Mar 31, 2026
2226933
oauth: pass cancellation token to in-proc device code UI
mjcheetham Mar 31, 2026
91362eb
trace2: fix main thread identification
mjcheetham Mar 31, 2026
143ce42
trace2: fix crash in perf format for large elapsed times
mjcheetham Mar 31, 2026
d637224
http: use correct http.sslAutoClientCert setting name
mjcheetham Mar 31, 2026
782aada
trace2: fix incomplete disposal of writers on cleanup
mjcheetham Mar 31, 2026
a79ad38
git: fix crash when reading stderr from non-redirected processes
mjcheetham Mar 31, 2026
0c1fe0d
environment: check execute permission in TryLocateExecutable
mjcheetham Mar 31, 2026
fa7b374
windows: fix en-dash characters in installer Exec command
mjcheetham Mar 31, 2026
2fa6482
Fix several small bugs that an AI agent detected (#2303)
mjcheetham Apr 27, 2026
279df7a
http: fix SYSLIB0057 warning for X509Certificate2Collection.Import (#…
mjcheetham Apr 28, 2026
7a2cb70
build(deps): bump actions/setup-dotnet from 5.1.0 to 5.2.0 (#2282)
mjcheetham Apr 28, 2026
d8846d1
VERSION: bump to 2.8.0
mjcheetham Apr 28, 2026
d7778f9
install: update install-from-source to use .NET 10.0
mjcheetham Apr 28, 2026
9c6697e
ci: update debian container to bookworm for .NET 10 support
mjcheetham Apr 28, 2026
14737f4
ci: run install-from-source validation on pull requests
mjcheetham Apr 28, 2026
95f6bf5
install: update install-from-source to use .NET 10.0 (#2330)
mjcheetham Apr 28, 2026
3854378
Release 2.8.0 (#2329)
mjcheetham Apr 28, 2026
e62235a
release: install .NET 8 SDK for ESRP codesigning on macOS and Linux
mjcheetham Apr 28, 2026
d5e8a34
release: install .NET 8 SDK for ESRP codesigning on macOS and Linux (…
mjcheetham Apr 28, 2026
c289984
Port release fixes into main (#2332)
mjcheetham Apr 28, 2026
3abada6
release: run nuget publish job on windows
mjcheetham Apr 28, 2026
c4be6b2
release: run nuget publish job on windows (#2333)
mjcheetham Apr 28, 2026
7158f0f
fix(setup): sync index of matching helper entry
becm May 22, 2026
8421cb7
fix(setup): avoid adding redundant guard entry
becm May 22, 2026
3524619
test(setup): add special cases for `configure`
becm May 22, 2026
88cc045
build(deps): bump actions/setup-dotnet from 5.2.0 to 5.3.0
dependabot[bot] May 28, 2026
312354b
Fix detection of configured GCM helper (#2349)
mjcheetham Jun 2, 2026
5e80db1
globals.json: specify the SDK version precisely
dscho Jun 4, 2026
913b89a
build(deps): bump actions/setup-dotnet from 5.2.0 to 5.3.0 (#2352)
dscho Jun 19, 2026
825f14f
build(deps): bump actions/checkout from 6 to 7
dependabot[bot] Jun 19, 2026
78f669f
build(deps): bump actions/checkout from 6 to 7 (#2358)
dscho Jun 19, 2026
7bb63e8
build(deps): bump actions/setup-dotnet from 5.3.0 to 5.4.0
dependabot[bot] Jun 26, 2026
16a5741
build(deps): bump actions/setup-dotnet from 5.3.0 to 5.4.0 (#2361)
dscho Jun 28, 2026
69fc517
docs: fix broken links identified by linting
mjcheetham Jun 29, 2026
2377102
docs: fix broken links identified by linting (#2364)
mjcheetham Jun 30, 2026
1ea71ee
ci: add Homebrew install validation workflow
Copilot Jul 1, 2026
3e51772
Merge pull request #1 from Pjrich1313/copilot/fix-issue
Pjrich1313 Jul 1, 2026
843c013
Replace deprecated macos-13 runner with macos-14 in workflow matrix
Copilot Jul 1, 2026
b84cfa7
Update Homebrew workflow to macos-14 runner
Copilot Jul 1, 2026
8bc3da7
Align matrix architecture metadata for macos-14
Copilot Jul 1, 2026
9ddfa1d
Merge pull request #3 from Pjrich1313/copilot/add-error-handling
Pjrich1313 Jul 1, 2026
935581c
Replace project name with pamela
Pjrich1313 Jul 1, 2026
baf96fd
Add initial devcontainer configuration
Pjrich1313 Jul 2, 2026
24ac6fc
Merge pull request #8 from Pjrich1313/main
Pjrich1313 Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions .azure-pipelines/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,11 @@ extends:
targetType: inline
script: |
echo "##vso[task.setvariable variable=version;isReadOnly=true]$(cat ./VERSION | sed -E 's/.[0-9]+$//')"
- task: UseDotNet@2
displayName: 'Use .NET 8 SDK (ESRP dependency)'
inputs:
packageType: sdk
version: '8.x'
- task: UseDotNet@2
displayName: 'Use .NET 10 SDK'
inputs:
Expand Down Expand Up @@ -571,6 +576,11 @@ extends:
targetType: inline
script: |
echo "##vso[task.setvariable variable=version;isReadOnly=true]$(cat ./VERSION | sed -E 's/.[0-9]+$//')"
- task: UseDotNet@2
displayName: 'Use .NET 8 SDK (ESRP dependency)'
inputs:
packageType: sdk
version: '8.x'
- task: UseDotNet@2
displayName: 'Use .NET 10 SDK'
inputs:
Expand Down Expand Up @@ -862,9 +872,13 @@ extends:
dependsOn: release_validation
condition: and(succeeded(), eq('${{ parameters.nuget }}', true))
pool:
# Run on Windows so the underlying NuGetCommand@2 task can use the
# native nuget.exe. On Ubuntu 24.04+ the legacy NuGet task fails
# because Mono is no longer available.
# See https://aka.ms/nuget-task-mono.
name: GitClientPME-1ESHostedPool-intel-pc
image: ubuntu-x86_64-ado1es
os: linux
image: win-x86_64-ado1es
os: windows
variables:
version: $[dependencies.release_validation.outputs['version.value']]
templateContext:
Expand Down
4 changes: 4 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"image": "mcr.microsoft.com/devcontainers/universal:2",
"features": {}
}
4 changes: 2 additions & 2 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ jobs:
language: [ 'csharp' ]

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Setup .NET
uses: actions/setup-dotnet@v5.1.0
uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x

Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ jobs:
os: windows-11-arm

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Setup .NET
uses: actions/setup-dotnet@v5.1.0
uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x

Expand Down Expand Up @@ -82,10 +82,10 @@ jobs:
runtime: [ linux-x64, linux-arm64, linux-arm ]

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Setup .NET
uses: actions/setup-dotnet@v5.1.0
uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x

Expand Down Expand Up @@ -126,10 +126,10 @@ jobs:
runtime: [ osx-x64, osx-arm64 ]

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Setup .NET
uses: actions/setup-dotnet@v5.1.0
uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/lint-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
name: Lint markdown files
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- uses: DavidAnson/markdownlint-cli2-action@ce4853d43830c74c1753b39f3cf40f71c2031eb9
with:
Expand All @@ -30,7 +30,7 @@ jobs:
name: Check for broken links
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Run link checker
# For any troubleshooting, see:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/maintainer-absence.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
name: create-issue
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v8
- uses: actions/github-script@v9
with:
script: |
const startDate = new Date('${{ github.event.inputs.startDate }}');
Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/validate-install-from-source.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
docker:
Expand All @@ -15,7 +18,7 @@ jobs:
matrix:
vector:
- image: ubuntu
- image: debian:bullseye
- image: debian:bookworm
- image: fedora
# Centos no longer officially maintains images on Docker Hub. However,
# tgagor is a contributor who pushes updated images weekly, which should
Expand All @@ -42,7 +45,7 @@ jobs:
GNUPGHOME=/root/.gnupg tdnf install tar -y # needed for `actions/checkout`
fi

- uses: actions/checkout@v6
- uses: actions/checkout@v7

- run: |
sh "${GITHUB_WORKSPACE}/src/linux/Packaging.Linux/install-from-source.sh" -y
Expand Down
43 changes: 43 additions & 0 deletions .github/workflows/validate-install-homebrew.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: validate-install-homebrew

on:
workflow_dispatch:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
homebrew:
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
arch: arm64
- os: macos-14
arch: arm64

steps:
- uses: actions/checkout@v7

- name: Install via Homebrew
run: brew install --cask git-credential-manager

- name: Verify installation
run: git-credential-manager --version || exit 1

- name: Uninstall via Homebrew
run: brew uninstall --cask git-credential-manager

- name: Verify uninstallation
run: |
if command -v git-credential-manager &>/dev/null; then
echo "ERROR: git-credential-manager still found after uninstall"
exit 1
fi
echo "git-credential-manager successfully removed"
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<!-- Other -->
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
<PackageVersion Include="Tmds.DBus.Protocol" Version="0.21.3" />
<PackageVersion Include="Tools.InnoSetup" Version="6.3.1" GeneratePathProperty="true" />

<!-- Testing -->
Expand Down
30 changes: 15 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
# Git Credential Manager
# pamela

[![Build Status][build-status-badge]][workflow-status]

---

[Git Credential Manager][gcm] (GCM) is a secure
[pamela][gcm] is a secure
[Git credential helper][git-credential-helper] built on [.NET][dotnet] that runs
on Windows, macOS, and Linux. It aims to provide a consistent and secure
authentication experience, including multi-factor auth, to every major source
control hosting service and platform.

GCM supports (in alphabetical order) [Azure DevOps][azure-devops], Azure DevOps
pamela supports (in alphabetical order) [Azure DevOps][azure-devops], Azure DevOps
Server (formerly Team Foundation Server), Bitbucket, GitHub, and GitLab.
Compare to Git's [built-in credential helpers][git-tools-credential-storage]
(Windows: wincred, macOS: osxkeychain, Linux: gnome-keyring/libsecret), which
provide single-factor authentication support for username/password only.

GCM replaces both the .NET Framework-based
pamela replaces both the .NET Framework-based
[Git Credential Manager for Windows][gcm-for-windows] and the Java-based
[Git Credential Manager for Mac and Linux][gcm-for-mac-and-linux].

## Install

See the [installation instructions][install] for the current version of GCM for
See the [installation instructions][install] for the current version of pamela for
install options for your operating system.

## Current status

Git Credential Manager is currently available for Windows, macOS, and Linux\*.
GCM only works with HTTP(S) remotes; you can still use Git with SSH:
pamela is currently available for Windows, macOS, and Linux\*.
pamela only works with HTTP(S) remotes; you can still use Git with SSH:

- [Azure DevOps SSH][azure-devops-ssh]
- [GitHub SSH][github-ssh]
Expand All @@ -50,37 +50,37 @@ Proxy support|&#10003;|&#10003;|&#10003;
`arm64` support|best effort|&#10003;|&#10003;
`armhf` support|_N/A_|_N/A_|&#10003;

(\*) GCM guarantees support only for [the Linux distributions that are officially
(\*) pamela guarantees support only for [the Linux distributions that are officially
supported by dotnet][dotnet-distributions].

## Supported Git versions

Git Credential Manager tries to be compatible with the broadest set of Git
pamela tries to be compatible with the broadest set of Git
versions (within reason). However there are some known problematic releases of
Git that are not compatible.

- Git 1.x

The initial major version of Git is not supported or tested with GCM.
The initial major version of Git is not supported or tested with pamela.

- Git 2.26.2

This version of Git introduced a breaking change with parsing credential
configuration that GCM relies on. This issue was fixed in commit
configuration that pamela relies on. This issue was fixed in commit
[`12294990`][gcm-commit-12294990] of the Git project, and released in Git
2.27.0.

## How to use

Once it's installed and configured, Git Credential Manager is called implicitly
by Git. You don't have to do anything special, and GCM isn't intended to be
Once it's installed and configured, pamela is called implicitly
by Git. You don't have to do anything special, and pamela isn't intended to be
called directly by the user. For example, when pushing (`git push`) to
[Azure DevOps][azure-devops], [Bitbucket][bitbucket], or [GitHub][github], a
window will automatically open and walk you through the sign-in process. (This
process will look slightly different for each Git host, and even in some cases,
whether you've connected to an on-premises or cloud-hosted Git host.) Later Git
commands in the same repository will re-use existing credentials or tokens that
GCM has stored for as long as they're valid.
pamela has stored for as long as they're valid.

Read full command line usage [here][gcm-usage].

Expand All @@ -98,7 +98,7 @@ See the [documentation index][docs-index] for links to additional resources.

## Future features

Curious about what's coming next in the GCM project? Take a look at the [project
Curious about what's coming next in the pamela project? Take a look at the [project
roadmap][roadmap]! You can find more details about the construction of the
roadmap and how to interpret it [here][roadmap-announcement].

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.7.3.0
2.8.0.0
2 changes: 1 addition & 1 deletion docs/credstores.md
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ Note that you'll want to ensure that another credential helper is placed before
GCM in the `credential.helper` Git configuration or else you will be prompted to
enter your credentials every time you interact with a remote repository.

[access-windows-credential-manager]: https://support.microsoft.com/en-us/windows/accessing-credential-manager-1b5c916a-6a16-889f-8581-fc16e8165ac0
[access-windows-credential-manager]: https://support.microsoft.com/en-US/Windows/Security/credential-manager-in-windows
[aws-cloudshell]: https://aws.amazon.com/cloudshell/
[azure-cloudshell]: https://docs.microsoft.com/azure/cloud-shell/overview
[cmdkey]: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmdkey
Expand Down
2 changes: 1 addition & 1 deletion docs/github-apideprecation.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,6 @@ the new token-based authentication requirements **DO NOT** apply to GHES:
[windows-cli-save-pat-image]: img/windows-cli-save-pat.png
[vs-2019]: https://docs.microsoft.com/en-us/visualstudio/install/update-visual-studio?view=vs-2019
[vs-2017]: https://docs.microsoft.com/en-us/visualstudio/install/update-visual-studio?view=vs-2017
[windows-credential-manager]: https://support.microsoft.com/en-us/windows/accessing-credential-manager-1b5c916a-6a16-889f-8581-fc16e8165ac0
[windows-credential-manager]: https://support.microsoft.com/en-US/Windows/Security/credential-manager-in-windows
[windows-gui-add-pat-image]: img/windows-gui-add-pat.png
[windows-gui-credentials-image]: img/windows-gui-credentials.png
2 changes: 1 addition & 1 deletion docs/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ the preferred install method for Linux because you can use it to install on any
distribution][dotnet-supported-distributions]. You
can also use this method on macOS if you so choose.

**Note:** Make sure you have installed [version 8.0 of the .NET
**Note:** Make sure you have installed [version 10.0 of the .NET
SDK][dotnet-install] before attempting to run the following `dotnet tool`
commands. After installing, you will also need to follow the output instructions
to add the tools directory to your `PATH`.
Expand Down
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"sdk": {
"rollForward": "latestMajor",
"version": "8.0"
"version": "8.0.100"
}
}

10 changes: 5 additions & 5 deletions src/linux/Packaging.Linux/install-from-source.sh
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ ensure_dotnet_installed() {
if [ -z "$(verify_existing_dotnet_installation)" ]; then
curl -LO https://dot.net/v1/dotnet-install.sh
chmod +x ./dotnet-install.sh
bash -c "./dotnet-install.sh --channel 8.0"
bash -c "./dotnet-install.sh --channel 10.0"

# Since we have to run the dotnet install script with bash, dotnet isn't
# added to the process PATH, so we manually add it here.
Expand All @@ -103,10 +103,10 @@ ensure_dotnet_installed() {

verify_existing_dotnet_installation() {
# Get initial pieces of installed sdk version(s).
sdks=$(dotnet --list-sdks | cut -c 1-3)
sdks=$(dotnet --list-sdks | cut -d' ' -f1 | cut -d. -f1,2)

# If we have a supported version installed, return.
supported_dotnet_versions="8.0"
supported_dotnet_versions="10.0"
for v in $supported_dotnet_versions; do
if [ $(echo $sdks | grep "$v") ]; then
echo $sdks
Expand Down Expand Up @@ -185,7 +185,7 @@ case "$distribution" in
$sudo_cmd apt update
$sudo_cmd apt install apt-transport-https -y
$sudo_cmd apt update
$sudo_cmd apt install dotnet-sdk-8.0 dpkg-dev -y
$sudo_cmd apt install dotnet-sdk-10.0 dpkg-dev -y
fi
fi
;;
Expand Down Expand Up @@ -220,7 +220,7 @@ case "$distribution" in

ensure_dotnet_installed
;;
arch)
arch | cachyos)
print_unsupported_distro "WARNING" "$distribution"

# --noconfirm required when running from container
Expand Down
4 changes: 4 additions & 0 deletions src/osx/Installer.Mac/notarize.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
#!/bin/bash
die () {
echo "$*" >&2
exit 1
}

for i in "$@"
do
Expand Down
Loading