2013-02-12 83 views
0

是的,这看起来像一个重复,因为我可以看到这已被问几次之前。但是我看到的其他答案都没有帮助我。.gitignore没有遵循一些规则(GitHub)

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

我有我的.gitignore文件以如下:

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

但是,这是行不通的。这些目录中的文件仍然被添加。

我试图把一个星号上月底(文档说,它不应该需要 - 它仅使用文件涉及在该目录中,如果它是有)

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

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

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

如果我从存储库的根目录输入完整路径,它确实有效,但这太具体了。 (虽然我现在要用它作为解决方案)。如果我们创建新的基于Umbraco的项目,我希望能够轻松地重用.gitignore文件。

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

packages/ 

该规则的作品 - 我真的没有看到区别。

任何人都可以看到我在做什么错在这里?

UPDATE

的作品的完整路径是这样的:

/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上对于Windows显示: Here's what GitHub for Windows is showing

Upd吃2

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

+3

从这些文件夹的文件已经在你的仓库? – 2013-02-12 09:51:54

+0

不,他们不是。我也检查过。 :-) App_Data文件夹仅包含存储库中的Umbraco.config,没有别的。 – 2013-02-12 09:59:33

+0

请告诉我们完整的路径,告诉我们你的git仓库的根目录。 – 2013-02-12 10:00:47

回答

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标志:在模式通配符将不匹配一个/中的路径名。例如, “文档/ *。HTML” 匹配 “文档/ git.html”,而不是 “文档/ PPC/ppc.html” 或 “工具/ PERF /文档/ perf.html”。

+0

这很有效,对于我想要的不太完美,但它更适合。我想我们可以说所有的Umbraco项目都在这个层面上。我们的风格是一个src目录,其下有项目,所以如果遵循这个目录,它就可以很好地工作。 – 2013-02-12 11:28:56

+0

@ColinMackay:不幸的是,这是您能够获得的最佳选择,正如您从引用的文档中看到的那样。 – 2013-02-12 11:29:49

+0

谢谢 - 非常感谢您的帮助。 – 2013-02-12 11:31:52

-1

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

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

如果你想申请这个。gitignore检查,尽量的git RM yourfilesgit的承诺-m“你提交的名字”,然后他们将永远不会再被跟踪。在尝试此操作之前,请确保您有它们的副本。

+1

对不起,这些文件不是,也不是在存储库中。我确信他们在我犯下之前已被移除。显然,我不希望手动删除它们,或者显式包含每次我要提交时我要添加的文件。 – 2013-02-12 11:14:17

6

自从git 1.8.2 (March, 8th 2013),你现在可以使用**

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

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

所以,你想:

**/App_Data/TEMP/ 
**/App_Data/Logs/ 
**/App_Data/ClientDependency/ 
**/App_Data/Preview/ 
+0

看到这在http://stackoverflow.com/a/16165581/1233435。 – bbodenmiller 2014-03-06 09:19:36

相关问题