0

是的,这看起来像是重复的,因为我可以看到这已经被问过几次了。但是我看到的其他答案都没有帮助我。

我有一个 Umbraco 安装,我想存储在 Git(确切地说是 GitHub)中,我显然想省略 Umbraco 创建的日志文件和临时文件。

我的 .gitignore 文件中有以下内容:

App_Data/TEMP/
App_Data/Logs/
App_Data/ClientDependency/
App_Data/Preview/

但是,它不起作用。这些目录中的文件仍然会被添加。

我试过在最后加上一个星号(文档说它不应该是必需的 - 如果它存在,它只处理该目录中的文件。)

我确保每行末尾没有空格。

我已经仔细检查了目录名称的大小写。

我已经将斜线从一种方式换到另一种方式。

如果我从存储库的根目录输入完整路径,它确实可以工作,但这太具体了。(尽管我暂时将其用作解决方法)。如果我们创建新的基于 Umbraco 的项目,我希望能够轻松地重用 .gitignore 文件。

其他未放入完整路径的规则(例如 NuGet 的包文件夹)正在正确处理。

packages/

这条规则有效——我真的看不出有什么区别。

谁能看到我在这里做错了什么?

更新

有效的完整路径是这样的:

/src/Company.Client.Web/App_Data/Logs/
/src/Company.Client.Web/App_Data/TEMP/
/src/Company.Client.Web/App_Data/ClientDependency/
/src/Company.Client.Web/App_Data/Preview/

(我已经混淆了一点,但这就是现在的情况)

以下是 GitHub for Windows 显示的内容: 这是 GitHub for Windows 显示的内容

更新 2

.git 文件夹位于存储库的根目录,因此/. 换句话说D:\github\RepositoryName\.git\,为了比较src文件夹是D:\github\RepositoryName\src\

4

3 回答 3

6

git 1.8.2 (March, 8th 2013)以来,您现在可以使用**

.gitignore.gitattributes文件中的模式可以**/作为匹配 0 级或更多级别的子目录的模式

例如,“ foo/**/bar”匹配“ barfoo本身或“”的子目录中的“ foo”。

所以你要:

**/App_Data/TEMP/
**/App_Data/Logs/
**/App_Data/ClientDependency/
**/App_Data/Preview/
于 2014-03-06T09:19:16.577 回答
5

当您在 .gitignore 中指定文件名或文件夹时,它会被忽略,无论它出现在目录结构中的什么位置。这就是为什么packages/有效。

对于像App_Data/TEMP/.

您可以执行以下操作:

*/*/App_Data/TEMP/

App_Data/TEMP无论两个父目录如何命名,这都会忽略。但它只适用于层次结构的这个确切深度的那些文件夹,即它会忽略这些:

  • src/Company.Client.Web/App_Data/TEMP
  • src/Company.Client2.Web/App_Data/TEMP

但它不会忽略这些:

  • src/App_Data/TEMP
  • src/Company.Client.Web/Prototype/App_Data/TEMP

这是设计使然,如文档中所述

[当模式包含斜杠但不以 1 结尾时],git 将模式视为适合 fnmatch(3) 使用的 shell glob,带有 FNM_PATHNAME 标志:模式中的通配符将不匹配路径名中的 /。例如,“Documentation/*.html”匹配“Documentation/git.html”,但不匹配“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”。

于 2013-02-12T11:22:24.560 回答
0

这似乎是一个简单的错误。我猜您在将日志文件放入存储库后已经设置了 .gitignore 文件。

但实际上,.gitignore 文件用于避免一些未跟踪的文件,但是一旦一个文件被添加到任何提交中一次,它就通过了 .gitignore 检查。

如果您想应用此 .gitignore 检查,请尝试git rm yourfilesgit commit -m "Your commit name"然后它们将永远不会被跟踪。在尝试之前,请确保您拥有它们的副本。

于 2013-02-12T10:04:33.177 回答