Documentation: clarify multiple pushurls vs urls

In a remote with multiple configured URLs, `git remote -v` shows the correct url that fetch uses. However, `git config remote.<remote>.url` returns the last defined url instead. This discrepancy can cause confusion for users with a remote defined as such, since any url defined after the first essentially acts as a pushurl. Add documentation to clarify how fetch interacts with multiple urls and how push interacts with multiple pushurls and urls. Add test affirming interaction between fetch and multiple urls. Signed-off-by: Calvin Wan <calvinwan@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Calvin Wan committed Feb 7, 2023 at 18:12 UTC d390e08076b4486b603f0c8496cc09a5eba4106b
2 files changed +11 -1
Documentation/urls-remotes.txt
+3 -1
@@ -33,7 +33,9 @@ config file would appear like this:
33 ------------
34
35 The `<pushurl>` is used for pushes only. It is optional and defaults
36 -to `<URL>`.
36 +to `<URL>`. Pushing to a remote affects all defined pushurls or to all
37 +defined urls if no pushurls are defined. Fetch, however, will only
38 +fetch from the first defined url if muliple urls are defined.
39
40 Named file in `$GIT_DIR/remotes`
41 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
t/t5510-fetch.sh
+8
@@ -806,6 +806,14 @@ test_expect_success 'fetch.writeCommitGraph with submodules' '
806 )
807 '
808
809 +# fetches from first configured url
810 +test_expect_success 'fetch from multiple configured URLs in single remote' '
811 + git init url1 &&
812 + git remote add multipleurls url1 &&
813 + git remote set-url --add multipleurls url2 &&
814 + git fetch multipleurls
815 +'
816 +
817 # configured prune tests
818
819 set_config_tristate () {