On Thu, 21 Aug 2008, Junio C Hamano wrote: > Daniel Barkalow <barkalow@xxxxxxxxxxxx> writes: > > > On Mon, 18 Aug 2008, Junio C Hamano wrote: > > ... > >> If we had a configuration for "index-free" people, that changes the > >> semantics of "git add" to register object name of an empty blob when a > >> new path is added, makes "git add" for existing blobs a no-op, but > >> keeps "git commit -a" and "git commit <paths>" to operate as they > >> currently do, then people with such configuration could: > >> > >> $ >new-file > >> $ git add new-file > >> $ edit old-file > >> $ edit new-file > >> $ git diff > >> > >> to always see what's the difference from the HEAD is with "git diff", > >> and any of these three: > >> > >> $ git commit -a > >> $ git commit old-file > >> $ git commit old-file new-file > >> > >> would work as expected by them. We still need to support the three > >> diff variants for normal git people, but people who do not use index > >> do not have to know the two variants ("git diff" vs "git diff HEAD"); > >> such a change could be argued as a "UI improvement" [*1*]. > > > > I think that having the possibility of adding an empty blob (or maybe a > > magical "nothing currently here but git-ls-files includes it") would be > > preferrable to a no-index mode. > > I am not sure if you are really saying something different from what I am > saying. We'll see after this three patch series. The first one is an > unrelated bugfix (but the bug won't trigger with existing callers -- only > triggered with the added codepath). I see this primarily as something you can use if you're worried about leaving files out of commits. When you create the file, you can use "git add -N" to make sure that it won't get overlooked when you're adding things. If you weren't using the index for anything important, you could just use a normal add, but that would get confusing if you're adding completed changes as well as some half-written version of any file that happens to be new. That is, it'll let you cause "git diff" to report the contents as unstaged changes in your working tree, rather than not reporting it (either because it's not tracked at all, or because the changes are now staged). Then you can decide to stage them. (The thing that I'd ideally like to have different is for: $ echo "content" > new-name $ git add -N new-name $ git commit Say: # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # added: new-name # no changes added to commit (use "git add" and/or "git commit -a") rather than committing the empty blob. But that's tricky to implement and keep from breaking other stuff and really minor; and the documentation doesn't exclude that being what happens with -N) -Daniel *This .sig left intentionally blank* -- 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