.gitignore没有遵循一些规则(GitHub)

时间:2013-02-12 09:49:13

标签: git github gitignore

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

我有一个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所展示的内容: Here's what GitHub for Windows is showing

更新2

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

3 个答案:

答案 0 :(得分:6)

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

  

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

     

E.g。 “foo/**/bar”与“bar”本身或“foo”的子目录中的“foo”匹配。

所以你想要:

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

答案 1 :(得分: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 /原型/ App_Data文件/ TEMP

这是the documentation中所述的设计:

  

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

答案 2 :(得分:-1)

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

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

如果您要应用此.gitignore检查,请尝试 git rm yourfiles git commit -m“您的提交名称”,然后它们将永远不再被跟踪。在尝试之前确保你有一份副本。