Subject: Re: What's cooking in git.git (Apr 2013, #05; Mon, 15)

From: Thomas Rast <[email-masked]>
Date: Wed, 17 Apr 2013 11:47:16 +0200

Junio C Hamano <[email-masked]> writes:

> * jc/add-2.0-delete-default (2013-03-08) 3 commits
>  - git add <pathspec>... defaults to "-A"
>   (merged to 'next' on 2013-04-05 at 199442e)
>  + git add: start preparing for "git add <pathspec>..." to default to "-A"
>  + builtin/add.c: simplify boolean variables
>
>  In Git 2.0, "git add pathspec" will mean "git add -A pathspec".  If
>  you did this in a working tree that tracks dir/lost and dir/another:
>
>  $ rm dir/lost
>  $ edit dir/another
>  $ git add dir
>
>  The last step will not only notices and records updated
>  dir/another, but also notices and records the removal of dir/lost
>  in the index.
>
>  Start training the users for this change to say --no-all when they
>  want to ignore the removal to smooth the transition hump.
>
>  Will merge to 'master' the early bits and cook the rest in 'next' until Git 2.0.

The warning triggers in some cases where it shouldn't, relating to
submodules:

  $ git submodule add [email-masked]:domjudge.git domjudge
  Adding existing repo at 'domjudge' to the index                                                        
  warning: In Git 2.0, 'git add <pathspec>...' will also update the                                      
  index for paths removed from the working tree that match                                               
  the given pathspec. If you want to 'add' only changed                                                  
  or newly created paths, say 'git add --no-all <pathspec>...' instead.

It also seems to hint that the problem is with giving a 'pathspec', but
in fact in the case of a "proper" pathspec (that isn't an existing path)
it does *not* trigger, even though it probably should:

  $ git ls-files
  foo
  $ rm foo
  $ git add 'f*'
  $ git status
  # On branch master
  # Changes not staged for commit:
  #   (use "git add/rm <file>..." to update what will be committed)
  #   (use "git checkout -- <file>..." to discard changes in working directory)
  #
  #       deleted:    foo
  #
  no changes added to commit (use "git add" and/or "git commit -a")
  $ git add -A 'f*'
  $ git status
  # On branch master
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  #       deleted:    foo
  #
  # Untracked files not listed (use -u option to show untracked files)

That's of course assuming that you want to unconditionally make -A the
default.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch