0

我希望这很简单,我只是奇怪地配置了 git,但我认为这不是预期的行为。

我创建了一个简单的 git repo

> mkdir tmp
> cd tmp
> touch this
> mkdir that
> touch that/what
> git init
Initialized empty Git repository in /home/.../tmp/.git/
> git add this that
> git commit -a -m "initial commit"
[master (root-commit) 679f2ae] initial commit
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 that/what
 create mode 100644 this

然后我在新创建的 git repo 中做一个状态

> git status
# On branch master
nothing to commit, working directory clean

正如预期的那样,无需提交任何内容。但是,当我 cd 进入目录“那个”并执行状态时,我得到以下信息:

> cd that
> 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:    that/what
#       deleted:    this
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       what
no changes added to commit (use "git add" and/or "git commit -a")

我的问题是当我当前的工作目录不是 repo 的根目录时,为什么 git 认为所有内容都被删除/未跟踪。我不认为这是预期的行为。

4

2 回答 2

3

这不是预期的行为。我重复了你的命令链,它按预期工作。我会仔细检查您的“那个”目录中是否没有任何奇怪的 .git 目录或一些奇怪的 ~/.gitconfig 配置。

于 2013-06-20T18:55:59.330 回答
0

感谢所有的帮助 - 我想我已经弄清楚了。作为我的 ps1 var 的另一个脚本的一部分,我正在设置一个“GIT_DIR”环境变量(它用于将当前的 git 分支添加到我的提示符中,非常有用的恕我直言)。最初我以为我已经检查了 GIT_DIR 没有被 git 使用 - 至少默认情况下它没有设置,但显然它正在以某种身份使用。

我仍然不清楚 git 如何/为什么使用这个 env var,因为我看到的行为不是很直观,我可能会对此进行更多研究。我的脚本将 GIT_DIR 设置为包含 .../.git 的顶级目录。所以很明显,如果我在不同的目录中,git 会对我的当前目录与 *GIT_DIR* 目录进行比较。我不明白为什么这都会有用。

无论如何,将环境变量更改为 MY_GIT_DIR 而不是使用 GIT_DIR 似乎可以解决问题。

必须爱环境变量...

于 2013-06-20T20:33:30.180 回答