是的,这看起来像是重复的,因为我可以看到之前有几次询问过。但是我看到的其他答案都没有帮助我。
我有一个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所展示的内容:
更新2
.git文件夹位于存储库的根目录,因此/
。换句话说,D:\github\RepositoryName\.git\
,为了进行比较,src
文件夹为D:\github\RepositoryName\src\
答案 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
。但它只适用于层次结构这个确切深度的那些文件夹,即它会忽略这些:
但它不会忽视这些:
这是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“您的提交名称”,然后它们将永远不再被跟踪。在尝试之前确保你有一份副本。