I know you can use a pattern like *test*
to ignore any directory or file containing word test
.
But now I'm looking for something more advanced.
|- Folder A
| |- File A
| |- File B
|- Folder B
| |- File C
| |- File D
| |- Pro.txt
|- Folder C
| |- Pro.txt
|- Folder D
|- File E
|- File F
I want to ignore all folders that directly contain the Pro.txt
file like Folder B
& Folder C
.
I do not want to ignore just the file, I want to ignore the whole folder (with subfolders and files)
The file Pro.txt
is empty and just an indicator that which folders I do not wish to be uploaded on git and is not required to exist.
And before you say it, I can not change the folder name to contain a specific word.
CodePudding user response:
To expand upon @IlyaBursov's comment, git
doesn't just look for .gitignore
in the root of your repository -- it looks for a .gitignore
file in every directory. So if you have:
.
├── Folder A
│ ├── File A
│ └── File B
├── Folder B
│ ├── File C
│ ├── File D
│ └── .gitignore
├── Folder C
│ └── .gitignore
└── Folder D
├── File E
└── File F
And all those .gitignore
files contain *
, then running git add .
in the root of the repository results in:
$ git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: Folder A/File A
new file: Folder A/File B
new file: Folder D/File E
new file: Folder D/File F
As you can see, git
has ignored everything in Folder B
(and in
Folder C
, but since that directory was empty, the .gitignore
file
is no-op; recall that git
only tracks files, not directories).