Re: PATCH: improve git switch documentation

4 messages, 3 authors, 2021-07-12 · open the first message on its own page

Re: PATCH: improve git switch documentation

From: Sergey Organov <hidden>
Date: 2021-07-11 12:23:23

Martin [off-list ref] writes:
On 11/07/2021 11:04, Sergey Organov wrote:
quoted
Felipe Contreras [off-list ref] writes:
quoted
I don't see the logic in here.

   git branch topic # here 'branch' is the verb
Not to me. I assumed the "branch" is always a noun in "git branch", and
the actual meaning of this command is:
Well, it is easy to see it as a noun. But for "branching" creation of
a branch, it can be seen as verb. 

Yet in
   git branch --list
it definitely is a noun.
It's definitely a noun if only consider its description, as output by
"git help":

  "branch            List, create, or delete branches"

So "git branch" is "whatever about branches", not "perform the branch
operation", whatever the latter might be.
But then how would/should those work?
The action/verb is "list" or "show"

   git show branches
   git show tags
   git show ...

That completely tears apart related topics.
Yep, that's it. However, there is no need to immediately do something
about it except considering this as a sound design to be targeted at.
Or is it enough if the subcommand is a verb?
    git branch create
    git branch list
That be ok for me.
This we can't do sanely in a backward-compatible manner, I'm afraid, so
it's likely not an option.

OTOH, adding, say:

      git rm <branch-name>

or, say, adding a whole new "git new" (pun intended) could be considered
to be steps in the right direction if we choose "git <action> ..."
model.
quoted
quoted
quoted
is "branch" a noun or a verb?
Both.
No, it's rather noun plus lacking subcommand, sometimes making it look
like verb :)
As is
    git stash
for
    git stash push

And I should guess lots of people like the short form....
Maybe. My primary point is inconsistency, not my personal preference for
one way or another. I'm afraid one could find suitable example to
support any model.
quoted
I.e., I'm in favor of universal:
    git <command> ...
syntax to Git commands where <command> specifies an action. [Why things
tend to drift to Lisp all the time, I wonder?]
Because humans are more about the "things".
The way we interact is more ofter derived from the object, than the
object being purposefully made for an interaction?
I don't see it, at least not in the usual human conversations. When one
means an action to be performed, they name the action and then the object:

  "Play football", "Go home", "Set your thoughts straight", "Wash your hands"

No?

Anyway, it's more the consistency that matters, not particular
convention. Git problem is that is has no convention at all. "Just do
what feels right today" seems to be the motto.

Finally, the problem for this particular discussion is that if we decide
that it's rather:

  git <object> <command>

that is the way to go, that I'm pretty fine with as well, we should
simply *obsolete "git switch" right away*, rather than spending time
improving its now almost useless documentation.
quoted
 From that POV, for the commands you mentioned, "git bisect" is probably
fine, whereas "git worktree", and "git remote" should better be split to
operations on them, e.g.:
    git new remote
    git new worktree
That also makes documentation harder. People who want a worktree, want
the documentation for it in one place.
  git help worktree

should be able to provide a short manual on worktrees. Please notice
it's again not

  git worktree help

So a manpage for "git new" is not desirable.
Sure it is desirable. That's the primary purpose of manual pages -- to
describe actual commands.
It would have to be split into the manpages for the objects. But that
is not good either, or is it?
No-no! Manual pages for describing actual commands are to be there.

It's user/programmer manuals and tutorials that should rather be built
around concepts. It's fine with me if they are available in the format
of manual pages, even though it's not very suitable for that.
quoted
Once that is regularized, we may as well consider allowing for inverse
order of the first 2 arguments, by making
   git new remote
   git remote new
the synonyms.
Having even more ways to do one and the same thing....
Python was aiming to have one obvious way of doing every single thing...
Did it succeed in that, I wonder? Maybe this aim is only good in theory?

Btw, missing from the discussion:

   git log

"log" can be a verb, but not in the above.
Yep, and "git log" is yet another can of worms I'm not willing to open.

Thanks,
-- 
Sergey Organov

Re: PATCH: improve git switch documentation

From: Martin <hidden>
Date: 2021-07-11 13:39:26

On 11/07/2021 14:23, Sergey Organov wrote:
Martin [off-list ref] writes:
quoted
Because humans are more about the "things".
The way we interact is more ofter derived from the object, than the
object being purposefully made for an interaction?
I don't see it, at least not in the usual human conversations. When one
means an action to be performed, they name the action and then the object:

   "Play football", "Go home", "Set your thoughts straight", "Wash your hands"

No?
1) the order does not necessarily indicate the significance.

2) That is English for you. Afaik there are languages which have the 
verb at the end.
Also, in German it is perfectly fine (though not very common) to use 
"object verb subject". Fussball spielen wir.

Even in English you have: Woe is me. Yes "woe" is the Subject.

Anyway, it's more the consistency that matters, not particular
convention. Git problem is that is has no convention at all. "Just do
what feels right today" seems to be the motto.
Well human languages are not as rigid as computer languages.
Finally, the problem for this particular discussion is that if we decide
that it's rather:

   git <object> <command>

that is the way to go, that I'm pretty fine with as well, we should
simply *obsolete "git switch" right away*, rather than spending time
improving its now almost useless documentation.
Actually then we would end up with

    git branch switch
    git tag switch   // detach
    git commit switch   // detach

Well it could be
    git worktree switch
(ignoring the effect on the index / and bringing "worktree" into a 
single worktree setup)



The problem is, that IMHO forcing either verb or noun, ends up with 
grouping commands in ways that create unnecessary dividers between 
related actions. (Continued, next paragraph)
quoted
quoted
  From that POV, for the commands you mentioned, "git bisect" is probably
fine, whereas "git worktree", and "git remote" should better be split to
operations on them, e.g.:
     git new remote
     git new worktree
This is what I mean with dividers.

There may be some relation between "new branch", "new tag"

But I can see none between "new branch" and "new remote" and "new 
worktree". None at all. Yet I can see relations between different things 
you can do with a worktree.

I also think that, switching to a commit or branch are to closely 
related, and should not be divided.
(There were even suggestions that switching to a commit, is an unnamed 
branch)

As I said, I have not read any research paper on that topic.
But to me, it severely disrupts the intuitive aspect.

quoted
quoted
Once that is regularized, we may as well consider allowing for inverse
order of the first 2 arguments, by making
    git new remote
    git remote new
the synonyms.
Having even more ways to do one and the same thing....
Python was aiming to have one obvious way of doing every single thing...
Did it succeed in that, I wonder? Maybe this aim is only good in theory?
We are way away from having "one single way". But aiming for the extreme 
opposite may not be any smarter.



While there is nothing wrong with going our own way in the end, maybe we 
should look around before?
How do other vcs do it?

svn has at least status and log, which I would consider nouns, the way 
they are used. And it has verbs too.

hg as "branches", "files" which are nouns. And "log".
And it has verbs too.

So there seems to be a pattern to using "mixed" verbs and nouns.

Re: PATCH: improve git switch documentation

From: Sergey Organov <hidden>
Date: 2021-07-11 16:51:19

Martin [off-list ref] writes:
On 11/07/2021 14:23, Sergey Organov wrote:
quoted
Martin [off-list ref] writes:
[...]
quoted
Anyway, it's more the consistency that matters, not particular
convention. Git problem is that is has no convention at all. "Just do
what feels right today" seems to be the motto.
Well human languages are not as rigid as computer languages.
quoted
Finally, the problem for this particular discussion is that if we decide
that it's rather:
   git <object> <command>
that is the way to go, that I'm pretty fine with as well, we should
simply *obsolete "git switch" right away*, rather than spending time
improving its now almost useless documentation.
Actually then we would end up with

   git branch switch
   git tag switch   // detach
   git commit switch   // detach
Why? You don't switch tags or commits. You switch only branches, so it'd
be:

    git branch switch <dest>

where <dest> is any commit'ish.
Well it could be
   git worktree switch
(ignoring the effect on the index / and bringing "worktree" into a
single worktree setup)
Yep, it could be, and it could be even both doing similar things.
The problem is, that IMHO forcing either verb or noun, ends up with
grouping commands in ways that create unnecessary dividers between
related actions. (Continued, next paragraph)
The problem is that there are multiple ways of grouping, and selecting
the right one is not an easy decision. Having carefully though-of
guidelines would help.

Grouping by action first is more universal than grouping by object
first, but not always more "natural", as you've correctly noticed.
quoted
quoted
quoted
  From that POV, for the commands you mentioned, "git bisect" is probably
fine, whereas "git worktree", and "git remote" should better be split to
operations on them, e.g.:
     git new remote
     git new worktree
This is what I mean with dividers.

There may be some relation between "new branch", "new tag"

But I can see none between "new branch" and "new remote" and "new
worktree". None at all. Yet I can see relations between different
things
you can do with a worktree.
The only true relation in this model is that if you want to create
*something* new, you use "git new". Simple like hell.
I also think that, switching to a commit or branch are to closely
related, and should not be divided.
Strictly speaking, there is no need to switch to something that is not
a branch. But we'd need the notion of "unnamed branch" to achieve this
simplicity while not loosing useful functionality, and even gaining
some, see below.
(There were even suggestions that switching to a commit, is an unnamed
branch)
Yep. We just switch our current *branch*, so another *branch* becomes
current. If we specify a commit or a tag as the target, the unnamed
branch should be reset to point there, and only then we should switch
our current to this new unnamed branch. That's it. No need for
complications of "detached HEAD", that even sounds awfully and makes me
scared every time I see it.

In fact this "unnamed branch" could have a non-empty name, say "AUTO",
and its own entry in the reflog. That'd give even more functionality
than is currently available with this chilling "detached HEAD". We should
better bury this Nearly Headless Nick finally.

Thanks,
-- 
Sergey Organov

RE: PATCH: improve git switch documentation

From: Kerry, Richard <hidden>
Date: 2021-07-12 10:32:14

quoted
   git branch switch
   git tag switch   // detach
   git commit switch   // detach
Why? You don't switch tags or commits. You switch only branches, 
Yes you do.
You can switch to branches, tags or commits.

If I remember correctly, "branch" is used in Subversion and CVS only for the creation of a branch.  Likewise "tag" for creating a tag.  
And I think they both use "update" to load the required branch/tag/commit into the current working area.

If git were to do that then I think we might get around some of this confusion.

In that case:
git branch = create a branch
git tag = create a tag

And then a new "update", so:
git update <branchname> = make the current working area contain a copy of the given branch, and similarly "git update <tagname>" or "git update <commit-id>"

In all these cases the keyword after "git" is definitely a verb, even where the actual word used could be either, and you need to look at all the definitions in the dictionary to check.

Regards,
Richard.

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help