git 添加 . (dot) 不服从 .gitignore (或者我的模式是错误的)
git add . (dot) doesn't obey .gitignore (or my patterns are wrong)
我有以下情况。在我的 asp.net webforms 项目中,我有一些共享存储库,我可以选择使用 在 我的主要存储库下。这些文件夹被命名为 Shared,然后是 Shared.*。例如,我有一个这样的文件夹结构。
\main
.. \.git
.. \main-subfolder
.. \Shared (this should be ignored since own repo)
.... \.git
.... \Shared-subfolder
.... shared files
.. main-files
我认为我正在使用的这种模式可能类似于 git 子模块,但(希望)留待另一次讨论。
我的 .gitignore 文件最初只有:Shared*/
并且一切正常。
然后我发现在我的 asp mvc 项目中,我的 Views/Shared 文件夹被忽略了(正如上述模式预期的那样)。所以我尝试用 !Views/Shared/
添加一个排除项,但这没有用,因为 git 仍然没有检测到它应该添加 Views/Shared 的 mvc 项目内容。
所以我得到了:
Shared*/*
!Views/Shared/
一切似乎都有效,但是,我在我原来的 webforms 项目中发现了一个问题(应该忽略 Shared* 的文件夹)。于是下图。 git status
似乎正确地忽略了共享文件夹,但是当我执行 git add .
然后 git status
时,您可以看到它已被添加。
注意:git com -am "Commit Message"
似乎也有效。如果那是我最初的步骤而不是 git add .
,提交时将忽略 Shared 文件夹。
我的设置(嵌套存储库)不受支持还是我的 .gitignore 模式不正确?提前致谢。
即使我复制了您正在查看的内容,我也感到困惑。我的同情。 git 在这里做的一些事情迎合了深奥的用法(并且可以说应该不是它的默认行为),并且路径名锚定只是古怪。
tl;dr,根据评论和示例,我认为您想要:
Shared*/
!**/Views/Shared*/
所以,令人困惑的部分:
git status
默认情况下 (-u normal
) 根据其中是否有任何 文件 选择要显示的(未忽略和)未跟踪目录git add
没有强制——这与检查其中是否有任何未跟踪的子模块不同。有时绕过未跟踪的子模块边界很有用,但在我看来,一个朴素的 git status
报告并不是默认情况下这样做的好地方。
其次,git 的模式匹配需要前导 /
以将普通名称锚定在模式根(.gitignore
位置或其他来源的工作树顶部),但是嵌入 /
的路径总是锚定在模式根部,因此要在任何地方排除多部分路径模式,请在其前面加上 **/
。我不想与任何坚持认为这违反了最少惊喜原则的人争论...
我有以下情况。在我的 asp.net webforms 项目中,我有一些共享存储库,我可以选择使用 在 我的主要存储库下。这些文件夹被命名为 Shared,然后是 Shared.*。例如,我有一个这样的文件夹结构。
\main
.. \.git
.. \main-subfolder
.. \Shared (this should be ignored since own repo)
.... \.git
.... \Shared-subfolder
.... shared files
.. main-files
我认为我正在使用的这种模式可能类似于 git 子模块,但(希望)留待另一次讨论。
我的 .gitignore 文件最初只有:Shared*/
并且一切正常。
然后我发现在我的 asp mvc 项目中,我的 Views/Shared 文件夹被忽略了(正如上述模式预期的那样)。所以我尝试用 !Views/Shared/
添加一个排除项,但这没有用,因为 git 仍然没有检测到它应该添加 Views/Shared 的 mvc 项目内容。
所以我得到了:
Shared*/*
!Views/Shared/
一切似乎都有效,但是,我在我原来的 webforms 项目中发现了一个问题(应该忽略 Shared* 的文件夹)。于是下图。 git status
似乎正确地忽略了共享文件夹,但是当我执行 git add .
然后 git status
时,您可以看到它已被添加。
注意:git com -am "Commit Message"
似乎也有效。如果那是我最初的步骤而不是 git add .
,提交时将忽略 Shared 文件夹。
我的设置(嵌套存储库)不受支持还是我的 .gitignore 模式不正确?提前致谢。
即使我复制了您正在查看的内容,我也感到困惑。我的同情。 git 在这里做的一些事情迎合了深奥的用法(并且可以说应该不是它的默认行为),并且路径名锚定只是古怪。
tl;dr,根据评论和示例,我认为您想要:
Shared*/
!**/Views/Shared*/
所以,令人困惑的部分:
git status
默认情况下 (-u normal
) 根据其中是否有任何 文件 选择要显示的(未忽略和)未跟踪目录git add
没有强制——这与检查其中是否有任何未跟踪的子模块不同。有时绕过未跟踪的子模块边界很有用,但在我看来,一个朴素的 git status
报告并不是默认情况下这样做的好地方。
其次,git 的模式匹配需要前导 /
以将普通名称锚定在模式根(.gitignore
位置或其他来源的工作树顶部),但是嵌入 /
的路径总是锚定在模式根部,因此要在任何地方排除多部分路径模式,请在其前面加上 **/
。我不想与任何坚持认为这违反了最少惊喜原则的人争论...