Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Welcome to Software Development on Codidact!

Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.

Comments on Conditionally ignore files in git

Parent

Conditionally ignore files in git

+7
−0

I'm using git for LaTeX projects and am in a little dilemma about how to best ignore files.

  • if I add *.pdf to my .gitignore file, I keep forgetting to force add included graphics

  • if I don't add it, I keep accidentally adding the compiled documents, which are often quite large and blow up my repository sizes

  • and even if I remember to add specific filename of the compiled pdf to my gitignore, then dozens of them will clutter the ignore files in my bigger repos and I'll need to add ignore files even for the smaller repos for which normally would not need anything special in addition to my global ignore file.

Is there any way to solve this dilemma? Something like automatically ignoring all .pdf files for which a .tex of the same name exists?

History
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

2 comment threads

Must the built PDFs be colocated with the source PDFs? (2 comments)
I've never used LaTeX, so I don't know if this is an option: Can you set LaTeX to put the .pdf output... (2 comments)
Post
+10
−2

I'm not familiar with Latex, but it seems the PDFs are generated from the Latex files.

It then seems the real problem is that you are trying to keep source and objects derived from that source in the GIT repository. Ideally, a GIT repository is only for the actual source files (those directly edited by humans). Put the files that are automatically derived from source elsewhere. This can be automated with your build scripts putting derived objects in a different place. That different place could be a subdirectory within the repository that is added to the .gitignore list.

Another possibility is to have a cleaner script that you run before each commit. This script would delete all the derived objects.

Yet another possibility, although I really don't like this one, is to have the cleaner script instead edit the .gitignore file to ignore the known derived objects, based on the existence of particular source files.

History
Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

Editing .gitignore is fragile. (8 comments)
Editing .gitignore is fragile.
Monica Cellio‭ wrote over 2 years ago

I agree that last option is not great. It's fragile and will bloat .gitignore over time, since the script can never safely remove things, only add them. Segregated build output is best; git hook to prevent committing unwanted PDFs would be second-best I think.

samcarter‭ wrote over 2 years ago

Monica Cellio‭ Could you elaborate a bit what kind of git hook you have in mind to prevent unwanted committing?

Olin Lathrop‭ wrote over 2 years ago

@Monica: I would probably write the script to completely re-create .gitignore each time. It wouldn't bloat, but the list of other files you want in .gitignore would have to be know to the script. You could code them into the script, but I'd probably create a file like .myignore. The script would start with that, add the files to ignore based on the Latex files it finds, and sort the whole thing. That way .gitignore doesn't change from GIT's point of view unless the list of files to ignore actually changes.

samcarter‭ wrote over 2 years ago

Olin Lathrop‭ My local .gitignore would be empty otherwise (all other rules are in my global gitignore)

Monica Cellio‭ wrote over 2 years ago

samcarter‭ actually, on further thought, a git commit hook doesn't seem right. Those files shouldn't be in your repo to begin with (that's your goal), so is something auto-adding them to the commit? If you never say git add unwanted.pdf then it shouldn't get there, but some git clients (like TortoiseGit) will offer to add new files for you without you having to ask. Is that happening to you?

Or are they not being added but you want to clean up the list of "changed but not staged" files?

samcarter‭ wrote over 2 years ago

Monica Cellio‭ It is me adding them accidentally, usually when I add a whole bunch of files at once, I don't remember them and do things like git add *.pdf or I just overlook them in my git program (gitkraken, sourcetree etc.) when I add the files.

samcarter‭ wrote over 2 years ago

... maybe some pre-commit hook that warns we when I am to commit an incorrect file?

Monica Cellio‭ wrote over 2 years ago

I wonder if a pre-commit hook can test whether a file is already in the repo. If so, then you could write one to block new additions -- at the cost of some hassle when you actually do want to add a new PDF image to your source. Hmm.