Skip to content

doc: clarify difference between push.default simple and current #1944

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

dfabulich
Copy link

No description provided.

Copy link

gitgitgadget bot commented Jul 22, 2025

Welcome to GitGitGadget

Hi @dfabulich, and welcome to GitGitGadget, the GitHub App to send patch series to the Git mailing list from GitHub Pull Requests.

Please make sure that either:

  • Your Pull Request has a good description, if it consists of multiple commits, as it will be used as cover letter.
  • Your Pull Request description is empty, if it consists of a single commit, as the commit message should be descriptive enough by itself.

You can CC potential reviewers by adding a footer to the PR description with the following syntax:

CC: Revi Ewer <[email protected]>, Ill Takalook <[email protected]>

NOTE: DO NOT copy/paste your CC list from a previous GGG PR's description,
because it will result in a malformed CC list on the mailing list. See
example.

Also, it is a good idea to review the commit messages one last time, as the Git project expects them in a quite specific form:

  • the lines should not exceed 76 columns,
  • the first line should be like a header and typically start with a prefix like "tests:" or "revisions:" to state which subsystem the change is about, and
  • the commit messages' body should be describing the "why?" of the change.
  • Finally, the commit messages should end in a Signed-off-by: line matching the commits' author.

It is in general a good idea to await the automated test ("Checks") in this Pull Request before contributing the patches, e.g. to avoid trivial issues such as unportable code.

Contributing the patches

Before you can contribute the patches, your GitHub username needs to be added to the list of permitted users. Any already-permitted user can do that, by adding a comment to your PR of the form /allow. A good way to find other contributors is to locate recent pull requests where someone has been /allowed:

Both the person who commented /allow and the PR author are able to /allow you.

An alternative is the channel #git-devel on the Libera Chat IRC network:

<newcontributor> I've just created my first PR, could someone please /allow me? https://github.com/gitgitgadget/git/pull/12345
<veteran> newcontributor: it is done
<newcontributor> thanks!

Once on the list of permitted usernames, you can contribute the patches to the Git mailing list by adding a PR comment /submit.

If you want to see what email(s) would be sent for a /submit request, add a PR comment /preview to have the email(s) sent to you. You must have a public GitHub email address for this. Note that any reviewers CC'd via the list in the PR description will not actually be sent emails.

After you submit, GitGitGadget will respond with another comment that contains the link to the cover letter mail in the Git mailing list archive. Please make sure to monitor the discussion in that thread and to address comments and suggestions (while the comments and suggestions will be mirrored into the PR by GitGitGadget, you will still want to reply via mail).

If you do not want to subscribe to the Git mailing list just to be able to respond to a mail, you can download the mbox from the Git mailing list archive (click the (raw) link), then import it into your mail program. If you use GMail, you can do this via:

curl -g --user "<EMailAddress>:<Password>" \
    --url "imaps://imap.gmail.com/INBOX" -T /path/to/raw.txt

To iterate on your change, i.e. send a revised patch or patch series, you will first want to (force-)push to the same branch. You probably also want to modify your Pull Request description (or title). It is a good idea to summarize the revision by adding something like this to the cover letter (read: by editing the first comment on the PR, i.e. the PR description):

Changes since v1:
- Fixed a typo in the commit message (found by ...)
- Added a code comment to ... as suggested by ...
...

To send a new iteration, just add another PR comment with the contents: /submit.

Need help?

New contributors who want advice are encouraged to join [email protected], where volunteers who regularly contribute to Git are willing to answer newbie questions, give advice, or otherwise provide mentoring to interested contributors. You must join in order to post or view messages, but anyone can join.

You may also be able to find help in real time in the developer IRC channel, #git-devel on Libera Chat. Remember that IRC does not support offline messaging, so if you send someone a private message and log out, they cannot respond to you. The scrollback of #git-devel is archived, though.

Copy link

gitgitgadget bot commented Jul 22, 2025

There are issues in commit b5cbe15:
doc: clarify difference between push.default simpleandcurrent``
Commit not signed off
Lines in the body of the commit messages should be wrapped between 60 and 76 characters.
Indented lines, and lines without whitespace, are exempt

The documentation made `simple` and `current` sound identical. The
difference is that `simple` strictly checks that the upstream tracking
branch's name matches the current branch's name.

Signed-off-by: Dan Fabulich <[email protected]>
@dfabulich dfabulich force-pushed the git-config-simple-doc branch from b5cbe15 to 0aef18e Compare July 22, 2025 17:55
@Ikke
Copy link

Ikke commented Jul 22, 2025

/allow

Copy link

gitgitgadget bot commented Jul 22, 2025

User dfabulich is now allowed to use GitGitGadget.

@dfabulich
Copy link
Author

/preview

Copy link

gitgitgadget bot commented Jul 22, 2025

Preview email sent as [email protected]

@dfabulich
Copy link
Author

/submit

Copy link

gitgitgadget bot commented Jul 23, 2025

Submitted as [email protected]

To fetch this version into FETCH_HEAD:

git fetch https://github.com/gitgitgadget/git/ pr-1944/dfabulich/git-config-simple-doc-v1

To fetch this version to local tag pr-1944/dfabulich/git-config-simple-doc-v1:

git fetch --no-tags https://github.com/gitgitgadget/git/ tag pr-1944/dfabulich/git-config-simple-doc-v1

Copy link

gitgitgadget bot commented Jul 23, 2025

On the Git mailing list, Junio C Hamano wrote (reply to this):

"Dan Fabulich via GitGitGadget" <[email protected]> writes:

> From: Dan Fabulich <[email protected]>
>
> The documentation made `simple` and `current` sound identical. The
> difference is that `simple` strictly checks that the upstream tracking
> branch's name matches the current branch's name.

All of the above are correct, and a patch that sticks to fixing that
would have given us a great improvement.

Thanks for working on this documentation update, but it seems some
unrelated changes are mixed in.

>  	Different values are well-suited for
>  	specific workflows; for instance, in a purely central workflow
>  	(i.e. the fetch source is equal to the push destination),
> -	`upstream` is probably what you want.  Possible values are:
> +	`simple` is probably what you want.  Possible values are:

This change is not explained/justified at all why it was part of the
patch in the proposed log message.

And I do not think this is a good change.  `upstream` is recommended
for most people when they employ a purely central workflow.  You can
start working from the common 'master', even on multiple topics in
parallel at the same time, and perform "git push" with push.default
set to 'upstream'.  With 'simple' you cannot.

    $ git checkout -t -b theme1 origin/master
    ... work work work ...
    $ git checkout -t -b theme2 origin/master
    ... work work work ...
    ... changes for theme2 become complete first ...
    $ git push

Here, if your push.default is set to 'upstream', your theme2 updates
their master, which is exactly what you want.  Then

    $ git fetch origin
    $ git rebase origin/master theme1
    ... rebased on updated 'master' at theirs --- at least it should
    ... contain what we did on our theme2 topic, but possibly
    ... changes from other people.
    ... more work ...
    $ git push

Again, your theme1 updates their master, which is exactly what you
want.

> @@ -23,8 +23,8 @@ push.default::
>    given. This is primarily meant for people who want to
>    avoid mistakes by always being explicit.
>  
> -* `current` - push the current branch to update a branch with the same
> -  name on the receiving end.  Works in both central and non-central
> +* `current` - push the current branch to update the branch with the same
> +  name on the remote.  Works in both central and non-central
>    workflows.

Again, a change that is not explained/justified.  "a" -> "the" I can
understand (i.e. a branch with the same name is unique over there,
so "the" is more appropriate), but not the other one.

>  * `tracking` - This is a deprecated synonym for `upstream`.
>  
> -* `simple` - push the current branch with the same name on the remote.
> +* `simple` - push the current branch to its upstream tracking branch,
> +  but only if the upstream tracking branch has the same name as the
> +  current branch. (`simple` will fail with an error if the upstream
> +  tracking branch's name doesn't match the current branch's name.)

That is correct.  The additional text may be somewhat helpful for
somebody who just got an error message and wants to understand where
the error comes from.

But stepping back a bit, is understanding why it failed the primary
thing our documentation should aim for?  I'd rather see our
documentation help the user achieve what they wanted to do in the
first place.  I.e., Be able to push without an error to publish
their work.  And for that "this will fail when X" is less helpful
than "this is appropriate if you work this way."

    simple - this is like `upstream` but with additional restriction
    that the local branch must be named the same as its upstream
    branch.  Suitable with a very simple centralized workflow, where
    you fork off of their 'master' branch to create your own
    'master', work there, and push the branch back.

>  +
> -If you are working on a centralized workflow (pushing to the same repository you
> -pull from, which is typically `origin`), then you need to configure an upstream
> -branch with the same name.

I do not think this removal is explained/justified, either.  Those
who set push.default to 'simple' while using the centralized
workflow must use one-to-one correspondence, so this advice is very
relevant.  What makes it a good idea to remove it?

Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants