Yes, that does prevent gitignore files from being committed.
It does not prevent locally-created gitignore files from being applied.
But I’d say the latter is overall a good thing, as some build tools will do a echo"*" > build/.gitignore to have their build-folder add itself to the ignore-list.
Git ignore doesn’t prevent things from being committed it just prevents them from being “tracked” (for lack of a better word) by default. If you manually explicitly add the file to a commit, and then commit the file will be tracked despite matching the ignore
Well, if you’re the build tool that creates that build-folder, then it just means you don’t need to bother your user with adding it to the root gitignore.
One time, I implemented it for basically a repo-specific download cache folder. Ideally, my users don’t need to know of that folder at all.
Or recently, I implemented it for a build tool where my users might not be devs. They might not use Git at all, or not be very adept at it, so I’m glad to not need to document it…
Does it prevent the initial .gitignore from being commited too?
For example, what if a file name had sensitive information. It’s bad practice, but someone might want to ignore the file while also hiding the ignore rule itself.
.gitignore doesn’t prevent things from being committed. It just tells git to ignore files that aren’t already being tracked. And you can easily override that with -f. Putting .gitignore inside of .gitignore will ignore itself (if it’s not already tracked).
If you’re an end user, not a build tool, you’d rather want to place that in .git/info/exclude inside the repo. It’s effectively another gitignore file, which won’t be committed.
But if you do need something like this for a build tool, then yeah, you can create a file /test/.gitignore with these contents:
real-person-first-last.json
.gitignore
Then running git add . just adds /test/fake-person-first-last.json.
Both /test/.gitignore and /test/real-person-first-last.json would be ignored right away.
Had a quick playaround with it:
But I’d say the latter is overall a good thing, as some build tools will do a
echo "*" > build/.gitignoreto have their build-folder add itself to the ignore-list.Ooh, uncomittable files are still honoured. That’s mildly interesting, I can see it being both useful and maddening.
Git ignore doesn’t prevent things from being committed it just prevents them from being “tracked” (for lack of a better word) by default. If you manually explicitly add the file to a commit, and then commit the file will be tracked despite matching the ignore
Yeah, poorly worded on my part.
You can always have local ignore files too (like for your personal IDE or whatever)
What’s the benefit of scripting the wildcard gitignore over just adding build/ to the root gitignore? I guess being build directory name agnostic?
Well, if you’re the build tool that creates that build-folder, then it just means you don’t need to bother your user with adding it to the root gitignore.
One time, I implemented it for basically a repo-specific download cache folder. Ideally, my users don’t need to know of that folder at all.
Or recently, I implemented it for a build tool where my users might not be devs. They might not use Git at all, or not be very adept at it, so I’m glad to not need to document it…
Does it prevent the initial .gitignore from being commited too?
For example, what if a file name had sensitive information. It’s bad practice, but someone might want to ignore the file while also hiding the ignore rule itself.
/test/fake-person-first-last.json /test/real-person-first-last.jsonSomeone might want to selectively omit the second file while keeping the first, but not show what they are hiding.
.gitignore doesn’t prevent things from being committed. It just tells git to ignore files that aren’t already being tracked. And you can easily override that with
-f. Putting.gitignoreinside of .gitignore will ignore itself (if it’s not already tracked).If you’re an end user, not a build tool, you’d rather want to place that in
.git/info/excludeinside the repo. It’s effectively another gitignore file, which won’t be committed.But if you do need something like this for a build tool, then yeah, you can create a file
/test/.gitignorewith these contents:real-person-first-last.json .gitignoreThen running
git add .just adds/test/fake-person-first-last.json.Both
/test/.gitignoreand/test/real-person-first-last.jsonwould be ignored right away.