I'm having a problem with "git add" in version 1.7.7.6.

The situation is that I have a repository that is contained in a
second-level directory, a sub-sub-directory of "/".  The core.worktree
of the repository is "/", so the working directory is the entire file
tree.  I want this repository to track selected files, which I add
with "git add".

The difficulty is that "git add" seems to not add specific files,
depending on how they are specified as arguments to "git add".  In
particular, /dev/dvd (which is a symbolic link) can be added with "git
add ../../dev/dvd" but not with "git add /dev/dvd".  On the other
hand, /etc/hosts (an ordinary file) can be added with either "git add
/etc/hosts" or "git add ../../etc/hosts".

To demonstrate the problem, I've written a script.  A typical
execution of the script is as follows.  The lines at the left margin
start with "$", and are the lines of the script.  The lines indented 4
spaces start with "+", and are the "simple commands" as they are
executed by the shell, showing the values substituted for the shell
variables.  The lines indented 8 spaces are the output of the various
commands.

Someone suggested that the problem may be triggered by the fact that
/dev is in a different filesystem than / and /etc.  I added a third
section to the script by creating a symbolic link from /etc/hosts.link
to /etc/hosts, which is thus in the same filesystem as / and the
repository.  Git handles it as expected.

Any help with this would be appreciated.

Dale

$ set -x
$ 
$ # Show git version.
$ git version
    + git version
        git version 1.7.7.6
$ 
$ # To be run in a directory that is contained in /.
$ pwd
    + pwd
        /git-add-issue
$ 
$ # Make a test directory.
$ DIR=temp.$$
    + DIR=temp.10714
$ mkdir $DIR
    + mkdir temp.10714
$ cd $DIR
    + cd temp.10714
    ++ pwd
$ DIR_ABSOLUTE=$( pwd )
    + DIR_ABSOLUTE=/git-add-issue/temp.10714
$ 
$ # Create a new repository.
$ git init
    + git init
        Initialized empty Git repository in /git-add-issue/temp.10714/.git/
$ # Set the worktree to be /
$ git config core.worktree /
    + git config core.worktree /
$ # Create empty commit.
$ git commit --allow-empty -m Empty.
    + git commit --allow-empty -m Empty.
        [master (root-commit) 62d86cb] Empty.
$ 
$ # Show empty status
$ git status -uno
    + git status -uno
        # On branch master
        nothing to commit (use -u to show untracked files)
$ 
$ # First test:  /dev/dvd, which is a symbolic link.
$ 
$ # Try to add /dev/dvd
$ ABSOLUTE_NAME=/dev/dvd
    + ABSOLUTE_NAME=/dev/dvd
$ ll $ABSOLUTE_NAME
    + ls -al /dev/dvd
        lrwxrwxrwx. 1 root root 9 Jun 12 22:23 /dev/dvd -> /dev/dvd1
$ git add $ABSOLUTE_NAME
    + git add /dev/dvd
$ git status -uno
    + git status -uno
        # On branch master
        nothing to commit (use -u to show untracked files)
$ git reset
    + git reset
$ 
$ # Try with alternative name ../../dev/dvd
$ RELATIVE_NAME=../../dev/dvd
    + RELATIVE_NAME=../../dev/dvd
$ ll $RELATIVE_NAME
    + ls -al ../../dev/dvd
        lrwxrwxrwx. 1 root root 9 Jun 12 22:23 ../../dev/dvd -> /dev/dvd1
$ git add $RELATIVE_NAME
    + git add ../../dev/dvd
$ git status -uno
    + git status -uno
        # On branch master
        # Changes to be committed:
        #   (use "git reset HEAD <file>..." to unstage)
        #
        #       new file:   ../../dev/dvd
        #
        # Untracked files not listed (use -u option to show untracked files)
$ git reset
    + git reset
$ 
$ # Second test:  /etc/hosts, which is an ordinary file.
$ 
$ # Try to add /etc/hosts
$ ABSOLUTE_NAME=/etc/hosts
    + ABSOLUTE_NAME=/etc/hosts
$ ll $ABSOLUTE_NAME
    + ls -al /etc/hosts
        -rw-r--r--. 1 root root 222 Nov  4  2012 /etc/hosts
$ git add $ABSOLUTE_NAME
    + git add /etc/hosts
$ git status -uno
    + git status -uno
        # On branch master
        # Changes to be committed:
        #   (use "git reset HEAD <file>..." to unstage)
        #
        #       new file:   ../../etc/hosts
        #
        # Untracked files not listed (use -u option to show untracked files)
$ git reset
    + git reset
$ 
$ # Try with alternative name ../../etc/hosts
$ RELATIVE_NAME=../../etc/hosts
    + RELATIVE_NAME=../../etc/hosts
$ ll $RELATIVE_NAME
    + ls -al ../../etc/hosts
        -rw-r--r--. 1 root root 222 Nov  4  2012 ../../etc/hosts
$ git add $RELATIVE_NAME
    + git add ../../etc/hosts
$ git status -uno
    + git status -uno
        # On branch master
        # Changes to be committed:
        #   (use "git reset HEAD <file>..." to unstage)
        #
        #       new file:   ../../etc/hosts
        #
        # Untracked files not listed (use -u option to show untracked files)
$ git reset
    + git reset
$ 
$ # Third test:  /etc/hosts.link, which is a link to /etc/hosts
$ 
$ # Try to add /etc/hosts.link
$ ABSOLUTE_NAME=/etc/hosts.link
    + ABSOLUTE_NAME=/etc/hosts.link
$ ll $ABSOLUTE_NAME
    + ls -al /etc/hosts.link
        lrwxrwxrwx. 1 root root 5 Jun 14 12:04 /etc/hosts.link -> hosts
$ git add $ABSOLUTE_NAME
    + git add /etc/hosts.link
$ git status -uno
    + git status -uno
        # On branch master
        # Changes to be committed:
        #   (use "git reset HEAD <file>..." to unstage)
        #
        #       new file:   ../../etc/hosts
        #
        # Untracked files not listed (use -u option to show untracked files)
$ git reset
    + git reset
$ 
$ # Try with alternative name ../../etc/hosts.link
$ RELATIVE_NAME=../../etc/hosts.link
    + RELATIVE_NAME=../../etc/hosts.link
$ ll $RELATIVE_NAME
    + ls -al ../../etc/hosts.link
        lrwxrwxrwx. 1 root root 5 Jun 14 12:04 ../../etc/hosts.link -> hosts
$ git add $RELATIVE_NAME
    + git add ../../etc/hosts.link
$ git status -uno
    + git status -uno
        # On branch master
        # Changes to be committed:
        #   (use "git reset HEAD <file>..." to unstage)
        #
        #       new file:   ../../etc/hosts.link
        #
        # Untracked files not listed (use -u option to show untracked files)
$ git reset
    + git reset
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to