2017-01-31 63 views
0

在我的应用程序中,我有一些我希望git忽略的目录,但是我希望目录本身保留在存储库中。复杂的是,这些目录有时会被构建工具自动删除。因此,在目录内放置一个.gitignore,告诉它忽略所有内容,但它本身(在许多帖子中建议的解决方案)将不起作用。 .gitignore文件有时会自动删除。找不到方法来忽略bin目录内容并保留目录目录

因此,我在我的项目顶层目录中创建了一个.gitignore条目,告诉它忽略像这样的子目录target的内容。

**/target/*

,因为我希望它那工作的。一旦我将target目录提交给它并将其推送到远程,将忽略对target内容的后续更改,并且target永远不会从远程回购中删除。

问题是,当我这样做与bin它不起作用。当我输入git add /path/to/bin(当bin不为空时)它不会添加它,尽管我没有.gitigore文件告诉git忽略它。我可以在git add --force bin之后添加它,但它会添加所有内容,并跟踪后续对bin中的所有更改。

很奇怪,这适用于target,但不适用于bin。看起来像git是硬编码忽略bin dirs,即使我没有一个.gitignore条目告诉它这样做。

+0

这个特定的'bin'目录是否已经提交到存储库?这将解释为什么将它添加到'.gitignore'不起作用。 'bin' AFAIK没有什么特别的。 –

+0

我不认为它已经提交。这实际上是我所渴望的行为。其他开发人员将会获取代码并运行一个maven构建,并且bin和目标dirs需要在maven构建中。添加bin/.gitkeep后,我推送到远程,并通过Web界面在那里看到它。当在本地构建过程中删除该文件时,git将其标记为已更改,如果我添加,提交和推送,bin目录也从远程删除。此时,bin中还有其他内容,但由于.gitkeep是我添加的文件,删除它会导致整个bin目录不见了。 – MidnightJava

回答

0

即使通过git by git add --force bin,也不能向git添加空文件夹。

本质上,git通过路径名管理文件,一个文件的一个节点而不是文件夹。

你必须把.gitkeep文件bin文件夹和git add bin/.gitkeep, 同时添加它,写无视规则按照bin文件夹忽略文件,而不是整个文件夹。

bin/* 
!.gitkeep 
+0

正如我所提到的,我面临的挑战是我不能依赖于将.gitkeep文件保存在bin /中。这是一个eclipse项目,当我清理项目时,它会删除.gitkeep文件。我无法找到一种不这样做的方法。因此,清理完毕后,bin/dir不再位于远程回购站中。类文件是,但它们被视为需要被忽略。我有同样的问题,目标迪尔由maven clean删除,但这种安排适用于那些。也许问题在于,当我构建时,eclipse在.gitigore中添加了一个/ bin /条目。但是,只有一个项目没有办法覆盖它。 – MidnightJava