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

Re: [PYRITE] Status update and call for information.

From
Jakub Narebski <jnareb@gmail.com>
Date
May 24, 2008, 01:07 UTC
Message-ID
<m34p8o4ijg.fsf@localhost.localdomain>
In-Reply-To
<5d46db230805222318j25657c10t2955fbdf1aa5c003@mail.gmail.com>
"Govind Salinas" <blix@sophiasuchtig.com> writes:
Show 7 quoted lines
> One of the things that has been commented on by almost any review of
> git are the large numbers of commands that are present and the
> endless stream of flags, options, configuration variables and
> syntaxes that are present in git.  They certainly serve a purpose
> and I probably would not be able to do this without all those things
> but it can get in a normal users way some times.  Here are some of
> the steps I have and will be taking.

Which is bogus, because most of those commands are plumbing, [almost] never to be used by user directly.

If I understand correctly in next major git release those commands are
to be hidden and not present in PATH anymore.
 
Show 10 quoted lines
> 1) Reduce the number of commands.
> 
> I am currently at 30 total commands, and while I have some more to go, I
> think there are some ways that I can get rid of some of them by
> combining them.  Do we really need a clone, branch and checkout?  Don't
> these all mean the same thing in the end?  They mean get me a working
> directory of the repository starting at X.  For clone, you start
> with 'master'. For checkout, you tell it what to get you.  Branch
> will help you manage things you can locally get.  So perhaps we can
> do something like the following...

Note that you sometimes want to make a branch without checking it out. Also note that git-branch is overloaded to get a list of branches available.

Show 11 quoted lines
> Clone a new repo
> pyt checkout http://foo.com/bar/baz.git mybaz
> 
> It's a URL, I know that I can clone that and I know I am not inside
> a repository.
> 
> Fetch
> pyt co <url> # or remote:origin
> 
> It's a URL, but I am inside the repo, I should tell the user that
> they are about to fetch something.

Not necessary, you might have wanted to have repository inside repository, either managed using submodules, or ignored, etc.

Show 16 quoted lines
> Pull
> pyt co -m remote:origin:branch
> 
> Pull is just fetch/merge anyway -m tells it to merge, perhaps a flag -u
> to do it all in one step.
> 
> Merge
> pyt co -m localbranchhead
> 
> Checkout a branch
> pyt co localbranchead # or remote:origin:branch, tag:tagname etc
> 
> Create/switch to new local branch (this should look familiar)
> pyt co -c <newbranch> -b <base>
> 
> The list goes on.

Note also that if you make all those unrelated (at least a bit) things into one command you would lose some of error detection. For example you want to clone, but due to typo and DWIM-mery of "pyt co" command it would silently fetch/merge/branch/whatever. Not good...

Note also that another complaint is that git commands do many fairly independent things... and you would want to escalate it even further...

Show 7 quoted lines
> 2) Reduce complexity.
> 
> This one is easy, not because there are commands in git that don't
> have a use, but because we can usually spell stuff in a simpler way.
> Take for example master@{100}.  If I see someone on the list use that
> on I might expect that that is master 100 commits ago, rather than what
> HEAD was pointing at 100 operations ago.

Errr... master 100 commits ago (in first-parent line) is master~100. And that it is not where HEAD was (indirectly or directly) pointing, but where 'master' ref was pointing.

The ref@{n} notation is very, very useful when you want to correct mistakes such as errorneous rewind ("git reset --hard HEAD^" for example), or botched rebase, or to view pre-rebase version to compare, etc.

Show 14 quoted lines
>  Furthermore, if I have just
> cloned, that won't work because I have no reflog.  So what if we
> spelled that reflog:100:master?  Well now at least I know that I
> am dealing with the reflog.  Perhaps a more refined spelling could
> give the user more information.
> 
> Take ":/message"  I didn't even know that existed until I was looking
> for nifty things to spell, but wouldn't "subject:my subject" work just
> as well?  Thats a little friendlier.
> 
> How about not using the ".." and "..." since it can be surprising to
> users what they actually do without understanding how git works.
> Perhaps something like --revision-start (-r) and --revision-end(-R)
> would help them out.  Add a --symmetric or something for "...".
You don't need two options; first -r is start, second -r is end...
 
> You get the idea.

True, the fact that revisions are non-option parameters, and that pathspecs are also non-option parameters might be a bit confusing to newbie.

On the other hand the a..b and a...b notation is matter of convenience (it is easier to use than "b ^a" or "a b --not $(git merge-base a b)"); perhaps allowing a..b and a...b notation for git-diff was an error... but it makes copy'n'paste easier...

Show 7 quoted lines
> 3) Addons.
> 
> Some functionality isn't for everyone.  I have just put into my
> next branch an addon that gives git revision numbers.  Why, because
> other SCMs that are supposed to be more user friendly have them.
> Because people have been asking for them.  Because they are easier
> to remember.  

Because people does not understand the concept and constraints of distributed version control system (with implied multiple branches and nonlinear history).

Revision numbers cannot be all of: decentralized, global, unchanging, encompassing.

(Decentralized means no single authority assigning numbers, and no repositories which are special in any case for example using merge/pull with different options than other repositories. Global means that all repositories have the same numbers for the same revisions; the opposite is local, that numbers are relevant only in your local repository (and you cannot say: in revision 'n' to someone else). Unchanging means that revsision numbers don't change on pull for example. Encompassing means that all revisions are given number.)

Show 8 quoted lines
> 4) GUI.
> 
> I have a GUI in mind, I haven't had time to work on it, but I have
> started it and the idea is that it should be able to completely
> replace the command line.  Why?  because some people hate command lines
> and more importantly, because I want a GUI that will look like it
> fits into my Gnome desktop and looks decent on my Windows machine
> (which I use because I have to).
Have you checked existing git GUIs, both history viewers and commit
tools?  Gitk, git-gui, QGit, Giggle, ugit, tig,...
 
Show 9 quoted lines
> 5) One stop shop.
> 
> I tried setting up Apache, lighttpd etc on Windows to do some ad-hoc
> serving of a git repo.  I was painful.  I want my webserver, gui,
> command line, diff tool, merge tool to all come in one package.  And
> I DON'T want it to need a cygwin or msys installation to work.
> 
> That just makes life easier.  And I am all about the not expending
> effort.

Perhaps we could just get more examples in gitweb/README and perhaps in user's manual.

BTW. there always is git-instaweb.
But having git-serve would be nice...
-- 
Jakub Narebski
Poland
ShadeHawk on #git
Previous: Karl HasselströmNext: Govind Salinas
Message 5 of 18 in “[PYRITE] Status update and call for information.”
  1. Govind SalinasMay 23, 2008
  2. Karl HasselströmMay 23, 2008
  3. Govind SalinasMay 23, 2008
  4. Karl HasselströmMay 23, 2008
  5. Jakub NarebskiMay 24, 2008
  6. Govind SalinasMay 24, 2008
  7. Jakub NarebskiMay 24, 2008
  8. Govind SalinasMay 24, 2008
  9. Jakub NarebskiMay 24, 2008
  10. Jan KruegerMay 25, 2008
  11. Govind SalinasMay 25, 2008
  12. Dmitry PotapovMay 24, 2008
  13. Jakub NarebskiMay 24, 2008
  14. Govind SalinasMay 24, 2008
  15. Jakub NarebskiMay 25, 2008
  16. Govind SalinasMay 25, 2008
  17. Dmitry PotapovMay 24, 2008
  18. Jakub NarebskiMay 24, 2008

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.