Re: Proposed git mv behavioral change

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

 



El 20/10/2007, a las 7:55, Ari Entlich escribió:

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.

Well, my point was that sometimes you want to rename a dirty file *right now* without having your modifications staged in the index yet, and only later go ahead and stage the hunks (or the whole file) when they're ready.

Basically, without this feature you have to manually unstage the stuff that you don't want staged:

[hack on dirty foo]
git mv foo bar
[oops... you just staged unfinished changes]
git reset HEAD bar
[hack until bar is ready]
git add bar

So in order to unstage the stuff that wasn't ready you unstaged the whole file and had to re-add it later, in which case what was the point of using "git-mv" in the first place? You may as well have just done:

[hack on dirty foo]
mv foo bar
[hack until bar is ready]
git rm foo
git add bar

The other alternative is to use git-stash:

[hack on dirty foo]
git stash
git mv foo bar
git stash apply
[hack until bar is ready]
git add bar

So, yes, you can do this with git-stash. It just means that "git-mv -- cached" would be a convenient short-cut.

Are you talking about REALLY only changing the index?

No, sorry, I didn't make that clear. I meant that "git mv --cached foo bar" would have the following effect (which if I understand it correctly is basically what you proposed in your first email):

1. Copying "foo" directly to "bar" (even if dirty).

2. When adding "bar" to the the index add the blob corresponding to "foo" as it is staged in the index (or at the HEAD if there are no staged changes).

3. Removing the old file "foo".

The actual mechanics of this don't matter; those are just the perceived effects. You could get exactly the same perceived effects by doing it this way:

1. Creating a new file (or overwriting an existing one) named "bar", whose contents would match those of the file "foo" not as it appears in the working tree but as it is staged in the index.

2. If "foo" has unstaged changes, they should be applied to "bar" as well (but not staged).

3. Removing the old file "foo".

In addition, I don't think giving
--interactive a filename is meaningful...

Whoops. I think I just inadvertently proposed a feature... my most common use of "git-add --interactive" is when I want to stage only specific hunks of a particular file, and so instead of typing "git add bar" I want to type "git add -i bar" and have it jump straight to the "patch" subcommand (5) for that file. Would anyone else find this useful?

Cheers,
Wincent


-
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