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

Re: Possible d/f conflict bug or regression

From
BDBryan Donlan <bdonlan@gmail.com>
Date
Mar 30, 2008, 04:51 UTC
Message-ID
<3e8340490803292151o58186b18y487ac6fc6d4353b4@mail.gmail.com>
In-Reply-To
<200803300644.15502.chriscool@tuxfamily.org>

On Sun, Mar 30, 2008 at 12:44 AM, Christian Couder <chriscool@tuxfamily.org> wrote:

Show 31 quoted lines
> Le dimanche 30 mars 2008, Bryan Donlan a écrit :
>
> > On Sat, Mar 29, 2008 at 3:13 AM, Christian Couder
>  > <chriscool@tuxfamily.org> wrote:
>  > >
>
> > >  Initialized empty Git repository in .git/
>  > >  Created initial commit 3f945ca: Initial commit.
>  > >   0 files changed, 0 insertions(+), 0 deletions(-)
>  > >   create mode 100644 foo
>  > >  fatal: unable to index file foo
>  > >
>  > >  I think it's quite bad that it doesn't work.
>  >
>  > What behavior would you expect this to have? IMO, it's not entirely
>  > clear what the user means to do if they replace a file with an empty
>  > directory, as an empty directory cannot be added to the index. Even
>  > with a directory with contents, some of the contents may be junk (.o
>  > for example) as far as the user is concerned.
>
>  I think Git should behave the same as when using "git rm foo" instead of "rm
>  foo", that is the file "foo" should be deleted without errors. That's what
>  version 1.5.3 did too.
>
>
>  > Would a clearer diagnostic be a good solution? Something like:
>  > fatal: foo: file replaced by directory.
>  > Use git rm --cached or git add to specify how this should be handled.
>
>  No, I think we should fix the regression. Using "git rm stuff" instead
>  of "rm stuff" should not be required.

This is inconsistent with git's behavior when replacing a file with a symlink then - you can rm file; ln -s something file, and the symlink will be checked in...

As-is, if you "rm stuff" but do not "mkdir stuff", you can commit without problems. Likewise, you can "rm stuff", and "echo foo > stuff", and the file will be updated. "rm stuff" -> "mkdir stuff; vim stuff/bar.c" could equally imply that the user wants to replace "stuff" with a directory, could it not?

I don't think git should be inconsistent in this case, but equally it's difficult to know what the user wants to do if they put in an empty directory... That's why I think it'd be more sensible to let the user know so they can decide which action they want to take. It shouldn't happen often anyway; I'd be interested in hearing about a use-case that involves frequent replacement of files with directories, though :)

Thanks,
Bryan
Previous: Christian CouderNext: Junio C Hamano
Message 5 of 11 in “Possible d/f conflict bug or regression”
  1. Christian CouderMar 29, 2008
  2. Christian CouderMar 29, 2008
  3. Bryan DonlanMar 30, 2008
  4. Christian CouderMar 30, 2008
  5. Bryan DonlanMar 30, 2008
  6. Junio C HamanoMar 30, 2008
  7. 1/3 Add corner case tests for diff-index and diff-filesJunio C Hamano, Mar 31, 2008
  8. 2/3 diff-index: careful when inspecting work tree itemsJunio C Hamano, Mar 31, 2008
  9. Junio C HamanoMar 31, 2008
  10. Christian CouderMar 31, 2008
  11. 3/3 diff-files: careful when inspecting work tree itemsJunio C Hamano, Mar 31, 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.