在 Git 存储库中运行 `git add .git` 会发生啥?

Posted

技术标签:

【中文标题】在 Git 存储库中运行 `git add .git` 会发生啥?【英文标题】:What happens when you run `git add .git` in a Git repository?在 Git 存储库中运行 `git add .git` 会发生什么? 【发布时间】:2011-10-13 23:08:11 【问题描述】:

虽然它似乎什么也没做,但它没有给出警告或错误消息。有什么想法吗?

【问题讨论】:

其实是一个相关的问题;我承认我刚刚做到了。我修改它是因为我想添加.gitignore,但制表符补全在.git 处停止,所以我无意中做到了。我(和你一样)担心“我破坏了什么?”。 我这样做是因为我一直在使用 GNU stow 将 .git/info/exclude 文件安装到我与其他人共享的存储库中,并且我想放入包含此 .git 的 stow 包版本控制下的文件夹。 【参考方案1】:

简短的回答:什么都没有。

长答案:

laptop:Projects ctcherry$ mkdir test
laptop:Projects ctcherry$ cd test
laptop:test ctcherry$ git init .
Initialized empty Git repository in /Users/ctcherry/Projects/test/.git/
laptop:test ctcherry$ git add .git
laptop:test ctcherry$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
laptop:test ctcherry$ 

【讨论】:

【参考方案2】:

来自 Git 源码的评论:

/*
 * Read a directory tree. We currently ignore anything but
 * directories, regular files and symlinks. That's because git
 * doesn't handle them at all yet. Maybe that will change some
 * day.
 *
 * Also, we ignore the name ".git" (even if it is not a directory).
 * That likely will not change.
 */

实验看看如果我创建一个文件.git 并尝试添加它会发生什么: (在 Windows 上,当已有 .git 文件夹时,我无法创建文件 .git。我也可以在子目录的其他位置创建 .git,但想尝试 --git-dir--work-tree,我以前没用过。毕竟我在做实验。这也让我证明我可以添加git元数据文件夹,如下所示)

git --git-dir="c:/test" init
touch blah
git --git-dir="c:/test" --work-tree="." add .
git --git-dir="c:/test" --work-tree="." status ( shows blah added)
touch .git
git --git-dir="c:/test" --work-tree="." add .git ( no output as usual)
git --git-dir="c:/test" --work-tree="." status ( only blah shown)

是的,.git - 无论是目录还是文件,都会被 git 忽略。

如果我执行以下操作:

git --git-dir="c:/test" --work-tree="c:/test" add c:/test

所有元文件都被添加。

再一次,据我所知,只有 .git 被忽略,而不是 git 元数据文件夹(您通过 --git-dir 设置)。

【讨论】:

您在源代码的哪个文件/修订版中找到了这条评论? 没关系,找到了——github.com/git/git/blob/… “git 元数据目录”是什么意思?你用--git-dir设置的目录不是你的工作目录吗? 但是如果您尝试在.git 目录中添加文件in 会发生什么?那么名字就不会是“.git”了。

以上是关于在 Git 存储库中运行 `git add .git` 会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

Git删除TFS git存储库中的远程分支

将 Bitrise 配置文件存储在 git 存储库中

裸存储库中的 git ls-files

不能将 git add 与 --patch 选项一起使用

Git 如何处理二进制文件?

我应该在我的 Git 存储库中还是在专用的父目录中运行“pip install -r requirements.txt”?