如何使git仅在当前目录下工作?

如何使git仅在当前目录下工作?,git,bash,github,Git,Bash,Github,我已经为我的点文件创建了一个git存储库,但是当我在我的主目录中使用git init时,它似乎也将所有子目录视为git的一部分。 我已经通过git add remote添加了存储库。 问题是,我的bash显示了我实际所在的分支,例如,分支上文件夹中userr处的用户。因此,当我转到我的Desktop~/Desktop时,它仍然被认为是git目录,我甚至可以在那里使用git状态。但是,我想只考虑存储库的主目录。< P>编辑:下面的第三个选项GITXCELIGIN目录,最好是 除非您明确告诉git在

我已经为我的点文件创建了一个git存储库,但是当我在我的主目录中使用git init时,它似乎也将所有子目录视为git的一部分。 我已经通过git add remote添加了存储库。
问题是,我的bash显示了我实际所在的分支,例如,分支上文件夹中userr处的用户。因此,当我转到我的Desktop~/Desktop时,它仍然被认为是git目录,我甚至可以在那里使用git状态。但是,我想只考虑存储库的主目录。

< P>编辑:下面的第三个选项GITXCELIGIN目录,最好是

除非您明确告诉git在哪里可以找到当前存储库的gitdir,否则它必须找到它的唯一方法就是向上搜索。真的没有其他选择:你告诉它,或者它向上搜索

我能得到的最接近您想要的是通过插入无效的gitdir引用来中断这些目录中的git

echo gitdir: this isn\'t part of any containing repository >$notinthisone/.git
并告诉包含存储库忽略它:

echo $notinthisone >> .gitignore
接下来

$ cd $notinthisone
$ git status
fatal: Not a git repository: this isn't part of any containing repository
而包含存储库中的git add将跳过它——如果您尝试强制执行,您将收到上面的错误消息

对于实现点文件repo的另一种方法,您可以将存储库配置为使用所需的任何工作树。因此:

mv .git somewhere/out/of/the/way
cd !$
git config core.worktree $OLDPWD

echo '*'     >> .gitignore
echo '!.*'   >> .gitignore

git add .gitignore
git commit -m 'ignoring un-hidden files'
Live and learn,在阅读git文档检查.git目录中所有可能的隐藏覆盖时,我遇到了以下问题:

GIT_CEILING_DIRECTORIES
这应该是一个以冒号分隔的绝对路径列表。如果设置了,则它是一个目录列表,git在查找存储库目录时不应将其插入其中。它不会排除当前工作目录或在命令行或环境中设置的GIT_目录。用于排除缓慢加载的网络目录

因此,导出该文件并在.bashrc等效文件中执行相同的操作,例如

export GIT_CEILING_DIRECTORIES=$HOME
git不会向上递归到您的主目录中。然后在您的主目录中

echo '*'   >>.gitignore
echo '!.*' >>.gitignore 

git永远不会向上递归到主目录的repo中

我想我从这个线程中找到了解决方案:@mgold的答案。他建议补充一点

*/*

忽视。它在windows中对我很有效,如果您使用的是基于linux的系统,您可能需要修改regex。我希望这能有所帮助。

我尝试了第二种选择,但没有成功。在访问更深层次的文件夹时,我仍然有相同的结果,例如:在~on master\☿ cd Desktop\Vinicius MacBook Pro上的Vinicius光盘~/Desktop on master\☿ \如果您所在的目录在根目录的路径上任何地方都没有.git,那么您在某个地方有一个显式的gitdir覆盖。执行echo${!GIT_*}以查看环境是否覆盖任何.GIT设置。无法识别:☿ echo${!GIT_*}zsh:event not found:GIT_My bad,这是替换以GIT_*}开头的每个变量名的bashism。