git状态是否依赖于目录?

git状态是否依赖于目录?,git,Git,我希望这是简单的,我只是奇怪地配置了git,但我不认为这是预期的行为 我创建了一个简单的git回购 > 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 "init

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

我创建了一个简单的git回购

> 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放入目录“that”并执行状态设置时,我会得到以下信息:

> 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")
>光盘
>git状态
#论分行行长
#未为提交而暂存的更改:
#(使用“git add/rm…”更新将提交的内容)
#(使用“git签出--…”放弃工作目录中的更改)
#
#删除:那/什么
#删除:本
#
#未跟踪的文件:
#(使用“git add…”包含在将提交的内容中)
#
#什么
未向提交添加任何更改(使用“git add”和/或“git commit-a”)

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

这不是预期的行为。 我重复了你的一系列命令,一切正常。
我会仔细检查您的'that'目录中是否有任何奇怪的.git目录或一些奇怪的~/.gitconfig配置。

这不是预期的行为。 我重复了你的一系列命令,一切正常。
如果您的'that'目录中没有任何奇怪的.git目录或一些奇怪的~/.gitconfig配置,我会仔细检查。

谢谢您的帮助-我想我已经解决了这个问题。作为ps1var的另一个脚本的一部分,我正在设置一个“GIT_DIR”env var(用于将当前GIT分支添加到提示符中,非常有用)。起初我认为我已经检查过GIT_DIR没有被GIT使用——至少在默认情况下它没有被设置,但很明显它正在以某种容量被使用

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

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


一定要爱环保车…

谢谢你的帮助-我想我已经明白了。作为ps1var的另一个脚本的一部分,我正在设置一个“GIT_DIR”env var(用于将当前GIT分支添加到提示符中,非常有用)。起初我认为我已经检查过GIT_DIR没有被GIT使用——至少在默认情况下它没有被设置,但很明显它正在以某种容量被使用

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

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


必须喜欢环境变量…

目录中没有这些文件,就这么简单。我没有同样的行为。无论哪种方式,我都会收到相同的“无需提交”消息。@OP您在两者之间做错了什么,它不应该这样做。
git status
命令的输出应该是相同的,即“无需提交,工作目录清理”。我完全按照您所做的做了,并且在cd'ing到一个子目录后,我也无需提交任何内容。再次投票支持“无法复制”…您的目录中没有这些文件,就这么简单,我没有同样的行为。无论哪种方式,我都会收到相同的“无需提交”消息。@OP您在两者之间做错了什么,它不应该这样做。
git status
命令的输出应该是相同的,即“无需提交,工作目录清理”。我完全按照您所做的做了,而且在cd'ing到子目录后,我也没有得到任何提交。再次投票支持“无法复制”…感谢您的帮助-我很高兴知道这不是预期的。上面是我所做的和tmp目录/文件的复制/粘贴,这个,那个,在运行上面之前不存在的东西。我也尝试过把我的~/.gitconfig移到一边去做上述工作,但我仍然有同样的问题。另一个步骤是为git添加ppa并升级到1.8.3.1,我仍然有相同的行为。奇怪。。。我会继续找的。谢谢你的帮助-我很高兴知道这不是预期的。上面是我所做的和tmp目录/文件的复制/粘贴,这个,那个,在运行上面之前不存在的东西。我也尝试过把我的~/.gitconfig移到一边去做上述工作,但我仍然有同样的问题。另一个步骤是为git添加ppa并升级到1.8.3.1,我仍然有相同的行为。奇怪。。。我会继续找的。我猜GIT_DIR是由rev parse使用的,而rev parse又被很多东西使用。文档清楚地指出,如果设置了GIT_DIR,GIT rev parse将返回该路径,如果没有设置,它将返回到.GIT的路径,这与我设置GIT_DIR的路径相同。所以,我想我还是有点困惑,但在我理解更大的含义之前,我不会设置GIT_DIR。我想GIT_DIR是由rev parse使用的,而rev parse又被很多东西使用。文档清楚地指出,如果设置了GIT_DIR,GIT rev parse将返回该路径,如果没有设置,它将返回到.GIT的路径,这与我设置GIT_DIR的路径相同。所以,我想我仍然感到困惑,但在我理解更大的含义之前,我不会设置GIT_DIR。