我对Git感到厌烦,并遇到以下问题:

我的项目源树:

/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...

我在我的供应商分支中有代码(目前是MEF),我将在那里编译这些代码,然后将这些引用移到/src/refs中,这是项目获取它们的地方。

我的问题是,我的.gitignore设置为忽略*.dll和*.pdb。我可以执行gitadd-f bar.dll来强制添加被忽略的文件,这是正常的,问题是我无法找出存在哪些文件被忽略。

我想列出被忽略的文件,以确保我不会忘记添加它们。

我已经阅读了gitls文件的手册页,无法使其正常工作。在我看来,gitls文件——排除标准——我应该做我想做的事情。我错过了什么?


当前回答

它应该足以使用

git ls-files --others -i --exclude-standard

因为这涵盖了

git ls-files --others -i --exclude-from=.git/info/exclude

因此后者是冗余的。

您可以通过在~/.gitconfig文件中添加别名来简化此过程:

git config --global alias.ignored "ls-files --others -i --exclude-standard"

现在您只需键入git-ignored即可查看列表。更容易记住,打字更快。

如果您更喜欢Jason耿的解决方案的简洁显示,可以添加别名,如下所示:

git config --global alias.ignored "status --ignored -s"

然而,更详细的输出对于解决.gitignore文件的问题更有用,因为它列出了每个被忽略的棉花拾取文件。通常情况下,您会通过grep管道发送结果,以查看您希望忽略的文件是否在其中,或者您不想忽略的文件在其中。

git ignored | grep some-file-that-isnt-being-ignored-properly

然后,当你只想看到一个简短的显示时,很容易记住并输入

git status --ignored

(-s通常可以省略。)

其他回答

假设有几个忽略目录,为什么不使用“gitstatus node/logs/”来告诉您要添加哪些文件?在目录中,我有一个不属于状态输出的文本文件,例如:

在分支主机上您的分支机构已更新“origin/master”。未跟踪的文件:(使用“git add…”将提交的内容包括在内)

    node/logs/.gitignore 

.gitignore是:

*!.忽略

你可以使用fd。

要运行的命令是:

comm -23 <(fd -HI | sort) <(fd -H | sort) 

请注意,如果没有.git目录而只有.gitignore文件(例如裸机),则必须明确指出.gitignorefile文件的位置。

comm -23 <(fd -HI | sort) <(fd -H --ignore-file .gitignore | sort)

更具体地说,使用--no ignore vcs而不是-I

有关详细信息,请查看此处。

另一个非常干净的选项(没有双关语):

git clean -ndX

说明:

$ git help clean

git-clean - Remove untracked files from the working tree
-n, --dry-run - Don't actually remove anything, just show what would be done.
-d - Remove untracked directories in addition to untracked files.
-X - Remove only files ignored by Git.

注意:此解决方案不会显示已删除的忽略文件。

我会的

git status --porcelain --ignored

并且只列出忽略的文件

git status --porcelain --ignored | grep '^[!][!] '

它应该足以使用

git ls-files --others -i --exclude-standard

因为这涵盖了

git ls-files --others -i --exclude-from=.git/info/exclude

因此后者是冗余的。

您可以通过在~/.gitconfig文件中添加别名来简化此过程:

git config --global alias.ignored "ls-files --others -i --exclude-standard"

现在您只需键入git-ignored即可查看列表。更容易记住,打字更快。

如果您更喜欢Jason耿的解决方案的简洁显示,可以添加别名,如下所示:

git config --global alias.ignored "status --ignored -s"

然而,更详细的输出对于解决.gitignore文件的问题更有用,因为它列出了每个被忽略的棉花拾取文件。通常情况下,您会通过grep管道发送结果,以查看您希望忽略的文件是否在其中,或者您不想忽略的文件在其中。

git ignored | grep some-file-that-isnt-being-ignored-properly

然后,当你只想看到一个简短的显示时,很容易记住并输入

git status --ignored

(-s通常可以省略。)