git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Remembering which http remotes require authentication

From
M Hickford <mirth.hickford@gmail.com>
Date
Jun 12, 2023, 06:47 UTC
Message-ID
<CAGJzqsnkH_dtv-CGsSFJ8K0kXKBf1+QQqy=MEw-Vq9XaEqr=AQ@mail.gmail.com>

Most http remotes require authentication to push. Private repositories also require authentication to fetch.

If I understand correctly, http_request_reauth [1] first makes an unauthenticated http request. If this fails with error 401 Unauthorized, then Git retries with authentication. This avoids potentially expensive `credential fill` unless necessary. (`credential fill` may be fast, slow or even require user input)

Could Git remember which remotes require authentication for which operations? On high-latency networks such as 3G or satellite connections [2], skipping a doomed unauthenticated request could potentially halve the time taken for some commands.

A complication: if a repository changed from private to public, Git would continue to authenticate when no longer necessary. A solution could be to remember to skip the unauthenticated request for a limited amount of time, or a maximum number of requests, before rechecking.

[1] https://github.com/git/git/blob/fe86abd7511a9a6862d5706c6fa1d9b57a63ba09/http.c#L2123-L2169 [2] https://hpbn.co/primer-on-latency-and-bandwidth/

Next: brian m. carlson
Message 1 of 5 in “Remembering which http remotes require authentication”
  1. M HickfordJun 12, 2023
  2. brian m. carlsonJun 12, 2023
  3. Junio C HamanoJun 12, 2023
  4. M HickfordJun 21, 2023
  5. brian m. carlsonJun 21, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.