mirror of
https://github.com/RGBCube/Site
synced 2025-07-30 20:47:46 +00:00
Add gitignore blog post
This commit is contained in:
parent
eb628354c5
commit
49527966af
3 changed files with 134 additions and 0 deletions
BIN
site/assets/github-ds-store-mr-list.webp
Normal file
BIN
site/assets/github-ds-store-mr-list.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
BIN
site/assets/sisyphus-ds-store.webp
Normal file
BIN
site/assets/sisyphus-ds-store.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 73 KiB |
134
site/blog/gitignore.md
Normal file
134
site/blog/gitignore.md
Normal file
|
@ -0,0 +1,134 @@
|
|||
---
|
||||
title: .gitignore is inherently Sisyphean
|
||||
description: And how to roll the rock over the edge.
|
||||
|
||||
color: "#A5804C"
|
||||
thumbnail: /assets/sisyphus-ds-store.webp
|
||||
|
||||
date: 2024-09-30
|
||||
|
||||
tags:
|
||||
- vcs
|
||||
---
|
||||
|
||||
You just started a new project. You ran `cargo init`,
|
||||
`poetry init` and `go mod init`.
|
||||
|
||||
Those commands created the necessary files to work, it
|
||||
also added the following lines to your .gitignore:
|
||||
|
||||
```
|
||||
target
|
||||
__pycache__
|
||||
bin
|
||||
```
|
||||
|
||||
All great. You continue implementing features, and when
|
||||
the time comes, you publish your project to your Git
|
||||
hosting platform of choice.
|
||||
|
||||
People start to get interested in your project. One even
|
||||
decides that he's going to implement a new feature!
|
||||
Literally free work done for you!
|
||||
|
||||
Alright. That person uses his code editor and tools bundled
|
||||
with his operating system to implement a very cool
|
||||
new feature. He then submits the merge request.
|
||||
|
||||
You start reviewing the code and notice a file quite
|
||||
out of place: `.DS_Store`. You ask the person what
|
||||
it is, he says he has no clue.
|
||||
|
||||

|
||||
|
||||
Whatever. You just delete the file from the branch and
|
||||
add the file's name to the repositories gitignore:
|
||||
|
||||
```
|
||||
target
|
||||
__pycache__
|
||||
bin
|
||||
.DS_Store
|
||||
```
|
||||
|
||||
|
||||
Nice. Now the code is on master, and your repository
|
||||
only contains relevant information.
|
||||
|
||||
Then, someone using an IDE created using web technologies
|
||||
submits another merge request. You look at it, and
|
||||
see that there is a whole directory that is irrelevant.
|
||||
You tell that person to delete the directory from the
|
||||
branch and add it to the gitignore. The gitignore lives on:
|
||||
|
||||
```
|
||||
target
|
||||
__pycache__
|
||||
bin
|
||||
.DS_Store
|
||||
.vscode
|
||||
```
|
||||
|
||||
Then, someone that uses IntelliJ IDEA commits five hundred
|
||||
XML files and the `.idea` directory. You repeat this process:
|
||||
|
||||
```
|
||||
target
|
||||
__pycache__
|
||||
bin
|
||||
.DS_Store
|
||||
.vscode
|
||||
.idea
|
||||
```
|
||||
|
||||
Years pass. Now your gitignore is hundreds of lines long,
|
||||
yet people keep accidentally committing in test scripts,
|
||||
foo, a, qux, data.tar.gz, start.sh, bin-release,
|
||||
cat, asd, fgsgskfh.
|
||||
|
||||
Hell. You feel like a mythic god undergoing punishment
|
||||
for cheating death and deceiving the underworld.
|
||||
|
||||

|
||||
|
||||
How do you escape this endless loop of ignoring files
|
||||
that sneak in? Maybe by educating every single merge
|
||||
request author? Nope, that definitely won't work, there
|
||||
should be a way to automatically handle this with tooling,
|
||||
rather than subjective human communication.
|
||||
|
||||
Luckily, you realize that you can turn the blacklist
|
||||
of files (the gitignore) to a whitelist, by just
|
||||
ignoring everything and manually un-ignoring desired
|
||||
files. You change your gitignore to this:
|
||||
|
||||
```
|
||||
*
|
||||
|
||||
!.gitignore
|
||||
|
||||
!src/*.rs
|
||||
!Cargo.{toml,lock}
|
||||
|
||||
!pysrc/*.py
|
||||
!pyproject.toml
|
||||
!poetry.lock
|
||||
|
||||
!cmd/*.go
|
||||
!main.go
|
||||
!go.{mod,sum}
|
||||
|
||||
!docs/*.md
|
||||
```
|
||||
|
||||
Now, nobody can accidentally commit undesired files,
|
||||
as git automatically ignores them all and only
|
||||
allows the files that are explicitly whitelisted.
|
||||
It's also future proof, future proof until an IDE
|
||||
decides to use the `src/ide.rs` file as a convenient
|
||||
way of storing project specific configuration.
|
||||
And hopefully that future never comes.
|
||||
|
||||
You feel relieved.
|
Loading…
Add table
Add a link
Reference in a new issue