GIT:忽略除子子目录和一些文件

时间:2016-01-17 23:15:37

标签: git gitignore

我正用这个撞到墙上,我希望你们有人能帮助我...... 我有这种文件结构:

/public/images/foo
/public/images/foo/default.jpg
/public/images/foo/1/...
/public/images/foo/2/...
/public/images/bar
/public/images/bar/default.jpg
/public/images/bar/1/...
/public/images/bar/2/...
/public/images/baz
/public/images/baz/default.jpg
/public/images/baz/1/...
/public/images/baz/2/...
/public/images/other/...

我想忽略images内的所有内容,但保留default.jpg个文件和other文件夹及其内容。我的.gitignore中的内容无法按预期工作,default.jpg文件仍被忽略:

/public/images/*
!/public/images/*/default.jpg
!/public/images/other/

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

!public/images/**/default.jpg应该有2颗星而不是1代表当前目录。

答案 1 :(得分:1)

好的,我找到了一位朋友的解决方案:

/public/images/*
!/public/images/*/
/public/images/*/*
!/public/images/other/*
!/public/images/*/default.jpg

在这里我可以忘记images内的所有内容,但是通过命名它们来保留一些文件夹并保留一级default.jpg文件。问题是在使用子目录白名单时需要具体。

答案 2 :(得分:-2)

如果您的文件已经存储在存储库中,则必须删除它们,然后才能“忽略”它们。

如何删除跟踪文件?

git rm --cached <file>

现在您可以使用.gitignore文件。

如果您想忽略特定文件(在您的情况下,您希望文件夹本身适合您的csse),您可以使用assume-unchanged标记
https://git-scm.com/docs/git-update-index

- [无糖]假设-不变

  

指定此标志时,不会更新为路径记录的对象名称   相反,此选项设置/取消设置路径的“假设未更改”位。

     

当“假定未更改”位打开时,用户承诺不更改文件并允许Git假定工作树文件与索引中记录的文件匹配。如果要更改工作树文件,则需要取消设置该位以告知Git。当在具有非常慢的lstat(2)系统调用(例如cifs)的文件系统上处理大项目时,这有时很有用。

     

如果需要在索引中修改此文件,Git将失败(优雅地),例如合并时提交;因此,如果上游更改了假定未跟踪文件,则需要手动处理该情况。

enter image description here