From: "Govind Salinas" <blix@sophiasuchtig.com>
To: "Jakub Narebski" <jnareb@gmail.com>
Cc: "Git Mailing List" <git@vger.kernel.org>
Subject: Re: [PYRITE] Status update and call for information.
Date: Sat, 24 May 2008 12:43:19 -0500 [thread overview]
Message-ID: <5d46db230805241043u7222be34w7dd8cfcb188ef005@mail.gmail.com> (raw)
In-Reply-To: <m3r6bs2ixn.fsf@localhost.localdomain>
On Sat, May 24, 2008 at 3:41 AM, Jakub Narebski <jnareb@gmail.com> wrote:
> "Govind Salinas" <blix@sophiasuchtig.com> writes:
>
> What I forgot to ask: how would you compare Pyrite to similar tool,
> namely to EasyGit?
>
I think the main difference is this, from the first bullet on the eg site
http://www.gnome.org/~newren/eg/
"eg focuses on documentation and examples"
EasyGit is more or less a thin wrapper over git that is fully compatible
(AFAIK). Elijah can correct me where I am wrong, but I see it as git
training wheels for the command line. That probably sounds
pejorative but I don't mean it that way. I am taking the opportunity
to break compatibility in order to see if I can improve usability. Also, I
don't want to just focus on the command line, I want to affect all areas.
>> On Fri, May 23, 2008 at 8:07 PM, Jakub Narebski <jnareb@gmail.com> wrote:
>>> "Govind Salinas" <blix@sophiasuchtig.com> writes:
>>>
>>>> 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.
>>
>> That may be true but it is only part of the story. I see plumbing commands
>> being given to users all the time on the mailing list. Usually in some
>> combination. To make it worse they usually get several sets of commands
>> that do something similar but any one may or may not be exactly what
>> they want because not everyone who responds fully understands what the
>> commands are doing.
>
> The change to "git help" to show only porcelain commands unless
> explicitely requested, and to git(7) manpage to have porcelain first
> would help there.
>
> But I think using plumbing in examples are remainder of git early
> days, where it was the only way to work with git. Tools like Pyrite,
> or EasyGit, wouldn't change it...
>
The idea is that there should be one fairly obvious way to do something.
If you have that then there is less confusion, especially when someone
asks for help. Plus, if there is one fairly obvious way to do something,
then people will need to ask for help less often. That is what I hope to
accomplish.
>>>> 1) Reduce the number of commands.
> [...]
> I think you should start not with "minimal number of commands" as a
> goal, but rather with set of distinct tasks ordinary (not scripting)
> user might need, and how to map them into commands.
>
> To heavily overloaded commands are as much if not worse than having
> too many commands to choose from.
>
This is true. This idea is fairly new and I am still deciding exactly
how things
would get broken up. After thinking about it, "checkout" probably should
not be combined with the fetch/pull/merge command because they are
too different. Here is how I am thinking of combining things, perhaps you
and others can give some pointers on what is crazy and what might work.
The ones prefixed with * are the ones that would show up in the short
help, the ones that would be the most typically used.
bisect = bisect
blame = blame
* commit = commit + push + stash + init
push: This is here because it fits the traditional notion of what a
commit does, which is to send a commit to the central
server. I think of it as "I am committing my changes to
the remote repository.
stash: What is stash but a temporary commit (not on the branch)?
init: This can be done a couple of ways, either your initial
commit is combined with the init or --init is a flag
passed to commit to set up the NULL commit. At least
thats how I think of it conceptually.
* checkout = checkout + clone + branch + remote
* config = config
cherry = cherry + cherry-pick
* diff = diff
gc = clean + gc + prune + repack
I plan to make full use of gc --auto to avoid having the
user run this command, but everyone knows there
are reasons to run these commands even with --auto.
"Clean" seems to me to be the working directory version
of gc.
* gui = gui
* help = help
import = apply + cvsimport + <scm>import + am
Here the import strategies would be provided by addons
and such with apply/am as standard.
mail = format-patch + send-mail
move = move
* pull = pull, fetch, merge
rebase = rebase
remove = remove
* resolve = mergetool
revert = reset + reflog
I was thinking of calling this command "recover" instead of
revert, which I still think might describe what I want to do
and might tell you why I think that reflog is something to
combine here. "revert --what-can-i-revert-to" would show
the output of reflog. That wouldn't be the actual name
of the flag, but it gives you the idea.
* serve
* show = show + ls + log + grep + rev-list + rev-parse + describe
Combining all this may raise a few eye-brows, but I think
it makes sense. Really this command is git log + ls-files +
describe and the ability of showing files from other revisions
from git show, the rest can be reduced to functionality already
available in git log.
* status = status
submodule
tag
* track = add/addremove
verify = fsck
>> >> 2) Reduce complexity.
> [...]
>>>> 3) Addons.
[snip problems with revision numbers]
> [...]
>> I responded to this in another mail. The other DVCSs don't claim that
>> revision numbers are all of those things. It is only necessary that when
>> two people say the same thing, it mean the same thing.
>
>> This doesn't stop them from using these numbers more than the sha1
>> IDs because given a branch, the numbers are solid. Doing things the
>> way I propose has the same properties.
>
> I wonder how useful in practice those revision numbers are in larger
> repositories, with nonlinear history, i.e. if -r 6453:master -R 6455:master
> (or something like that) is truly easier to use than master~2..master
>
> I _think_ that sha-1 are largely theoretical scare, as for example I
> don't use them much, and if I use them it is in copy'n'paste manner.
>
They are useful for a different purpose. If I say master~5 today it
probably won't yield the same commit tomorrow. while 6450:master would.
Honestly, I have absolutely no problem with using sha1s myself, I just put
this in because I have seen several people ask for it on the mailing list
recently. I thought to myself, that they COULD have it if they really wanted.
Also keep in mind that 12345: is usually enough as an empty RHS would
default to HEAD, which saves a bit of typing.
>>>> 5) One stop shop.
[snip windows + webserver headaches]
>>> BTW. there always is git-instaweb.
>>>
>>
>> Yeah, but I still need the webserver, thats what I want to get rid of. If you
>> want to do some ad-hoc sharing it is a huge problem and you may not
>> have permissions/time to install software.
>>
>>> But having git-serve would be nice...
>>>
>>
>> Indeed.
>
> And with Python AFAIK you can quite easily set up _simple_ web server
> for HTTP access and browsing repository...
>
> BTW. there was at some time git web interface in Python (old wit), but
> it lost to gitweb; nowadays Ruby, eRuby or Ruby on Rails seems to be
> the rage (new Wit (from XMMS2), Gitarella, Gitorious, GitHub).
>
I was thinking of using Django so that I could reuse the stuff that the
review-board folks are doing. I like their side-by-side diffs etc. But here
is the kicker, I want to use this to do what the hg people have done.
They built their remote push-pull functionality into their built-in webserver.
If we do this then the pyrite http protocol can be a smart transport. I
believe that bzr has a similar feature in theirs.
Thanks for taking a look and giving me your opinion, I like getting
feedback about this.
-Govind
next prev parent reply other threads:[~2008-05-24 17:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-23 6:18 [PYRITE] Status update and call for information Govind Salinas
2008-05-23 6:45 ` Karl Hasselström
2008-05-23 12:36 ` Govind Salinas
2008-05-23 13:12 ` Karl Hasselström
2008-05-24 1:07 ` Jakub Narebski
2008-05-24 5:16 ` Govind Salinas
2008-05-24 8:41 ` Jakub Narebski
2008-05-24 17:43 ` Govind Salinas [this message]
2008-05-24 23:27 ` Jakub Narebski
2008-05-25 9:23 ` Jan Krueger
2008-05-25 18:22 ` Govind Salinas
2008-05-24 19:59 ` Dmitry Potapov
2008-05-24 20:47 ` Jakub Narebski
2008-05-24 21:50 ` Govind Salinas
2008-05-25 11:35 ` Jakub Narebski
2008-05-25 19:03 ` Govind Salinas
2008-05-24 19:57 ` Dmitry Potapov
2008-05-24 22:23 ` Jakub Narebski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5d46db230805241043u7222be34w7dd8cfcb188ef005@mail.gmail.com \
--to=blix@sophiasuchtig.com \
--cc=git@vger.kernel.org \
--cc=jnareb@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).