Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

git ignore all files except one extension and folder structure

Tags:

git

gitignore

This is my .gitignore:

#ignore all kind of files * #except php files !*.php 

All I want is to ignore all kind of files except the .php ones, but with this .gitignore I'm also ignoring folders...

Is there a way to tell git to accept my project folder structure while keeping the track only of the .php files?

It seems like now I can't add folders to my repo:

vivo@vivoPC:~/workspace/motor$ git add my_folder/ The following paths are ignored by one of your .gitignore files: my_folder Use -f if you really want to add them. fatal: no files added 
like image 496
javier_domenech Avatar asked Jul 10 '14 13:07

javier_domenech


People also ask

Can Gitignore ignore folders?

gitignore is a plain text file in which each line contains a pattern for files or directories to ignore. It uses globbing patterns to match filenames with wildcard characters. If you have files or directories containing a wildcard pattern, you can use a single backslash ( \ ) to escape the character.

Can you have two git ignore files?

You can have multiple . gitignore , each one of course in its own directory. To check which gitignore rule is responsible for ignoring a file, use git check-ignore : git check-ignore -v -- afile .


2 Answers

This is simple, just add another entry !my_folder in your .gitignore

#ignore all kind of files * #except php files !*.php !my_folder 

The last line will take special care of my_folder, and will not ignore any php files within it; but files within other folders will still be ignored because of the first pattern of *.

EDIT

I think I misread your question. If you want to ignore all files except .php files, you can use

#ignore all kind of files *.* #except php files !*.php 

This will not ignore any file which doesn't have an extension (example: if you have README and not README.txt ), and will ignore any folder with a . in its name (example: directory named module.1).

FWIW, git doesn't track directories, and hence there is no way to specify ignore rules for directory vs file

like image 198
Anshul Goyal Avatar answered Sep 19 '22 06:09

Anshul Goyal


I had a similar problem; I wanted to whitelist *.c, but the accepted answer didn't work for me, because I had files that didn't contain ".".

So for those who want to handle that:

# ignore everything *  # but don't ignore files ending with slash = directories !*/  # and don't ignore files ending with ".php" !*.php 
like image 23
kalnar Avatar answered Sep 17 '22 06:09

kalnar