如何创建/添加到 .git/info/exclude 文件以忽略本地文件?

问题描述 投票:0回答:2

我仍在学习 git 并掌握它的窍门。我只想忽略工作流程本地的文件。我在这里阅读了许多问答以及 git 文档,但没有一个真正提到或解释如何创建和访问

.git/info/exclude
文件以对其进行修改。当我调用
ls -la
命令查看本地存储库中的所有隐藏文件时,我没有该文件,或者至少它不在 git 的根目录中。我只看到
.git
.gitignore
以及存储库中看到的其他文件。

每次我编辑文件并暂存它时,还有其他系统文件不断显示为已修改。我最终必须每次都将其隐藏起来才能提交/推送到远程存储库。

我尝试过使用

nano .git/info/exclude
cat .git/info/exclude
等命令,假设我必须创建一个命令才能使其工作,但它显示
Error: No such file or directory
。那么,我如何访问该文件以开始在本地忽略它们,以使我的工作流程更轻松、更轻松?

另外,我运行了命令

cd .git
,我在
.git
目录中看到了一些文件(但没有
info/exclude
文件夹):

enter image description here

注意:我知道

git update-index --assume-unchanged <file>
git update-index --skip-worktree <file>
是本地忽略文件的其他方法,但我有兴趣知道如何用
.git/info/exclude
方式做到这一点。

git github gitignore
2个回答
8
投票

有几件事:

首先,您很可能想使用

.gitignore
而不是
.git/info/exclude
。 它做同样的事情,除了它被签入存储库并与所有工作文件一起进行版本控制。 在大多数情况下,这将是所需的行为。

(如果您使用

.git/info/exclude
那么只有存储库的特定克隆会忽略指定的路径,并且如果忽略规则随着代码的发展而变化,那么您将无法跟踪哪些规则与哪些规则相匹配您的代码版本。)

但是如果你真的想使用

.git/info/exclude
...那么,你将它视为单个文件名,但是(根据 *NIX 约定,在大多数 git 文档中普遍存在)
/
是一个路径分隔器。 所以在你的仓库中你会看到
.git
。 然后

cd .git

如果您在那里执行

ls
,您可能会看到
info
。 如果没有的话

mkdir info

然后您可以

cd info
并创建文件
exclude


0
投票

另一种选择是将

.gitignore
添加到
.gitignore
,然后它将忽略自身,仅在本地工作,就像
.git/info/exclude
应该工作的那样。 然后,您仍然可以在不会被忽略的子文件夹中创建
.gitignore
文件(除非您在顶层
*/.gitignore
中包含
.gitignore
)。

如果我错了,请在评论中纠正我,但这是因为每当讨论

.gitignore
.git/info/exclude
时,似乎到处都忽略了一些细节:

  • .gitignore
    .git/info/exclude
    只是每行一个文本模式的列表。
  • .gitignore
    就像任何其他文件一样,为了使其“同步”并应用于存储库的任何克隆,必须将其添加到存储库,像任何其他文件一样提交和推送,这就是 OP 保留的原因需要承诺。
  • 另一方面,
    .git/info/exclude
    永远只能是本地的,因为
    .git/
    中的文件永远无法在存储库中跟踪。

总之,

.gitignore
的同步行为是选择加入。

对于那些多年后偶然发现这个问题的人,这里有一个总结。

忽略本地文件夹

如上所述使用

.gitignore
.git/info/exclude

  • 您可以使用
    f*oo
    等通配符来排除以
    f
    开头并以
    oo
    结尾的任何内容。
  • 排除文件夹
    foo
    就足够了,不需要
    foo/*
  • 您可以在每个文件夹中都有一个
    .gitignore
    文件,那么如果您想添加,例如,
    bar
    foo/.gitignore
    foo/bar
    .gitignore
    ,那么这就成为最佳实践和用例的问题,它们会有同样的效果。
  • 您可以添加
    foo/.git
    ,然后您可以将一个 git 存储库的内容包含到另一个 git 存储库中,并且排除所包含存储库的
    .git
    文件夹将避免冲突。您仍然需要单独同步。

忽略远程文件夹

OP 明确提到了

--assume-unchanged
--skip-worktree
。 手册页现在明确提到使用
git sparse-checkout
来排除远程文件的同步/下载(例如排除在 Dropbox 中下载同步的文件夹);这使用了
--assume-unchanged
--skip-worktree
,它们是低级命令,正确地在后台运行。

© www.soinside.com 2019 - 2024. All rights reserved.