git ignoring .gitattributes pattern

混江龙づ霸主 提交于 2019-11-29 06:53:21

Not sure this is common case but I had trouble excluding folder tests from source tree which have many nested levels of folders. If I wrote only this line to .gitattributes

tests/* export-ignore

It didnt work and entire directory was remain in archive. The solution was to add wildcards for all subdirs levels:

tests/* export-ignore
tests/*/* export-ignore
tests/*/*/* export-ignore
tests/*/*/*/* export-ignore
tests/*/*/*/*/* export-ignore

With these lines the tests directory finally disappeared from archive.

iain

I believe @Jefromi gave the information needed for me to resolve this with his comments, but is too humble to take the credit, and I'd like to keep my acceptance rating at 100% (quite rightly) so I'll give the answer here:


Ok, two things were needed. --worktree-attributes on its own did not work, but when I moved the .gitattributes file into the root dir from the Site dir, then it worked. Again, the Git book implies that the file doesn't need to be in the root for it to work "... (normally the root of your project)", so I feel a bit let down by those docs (for once). I also think it's not-what-you'd-think behaviour to have to opt in the file when .gitignore just works, IMO.

For directories I had problems with different versions of git, so I had to include an entry both with and without a training slash:

  • foo/bar export-ignore
  • foo/bar/ export-ignore

Where foo/bar is relative to the where I ran git archive, but the actual .gitattributes was in the project root directory in addition to --worktree-attributes as noted above.

VonC

Note: to ignore a directory, you needs to have a '/' at the end of said directory.

Rakefile/

For archive, like Arrowmaster mentions in his answer, and like the Pro Git book details, you need the export-ignore option:

Rakefile/ export-ignore
Holger Böhnke

With git version 1.7.2.5, which is the default on debian squeeze (hence this post), there must not be a slash at the end to ignore a directory. So in order to ignore the deploy dir in the above question the following line must be used (no slash):

deploy        export-ignore

This is in contradiction to the documentation (man gitattributes / man gitignore) and the git book. The documentation of gitattributes references gitignore. Interestingly dirs with a slash (deploy/) work in a .gitignore file.

I did not test later versions of git.

Are you trying to have the files included in the repository but not in the archive created from git archive? If so the syntax of your .gitattributes files wrong. If not then .gitattributes is not what you should be using.

To have files excluded from the archive produced by git archive you should put the following into the .gitattrubutes.

Rakefile export-ignore
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!