git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: Proposed git mv behavioral change
@ 2007-10-20  5:55 Ari Entlich
  2007-10-20  6:31 ` Jeff King
  2007-10-20 11:02 ` Wincent Colaiuta
  0 siblings, 2 replies; 39+ messages in thread
From: Ari Entlich @ 2007-10-20  5:55 UTC (permalink / raw)
  To: Wincent Colaiuta; +Cc: Michael Witten, Jeff King, git

On Fri, 2007-10-19 at 13:33 +0200, Wincent Colaiuta wrote:
> El 19/10/2007, a las 4:29, Michael Witten escribió:
> > Ah. Basically my 'pseudo-code' is correct, but redundant.
> 
> If I understood the original poster's proposal then I don't think your
> code does what he asked for:
> 
> > What you want to happen is the following:
> > 
> > git show HEAD:A.txt > path/B.txt
> > git add path/B.txt
> > mv A.txt B.txt
> > git rm A.txt
> >
> > Is this correct?
> 
> Here you're copying the content of A.txt as it was in the last (HEAD)
> commit, but from what the poster said he wants the content of A.txt as
> it is staged in the index (that is, there may be staged but uncomitted
> changes).

You took the words right out of my mouth! :)

Yeah, I noticed the problem with using HEAD, but the other problem is
that this would change the contents of the file in the working directory
file, which I don't want. Thus, putting the contents of the file as it
is in the index into the working directory wouldn't be correct either.
In addition, I'm not quite sure where that "mv A.txt B.txt" came from,
since we're supposed to be moving A.txt to path/B.txt...

> > Better:
> >
> > > mv A.txt path/B.txt
> > > Point the index entry for A.txt to path/B.txt
> 
> Yes, that is basically what he was asking for, as I read it.

Yep! I was going to respond to your (Michael's) original message saying
exactly that. :)

> El 19/10/2007, a las 5:47, Jeff King escribió:
> > Hrm. So you _do_ want to do an index-only move of A to B, in which 
> > case the suggestion of a "git-mv --cached" seems sensible. Though 
> > I'm curious why you want that.
> 
> I agree that git-stash can be used in this workflow but I can also 
> imagine cases where the proposed "git-mv --cached" might be a bit 
> nicer.

As Shawn said, --cached wouldn't be entirely accurate as the file in the
working directory is being moved as well.

git-stash has been suggested to me numerous times, but I really feel
that there's no need to use it in this case - if the git mv command gave
adequate control to the user, it would be unnecessary.

> I'm thinking of occasions where you just want to do something 
> like:
> 
> git mv --cached foo bar
> git add --interactive bar

I think it would be the other way around, since the only time this
change would effect anything is when there are changes still waiting to
be staged.

Are you talking about REALLY only changing the index? I can't think of
why you'd want to do this either... After all, wouldn't there be no bar
file to do git add --interactive on? In addition, I don't think giving
--interactive a filename is meaningful...

> I'm not sure the proposed "--cached" switch should ever be the 
> default -- would need to ponder that one -- but I do think the switch 
> would be a nice addition.

Yeah, that is one thing I was wondering. It would break compatibility,
but would it be enough to put a note about that in the announcements for
a release? Could you make the change at a release when the interface
isn't guaranteed to be the same, or is this practice only done with
libraries?

It might be interesting to do some sort of survey of whether people
depend on this behavior. It seems pretty inconsistent with how git works
otherwise, and I'd be surprised if a lot of people expect it (kinda like
the Spanish Inquisition :-P).

Thanks,
	Ari

^ permalink raw reply	[flat|nested] 39+ messages in thread
* Re: Proposed git mv behavioral change
@ 2007-10-19  4:41 lmage11
  0 siblings, 0 replies; 39+ messages in thread
From: lmage11 @ 2007-10-19  4:41 UTC (permalink / raw)
  To: git

Uh... wow. Ok, this thread has really taken off. Sorry, but I can't be
involved with it right now, I'll get back into it sometime tomorrow. Try
not to get too far ahead of me! :)

Also sorry about the crazy line breaking, I'm using a crappy webmail
client at the moment...

Thanks,
   Ari

^ permalink raw reply	[flat|nested] 39+ messages in thread
* Proposed git mv behavioral change
@ 2007-10-18 15:47 lmage11
  2007-10-19  1:47 ` Michael Witten
  2007-10-19  1:54 ` Shawn O. Pearce
  0 siblings, 2 replies; 39+ messages in thread
From: lmage11 @ 2007-10-18 15:47 UTC (permalink / raw)
  To: git

Hey, all...

Based on a question I asked on freenode's #git channel a few days ago, it seems that most 
people only use git 
mv when the file they're moving is clean. Those that don't have become accustomed to the 
behavior that git-mv 
uses when the file is dirty - to pull all unstaged changes into the index. As far as I can tell, 
this behavior is 
largely historical. When git-mv was written in bash (or perl, or whatever it was initially written 
in), it was most 
convenient to implement it as "mv oldname newname; git add newname;", or something 
similar, which would 
result in pulling in all wd changes. However, it seems to me that this behavior violates git's 
consistency. Usually 
when I do something with git, I expect it to do only what it says it will do, and nothing more. 
The 
documentation for git-mv says "The index is updated after successful completion", but I 
would tend to assume 
that this was referring to the name change and not the change in the actual contents of the 
file.

In my situation, I have some changes to a file that I'm not yet ready to commit. In the 
meantime, I've started 
working on another unrelated change that involves renaming one of the files which contain 
unstaged changes. 
I'd like to be able to perform this move without having my unstaged changes implicitly 
staged without my 
knowledge. When I want information put into the index, I either use git update-index if I 
want to explicitly 
stage an entire file or I use git add -i's patch command to explicitly stage individual chunks. I 
like having very 
fine-grained control over what goes into the index and what doesn't.

Therefore, I propose that git mv's behavior be changed. I think it would make far more sense 
for a move to only 
change the actual name of the file and to not pull in unstaged changes. In other words, I'd 
like the index entry 
for the original file name to be removed and an index entry to be added with a different 
name, but using the 
exact same blob hash as the original file. I don't know exactly how git manages the index 
internally, but a 
shortcut for this would be to simply rename the index entry in place.

I'm willing to look into what changes would need to be made to the code for this change to 
happen; I'm not 
asking for someone to do all the work for me. :)

So... Yeah. I'd like to know what people think about this before I put a significant amount of 
effort into it. After 
all, we know how lazy programmers are... :)

Thanks,
   Ari

^ permalink raw reply	[flat|nested] 39+ messages in thread

end of thread, other threads:[~2007-10-22 14:09 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-20  5:55 Proposed git mv behavioral change Ari Entlich
2007-10-20  6:31 ` Jeff King
2007-10-20 11:02 ` Wincent Colaiuta
2007-10-20 11:06   ` Jeff King
  -- strict thread matches above, loose matches on Subject: below --
2007-10-19  4:41 lmage11
2007-10-18 15:47 lmage11
2007-10-19  1:47 ` Michael Witten
2007-10-19  1:57   ` Shawn O. Pearce
2007-10-19  2:07     ` Michael Witten
2007-10-19  2:15       ` Shawn O. Pearce
2007-10-19  2:16       ` Jeff King
2007-10-19  2:29         ` Michael Witten
2007-10-19 11:33           ` Wincent Colaiuta
2007-10-19 15:57             ` Michael Witten
2007-10-19  1:54 ` Shawn O. Pearce
2007-10-19  2:54   ` Michael Witten
2007-10-19  3:19     ` Shawn O. Pearce
2007-10-19  3:24       ` Jeff King
2007-10-19  3:26         ` Michael Witten
2007-10-19  3:35           ` Jeff King
2007-10-19  3:40             ` Michael Witten
2007-10-19  3:47               ` Jeff King
2007-10-19  3:53                 ` Michael Witten
2007-10-19  3:58                   ` Jeff King
2007-10-20  5:55                 ` Ari Entlich
2007-10-20  6:24                   ` Jeff King
2007-10-20  6:34                     ` Michael Witten
2007-10-20  6:36                       ` Jeff King
2007-10-20  6:36                     ` Shawn O. Pearce
2007-10-20  6:40                       ` Jeff King
2007-10-22 14:00                         ` Karl Hasselström
2007-10-20  6:45                       ` Michael Witten
2007-10-20  7:02                         ` Shawn O. Pearce
2007-10-20 11:15                         ` Wincent Colaiuta
2007-10-22 14:08                           ` Karl Hasselström
2007-10-20  5:55   ` Ari Entlich
2007-10-20  6:30     ` Shawn O. Pearce
2007-10-20  7:46       ` Mike Hommey
2007-10-20  6:34     ` Jeff King

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).