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

[PATCH 5/6] remote.c: introduce remote.pushdefault

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Mar 20, 2013, 12:45 UTC
Message-ID
<1363783501-27981-6-git-send-email-artagnon@gmail.com>
In-Reply-To
<1363783501-27981-1-git-send-email-artagnon@gmail.com>

This new configuration variable defines the default remote to push to, and overrides `branch.<name>.remote` for all branches. It is useful in the typical triangular-workflow setup, where the remote you're fetching from is different from the remote you're pushing to.

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 Documentation/config.txt | 13 ++++++++++---
 remote.c                 |  4 ++++
 t/t5516-fetch-push.sh    | 12 ++++++++++++
 3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index bbba728..e813c33 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -723,9 +723,12 @@ branch.autosetuprebase::
 	This option defaults to never.
 
 branch.<name>.remote::
-	When in branch <name>, it tells 'git fetch' and 'git push' which
-	remote to fetch from/push to.  It defaults to `origin` if no remote is
-	configured. `origin` is also used if you are not on any branch.
+	When on branch <name>, it tells 'git fetch' and 'git push'
+	which remote to fetch from/push to.  The remote to push to
+	may be overridden with `remote.pushdefault` (for all branches).
+	If no remote is configured, or if you are not on any branch,
+	it defaults to `origin` for fetching and `remote.pushdefault`
+	for pushing.
 
 branch.<name>.merge::
 	Defines, together with branch.<name>.remote, the upstream branch
@@ -1894,6 +1897,10 @@ receive.updateserverinfo::
 	If set to true, git-receive-pack will run git-update-server-info
 	after receiving data from git-push and updating refs.
 
+remote.pushdefault::
+	The remote to push to by default.  Overrides
+	`branch.<name>.remote` for all branches.
+
 remote.<name>.url::
 	The URL of a remote repository.  See linkgit:git-fetch[1] or
 	linkgit:git-push[1].
diff --git a/remote.c b/remote.c
index cf7a65d..68056c7 100644
--- a/remote.c
+++ b/remote.c
@@ -350,6 +350,10 @@ static int handle_config(const char *key, const char *value, void *cb)
 	const char *subkey;
 	struct remote *remote;
 	struct branch *branch;
+	if (!prefixcmp(key, "remote.")) {
+		if (!strcmp(key + 7, "pushdefault"))
+			git_config_string(&pushremote_name, key, value);
+	}
 	if (!prefixcmp(key, "branch.")) {
 		name = key + 7;
 		subkey = strrchr(name, '.');
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index a546c2c..63171f1 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -517,6 +517,18 @@ test_expect_success 'push with config remote.*.push = HEAD' '
 git config --remove-section remote.there
 git config --remove-section branch.master
 
+test_expect_success 'push with remote.pushdefault' '
+	mk_test_with_name up_repo heads/frotz &&
+	mk_test_with_name down_repo heads/master &&
+	test_config remote.up.url up_repo &&
+	test_config remote.down.url down_repo &&
+	test_config branch.master.remote up &&
+	test_config remote.pushdefault down &&
+	git push &&
+	test_must_fail check_push_result_with_name up_repo $the_commit heads/master &&
+	check_push_result_with_name down_repo $the_commit heads/master
+'
+
 test_expect_success 'push with config remote.*.pushurl' '
 
 	mk_test heads/master &&
-- 
1.8.2
Previous: Junio C HamanoNext: Jonathan Nieder
Message 21 of 33 in “Support triangular workflows”
  1. 0/6 Support triangular workflowsRamkumar Ramachandra, Mar 20, 2013
  2. 1/6 remote.c: simplify a bit of code using git_config_string()Ramkumar Ramachandra, Mar 20, 2013
  3. Jonathan NiederMar 20, 2013
  4. Ramkumar RamachandraMar 20, 2013
  5. 2/6 t5516 (fetch-push): update test descriptionRamkumar Ramachandra, Mar 20, 2013
  6. Jonathan NiederMar 20, 2013
  7. Ramkumar RamachandraMar 20, 2013
  8. Jonathan NiederMar 20, 2013
  9. 3/6 t5516 (fetch-push): introduce mk_test_with_name()Ramkumar Ramachandra, Mar 20, 2013
  10. Jonathan NiederMar 20, 2013
  11. Ramkumar RamachandraMar 20, 2013
  12. Jonathan NiederMar 20, 2013
  13. Jeff KingMar 20, 2013
  14. Junio C HamanoMar 20, 2013
  15. Jonathan NiederMar 20, 2013
  16. 4/6 remote.c: introduce a way to have different remotes for fetch/pushRamkumar Ramachandra, Mar 20, 2013
  17. Jonathan NiederMar 20, 2013
  18. Junio C HamanoMar 20, 2013
  19. Ramkumar RamachandraMar 20, 2013
  20. Junio C HamanoMar 20, 2013
  21. 5/6 remote.c: introduce remote.pushdefaultRamkumar Ramachandra, Mar 20, 2013
  22. Jonathan NiederMar 20, 2013
  23. Junio C HamanoMar 20, 2013
  24. Ramkumar RamachandraMar 20, 2013
  25. 6/6 remote.c: introduce branch.<name>.pushremoteRamkumar Ramachandra, Mar 20, 2013
  26. Tay Ray ChuanMar 20, 2013
  27. Ramkumar RamachandraMar 20, 2013
  28. Tay Ray ChuanMar 20, 2013
  29. Ramkumar RamachandraMar 22, 2013
  30. Philip OakleyMar 20, 2013
  31. Ramkumar RamachandraMar 22, 2013
  32. Junio C HamanoMar 22, 2013
  33. Ramkumar RamachandraMar 23, 2013

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.