Re: Naughty, Evil git-gui patches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2008-05-22 at 19:24 -0400, Shawn O. Pearce wrote:
> Hah!  Do you know why git-gui came along?  Because it was written as
> an emergency measure to allow a transition from no version control
> at all to git at my day-job.  :-)

Necessity, invention.

> > 0002 - I have read the reasons for having merge in the gui be more 
> > strict than 'git merge' from the command line, but 'cvs update' never 
> > gave a clean way to back out, so nobody here expects that anyway.
> 
> Maybe its just the way my brain works these days with git, but I
> have never found the refusal to merge with a dirty working directory
> to be a limitation.  I usually either don't have a dirty working
> directory, or I stash into a temporary branch and switch back to
> do the merge, then rebase or cherry-pick.  Yea, that does mean I
> fall back to the command line in such cases.  Git Gui only users
> don't have that option.
> 
> Once you get used to the idea of being able to recover your old
> state after a merge has started (or even finished!) though the
> idea of a dirty merge just sends chills down my spine.  Its a
> really bad idea.  IMHO its like holding a loaded gun to your foot
> and pulling the trigger every time you do a merge.  After a while
> you run out of toes and have lost something you cared about.

I agree.  I regard this one as transitional.  People used to thinking in
CVS have a hard time letting go.  My plan for this was to maintain a
local patch until the developers I work with are properly trained, and
then drop it.  But, it's Free Software, so if other folks have the same
pain, it's in the mail archive now.

> > 0003 -  Yeah, I want to list the stashes and select from available 
> > stashes to apply.  But this does the 80% of what we need (reducing 
> > command line usage), and my tcl sk1llz aren't that l33t.
> 
> Building a good looking list of stashes would probably require using
> several columns of text widgets with a single scrollbar.  This is
> how the blame viewer and gitk are put together.  Its ugly as s**t.

When I get time, I still plan to look at it.  But if my Windows using
colleagues don't complain, it may not happen.

A simpler option I considered  is just a simple numeric text field in
the stash commands that are allowed to specify a stash (show, apply,
drop, pop).  Choosing any of these would just open a dialog with a list
of stashes and a text field that defaults to 0.  That text field value
gets put into the stash@{$number}.  Is that too lame to bother
implementing?  Clearly a list to choose from is more standard UI design,
I just don't know if it justifies the cost for me.

>  
> > 0004 - This is just a concession to (I think) Tortoise.  Just before you 
> > commit, you notice that you left in a debug message.  This gives us an 
> > easy way to fix by diff before commit'ing.  This requires setting 
> > GIT_EXTERNAL_DIFF, or it's not very interesting.
> 
> I'm not sure I understand this.  Are you trying to get a diff for
> the entire working directory against the staged files in the index?
> As opposed to looking at each file individually?  What is your
> external diff program able to show that git-gui's internal diff
> viewer does not?

The intent is to edit one file at time to clean up before committing.
The external diff doesn't show anything different, it just lets you
edit.  I use emacs/ediff, win users use winmerge or kdiff3.  So it's
poorly named, but that was the git feature I used. The Tortoise (or
maybe WinCVS) scenario that I'm trying to enable is this:

As I'm staging files for commit, I notice I left in a debug message or
test code that shouldn't be committed, and I want to get rid of in the
file in the working directory.  With that file selected in the "Unstaged
Changes" box, I select "External Diff" from "Commit" menu (at least
that's where it is now).  For me that opens an ediff with my modified
file and the previous version so I can easily remove things I don't want
to commit.  Save, exit, Rescan (necessary?), stage, commit.

Another option I considered was adding to the context menu in the diff
box to revert a hunk in the file.  But sometimes the changes aren't
exactly hunks and you want an editor to, say, just change one line in a
hunk.

What I don't like about my patch now is that it is synchronous.  git-gui
is locked up waiting for the ediff/winmerge/kdiff3 window to close.
Plus, then I have to click OK to close the console window.  Hmm. Maybe I
should look at how you launch gitk.  That seems more appropriate here.


> I'm not objecting to supporting GIT_EXTERNAL_DIFF, I just want to
> better understand what you are trying to accomplish here so we can
> make sure its the _right_ support.

I'm positive there's room for improvement.
 

> I definately see some value in your bastard patches and would like to
> work with you to get them into a shape that we can include them.  :-)

For now, I think the external diff and pull functions would be the
easiest to clean up.  My stash menu is ugly, and if git-gui's merge is
forever safer than cmd line git-merge, that's fine with me.  I would be
interested in your opinion on that prioritization.

Now I get to go play with git and figure out how to disentangle the
mixed stash and merge stuff in patch #2.  That'll be fun.

Thanks,
Barry

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux