33 comments

  • rcfox3 hours ago
    This seems like bad advice. I&#x27;ve very rarely committed extra files by accident, but I would 100% forget to unignore files I meant to commit.<p>If you&#x27;re doing an initial setup step to gitignore everything, why not just do an initial setup step to gitignore the usual files? Make a template that you copy into all of your repos.
    • electrovir2 hours ago
      For many years I&#x27;ve have a git-ignored &quot;.not-committed&quot; folder in all of my repos for throwing extra anything into. It&#x27;s been a huge life saver!
      • Zambyte1 hour ago
        You can just add it in a user-level gitignore instead of ignoring it in every repo. See: ~&#x2F;.config&#x2F;git&#x2F;ignore
        • saghm1 hour ago
          I only realized very recently that being able to specify .gitignore files in any part of a repo can be combined with wildcards to just put `.gitignore` with `*` in a arbitrary directories to make them get ignored without needing to modify any wider configuration.
    • dietr1ch26 minutes ago
      I have a small user-global gitignore that most of the job for me,<p><pre><code> ```.gitignore # Ignores ## Unix hidden files .* ## Temporary files and backups *~ *.swp *.bak # Exceptions !.ignore !.gitignore ``` </code></pre> But I tend to copy it over and extend it as I go, and there&#x27;s well-known reference gitignore files to skim for if you have anxiety around any particular language&#x2F;editor&#x2F;tool.<p>Now, I could extend my user-global ignore, but there&#x27;s no project where I want the state of the repo to be wrong, but my local state saving me unknowingly, as I know it&#x27;ll bite others.
    • traviswingo1 hour ago
      &gt; The technique isn’t necessarily the right choice for every repository or developer, but is an alternative to explore.
    • grim_io23 minutes ago
      Most of the colleagues I&#x27;ve worked with only use &quot;git add .&quot; without checking first.<p>Keys, npm directories and huge binaries are fixed by deleting them later on. The horror.
      • embedding-shape0 minutes ago
        [delayed]
      • kryptiskt19 minutes ago
        The problem is that those developers are also going to forget to update the ignore-by-default .gitignore to allow files, so there will be missing files. And they won&#x27;t see any problems, because it works on their machine.
        • yurishimo6 minutes ago
          In my opinion this will pretty quickly solve itself though. Accidentally committing keys to the repo potentially ruins your entire week. With a default disallow all list, you might have one bad deploy oopsie and then commit the files.
    • aleqs1 hour ago
      You can also use something like alint [0][1] to define and enforce rules about files&#x2F;globs that should or shouldn&#x27;t be committed, among other things. You can configure it to run as a pre-commit hook or in CI.<p>(disclaimer - this is my own tool)<p>[0] <a href="https:&#x2F;&#x2F;github.com&#x2F;asamarts&#x2F;alint" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;asamarts&#x2F;alint</a> [1] <a href="https:&#x2F;&#x2F;alint.org&#x2F;docs&#x2F;rules&#x2F;git-hygiene&#x2F;git_no_denied_paths&#x2F;" rel="nofollow">https:&#x2F;&#x2F;alint.org&#x2F;docs&#x2F;rules&#x2F;git-hygiene&#x2F;git_no_denied_paths...</a>
    • gruez3 hours ago
      &gt;This seems like bad advice. I&#x27;ve very rarely committed extra files by accident, [...]<p>You clearly haven&#x27;t seen the people who are lazy and so just do `git add . &amp;&amp; git commit -m ... &amp;&amp; git push -f origin` every time.
      • rcfox3 hours ago
        I&#x27;m not convinced people acting on muscle memory would remember to unignore the files either. They&#x27;re going to lose work or have giant &quot;oops, I forgot to commit these files&quot; commits.
      • cush2 hours ago
        Now walk through exactly what would happen when those lazy people follow this approach…<p>You see the issue right?
        • cortesoft28 minutes ago
          I think the idea is that missing files will immediately cause issues (tests will fail, etc), so CI should catch this immediately.<p>Adding extra, sensitive, files would not cause test failures, and even if they do (via secret scanners, etc), it is too late at that point because they will have already been shared upstream.<p>I am not sure the juice is worth the squeeze here, but it has some logic to it.
      • JimDabell18 minutes ago
        &gt; You clearly haven&#x27;t seen the people who are lazy and so just do `git add . &amp;&amp; git commit -m ... &amp;&amp; git push -f origin` every time.<p>I’ve worked with and managed plenty of people like that and those are the people I <i>least</i> want doing something like this. Seeing the flotsam and jetsam of .DS_Store etc. are an early warning sign they aren’t paying any attention to what they push and the sooner that gets caught and addressed the better.
    • LaGrange2 hours ago
      Recovery from forgetting to add something is _much_ easier than recovery from adding some weird configuration file with plaintext private keys in it.
      • SmasherEpilepti1 hour ago
        It depends. I&#x27;ve lost hours of work after wiping and recreating a repo that had accidentally gitignored a file I was working on, and I didn&#x27;t notice until too late.
      • wafflemaker1 hour ago
        I usually have *secret in .gitignore and append .secret to any files with secrets.
  • Brajeshwar1 hour ago
    It is weird that quite a few developers comes up with advices where they seem to come from a world where they work alone, have not work with enough people, or with enough projects.<p>In this case, a `.gitignore_global` takes care of the usual suspects that he mentioned `.DS_Store files, IDE config, compressed files, etc.`. Even if something goes wrong, it is usually caught during the initial scaffold before critical files goes in.<p>If one is working with new, young, rookie developers, give them the typical lesson on the global gitignore, local, config, and to have dotfiles, etc. Give yours for inspiration or something to start with.<p>Edit: I know that mine is not the best of the dotfiles on the internet but this has helped me switch multiple devices, multiple identities (work, projects, personal, etc) easily. I recently cleaned it up and added automation, test, etc with Claude Code. <a href="https:&#x2F;&#x2F;github.com&#x2F;brajeshwar&#x2F;dot" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;brajeshwar&#x2F;dot</a>
    • wafflemaker1 hour ago
      Wow, thanks so much for . gitignore_global.<p>Finally can have Emacs files ignored automatically in all projects. &lt;3
    • DarmokTanagra1 hour ago
      [dead]
  • isityettime1 hour ago
    How about just learning to use `git add` correctly? Are you so committed to just slamming `git add -A` all the time? It&#x27;s not hard to have uncommitted files sitting in your working tree without messing with .gitignore at all.
  • caseyw3 hours ago
    I don’t ignore by default, but only stage the items I explicitly want.<p>I can’t tell you how many times I’ve been pairing with someone when they just say “git add .”, I’m always confused by that choice.<p>I get it, but I’ve seen more problems arise from adding all than being consistently selective. To each their own.
    • etbebl3 hours ago
      I use &quot;git add .&quot; (or rather -A), but I will <i>always</i> do a &quot;git status&quot; first to make sure I&#x27;m not doing something silly. Of course you still have to be careful about subdirectories, which is why I usually also do a &quot;git status&quot; again before committing.
      • airstrike29 minutes ago
        even better, I recently learned I can just `gst` on oh-my-zsh for `git status` and other similar shortcuts<p><a href="https:&#x2F;&#x2F;kapeli.com&#x2F;cheat_sheets&#x2F;Oh-My-Zsh_Git.docset&#x2F;Contents&#x2F;Resources&#x2F;Documents&#x2F;index" rel="nofollow">https:&#x2F;&#x2F;kapeli.com&#x2F;cheat_sheets&#x2F;Oh-My-Zsh_Git.docset&#x2F;Content...</a>
      • jameshart1 hour ago
        git add . is nondestructive and reversible. I tend to do git add . and then run git status.<p>I’m far more interested in confirming my mental model of what I am about to commit if I git commit right now than my mental model of what will be added if I git add right now.<p>If I didn’t already have that muscle memory I might try to switch to git add -v . which would tell me what files it added. I’d argue that a sane git would just output git status after a git add operation.<p>But also a sane git would have a more logical command than git rm —cached to <i>unstage</i> a file. Like git unstage perhaps.
      • eszed2 hours ago
        I&#x27;m with you, though I do it differently. I have a git-status plug-in in my editor that shows me what directories -&gt; files have been changed, and then which lines when I open them. Scanning the sidebar is the same as running &quot;git status&quot; first, but I prefer the visual representation.
      • noir_lord2 hours ago
        another `git status` then `git add .` folk here, it&#x27;s a quick sanity check and then quicker and frankly it&#x27;s just the habit I got into when I first started using git.<p>I&#x27;ve never managed to get on with any UI for <i>basic</i> git tasks, they always end up been slower.
        • skydhash2 hours ago
          I’ve been using magit lately, but I only do ‘git add .’ when it’s a very simple change. Especially in complex projects, I do some changes to isolate code or fix other issues in passing. So I stage by lines and hunks to isolate specific changes and commit them one by one. But magit is the vim of version control, so no speed issue there.
    • brunoarueira2 hours ago
      In a previous company I worked for my Tech Lead usually do git add -p &lt;file&gt; to be extra cautious with the modifications and do a good self review after when open the pull request
    • dmurray2 hours ago
      I try to structure my work in such a way that &quot;git add .&quot; is a sensible thing to do. I stashed or committed outstanding changes before starting on this feature, and I did exactly enough work for one commit since then. And the state of the project right now is what I&#x27;ve built and tested, so it&#x27;s a good candidate to go into version control.<p>Changes that are needed to get the project to run right in the dev environment, but that should never be committed, are a smell: I move them to config that doesn&#x27;t get committed.<p>Increasingly with agents I&#x27;m likely working on multiple features in parallel (I haven&#x27;t adopted git worktrees but I probably should). Even then I try to lay out code so concurrent changes touch disjoint parts of the codebase, so I can do &quot;git add Widgets&#x2F;FooWidget&#x2F;&quot; and the ten files modified under there will be the right things to commit.<p>Maybe 30% of the time I find I have done work that belongs in multiple commits and I need to break it up. Even then I often end up doing &quot;git add -p .&quot; to interactively pick the parts I want to add.
    • aequitas2 hours ago
      Lazygit[0] is ideal for quickly selecting files or lines you want to include in your commit. There are probably countless others. And `--patch` is also not that hard.<p>[0] <a href="https:&#x2F;&#x2F;github.com&#x2F;jesseduffield&#x2F;lazygit" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jesseduffield&#x2F;lazygit</a>
  • flexagoon3 hours ago
    &gt; other junk (CLAUDE.md for example) that shouldn’t be in your repository<p>How is CLAUDE.md&#x2F;AGENTS.md &quot;junk that shouldn&#x27;t be in your repository&quot;? If you&#x27;re using agents for a project and have some project-specific rules for them, why would you want other people using agents in your repository to not have access to those rules and produce worse code?
    • hansvm2 hours ago
      IME people are usually shoving their personal preferences in CLAUDE.md, sometimes automatically as the agent updates the file with that developer&#x27;s pet peeves.<p>- Right now at $WORK, CLAUDE.md has a line saying to put one-off scripts in some gitignored place. That&#x27;s fine if they&#x27;re not worth checking in (IMO, you should build the tooling which would have made the script easy and check that in, but whatever), but that AI rule doesn&#x27;t really keep them from being checked in -- developers manually review every line of code and decide what to check in -- that&#x27;s just somebody deciding they&#x27;d rather not have to think so hard when running git add. Which is fine, but it directly conflicts with my preference for all AI-generated files to be plainly visible as a diff or with git status or something. They have a different diffing strategy, which is also fine, but that&#x27;s just a dev&#x27;s personal preference encoded in a whole-team doc.<p>- Or, I have a prompt I use to encourage higher quality code before I have to manually inspect it. It basically says &quot;delete $200 and 1hr.&quot; For somewhat obvious reasons, I don&#x27;t run it on every piece of code the AI shits out. I make it available in the project for people who want to use it, but I don&#x27;t even want it in my CLAUDE.md, much less the team&#x27;s.<p>- Similarly with whether to use git for checkpointing. I prefer to check the AIs output at each step. A colleague prefers to have it save its progress using git in 30+ commits on a side branch and then check them all at once. One of those workflows was in CLAUDE.md and absolutely is not anymore -- it&#x27;s quite appropriate for a single developer&#x27;s AI settings, but not for the team as a whole.<p>Those settings files are a lot closer to .vscode directories or other dev-specific editor configuration. Project-specific information should be exposed differently.
      • kukkamario1 hour ago
        Well CLAUDE.local.md exists specially for personal preferences. Include line to CLAUDE.md that &quot;never edit CLAUDE.md. Write user preferences to CLAUDE.local.md&quot;.<p>CLAUDE.local.md is the one that should be in .gitignore.
    • DarmokTanagra1 hour ago
      [dead]
  • matthewmc34 hours ago
    I&#x27;m not convinced about ignoring everything, but one of the best changes I ever made to my git workflow was ignoring all dotfiles by default by adding `.*` to ~&#x2F;.config&#x2F;git&#x2F;ignore.<p>My projects do now have to have a boiler plate of unignoring the common ones (!.gitignore, !.gitattributes, !.github, !.editorconfig, etc), but then I&#x27;m free at any point to throw .foo.lang files, or .tmp&#x2F;.cache dirs, or Claude helpers like .code_analysis.md, or .todos.txt, or whatever in my project without managing the fallout of forgetting to manage the .gitignore. I&#x27;m surprised more people don&#x27;t go this route.
    • GranPC3 hours ago
      Couldn&#x27;t you put !.gitignore et al in your global config file?
    • hansvm2 hours ago
      I normally go with `.*&#x2F;` -- I find that hidden files are much more likely than hidden directories to be useful.
    • flexagoon3 hours ago
      I have `playground&#x2F;` in my ignore config, that way I can just create a playground directory for any project and do stuff in there
      • zzril2 hours ago
        I have a shell alias to create a folder containing a `.gitignore` with just `*`, so I don&#x27;t depend on my project never using a directory of a specific name.
    • der_gopher4 hours ago
      I do the same
  • yipinwong1 hour ago
    Very security engineer minded approach.<p>I block every port for VPS, then open one by one. Same approach here with files.<p>The only downside I see here is, knowing which one to allow. For ports, it&#x27;s easy, but files can have many different extensions.<p>Apps&#x2F;CLIs, etc create files with extensions you never encountered before, which can cause issues.<p>Other than that, I like the apporach
  • ryanbrunner2 hours ago
    The problem with this approach (that their first example already demonstrates), is that you&#x27;ll almost immediately start with a &quot;this type of file is OK&quot; solution, and whether something should go in git doesn&#x27;t really have a super strong correlation with file type.<p>It hobbles `git status` and essentially forces you to keep track of what you&#x27;ve changed yourself (since ignored files won&#x27;t show up there), and it can instill a false sense of security that `git add .` is safe when it might not be.
    • aleqs1 hour ago
      I use alint [0][1] to define and enforce rules about files&#x2F;globs that should or shouldn&#x27;t be committed, among other things. You can configure it run as a pre-commit hook or in CI.<p>(disclaimer - this is my own tool)<p>[0] <a href="https:&#x2F;&#x2F;github.com&#x2F;asamarts&#x2F;alint" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;asamarts&#x2F;alint</a><p>[1] <a href="https:&#x2F;&#x2F;alint.org&#x2F;docs&#x2F;rules&#x2F;git-hygiene&#x2F;git_no_denied_paths&#x2F;" rel="nofollow">https:&#x2F;&#x2F;alint.org&#x2F;docs&#x2F;rules&#x2F;git-hygiene&#x2F;git_no_denied_paths...</a>
  • dxjxjdjsssb12 minutes ago
    I use this strategy on my home directory for tracking dotfiles.
  • vivzkestrel2 hours ago
    - or you could stop scratching your head so hard and actually use the gitignore templates for every programming language officially recommended by github itself<p>- <a href="https:&#x2F;&#x2F;github.com&#x2F;github&#x2F;gitignore" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;github&#x2F;gitignore</a><p>- funny how I did not see a single comment talk about this
    • piker2 hours ago
      Because it&#x27;s insufficient?<p><a href="https:&#x2F;&#x2F;github.com&#x2F;github&#x2F;gitignore&#x2F;blob&#x2F;main&#x2F;Rust.gitignore" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;github&#x2F;gitignore&#x2F;blob&#x2F;main&#x2F;Rust.gitignore</a> for example still falls victim to basically all of the issues specifically called out.
      • aleqs1 hour ago
        I use alint [0][1] to define and enforce rules about files&#x2F;globs that should or shouldn&#x27;t be committed, among other things. You can configure it run as a pre-commit hook or in CI.<p>(disclaimer - this is my own tool)<p>[0] <a href="https:&#x2F;&#x2F;github.com&#x2F;asamarts&#x2F;alint" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;asamarts&#x2F;alint</a><p>[1] <a href="https:&#x2F;&#x2F;alint.org&#x2F;docs&#x2F;rules&#x2F;git-hygiene&#x2F;git_no_denied_paths&#x2F;" rel="nofollow">https:&#x2F;&#x2F;alint.org&#x2F;docs&#x2F;rules&#x2F;git-hygiene&#x2F;git_no_denied_paths...</a>
    • zarlss432 hours ago
      These do not include os generated files like his first example, .DS_Store. I do use the templates, but I have a gist that I add to every project of os generated files that may work themselves in.
      • adammarples2 hours ago
        Just have a global, personal gitignore in your home folder to cover them
    • buzzy_hacker2 hours ago
      I like <a href="https:&#x2F;&#x2F;www.toptal.com&#x2F;developers&#x2F;gitignore" rel="nofollow">https:&#x2F;&#x2F;www.toptal.com&#x2F;developers&#x2F;gitignore</a> because I can mix programming language files with OS ones
    • 134152 hours ago
      In my experience these templates don&#x27;t cover enough and are always faulty. Not only that, most real-world projects use many different programming languages and markup languages.
  • Lindby3 hours ago
    `git add -p` is your friend to avoid adding unintended files&#x2F;changes.
    • eterm2 hours ago
      What does that do, add already tracked files only?
      • jdpage2 hours ago
        It interactively shows you each change that would be added and lets you decide whether it should be staged or not. Down to the hunk level, so you can partially stage a file if you so choose.
        • eterm30 minutes ago
          Oh, that&#x27;s neat.<p>The -p presumably stands for pInteractive with a silent p :)
          • airstrike27 minutes ago
            LOL it might stand for &quot;prompt before&quot;
  • getnormality24 minutes ago
    This is a great technique if your workplace is fussy about what&#x27;s allowed on GitHub. We have used it for many years.
  • skrrtww1 hour ago
    I think the article starts out correct, but as soon as it recommends letting through `*.go` it becomes mistaken.<p>I&#x27;d say the correct approach is to include all your top level files (i.e. CMakeLists.txt, .gitignore, etc.) but also your top-level *directories*, i.e. `&#x2F;renderer`, `&#x2F;UI`, `&#x2F;tools`, whatever.<p>Then, crucially, your build system must also prohibit in-source builds and require a dedicated build directory.<p>This way, it&#x27;s presumed that everything in your source tree is pristine and correct, and can host a variety of file types depending on your needs (realistically, source trees can contain lots of things; data, json, images, text, etc.) while you also shouldn&#x27;t have to worry about polluting it accidentally.
  • bob10292 hours ago
    I&#x27;ve done something like this to understand how a unity project would interact with git + LFS as a novice to the ecosystem.<p>I&#x27;d incrementally add files until the project would load successfully after a fresh clone. Handling of subsequent concerns like lightmap data and external services became a lot easier having had the experience built up from zero.
  • zahrevsky1 hour ago
    Alternative: create a .ignore folder for stuff that doesn&#x27;t belong to repo at all, like your personal notes. Of course, .env shouldn&#x27;t be there, because it&#x27;s expected by your code, put it in .gitignore as usual. And stuff like .DS_Store should be in your global gitignore via core.excludesfile config.<p>There, problem solved. This covers all cases I think.
  • aleqs1 hour ago
    I use alint [0][1] to define and enforce rules about files&#x2F;globs that should or shouldn&#x27;t be committed, among other things. You can configure it run as a pre-commit hook or in CI.<p>(disclaimer - this is my own tool)<p>[0] <a href="https:&#x2F;&#x2F;github.com&#x2F;asamarts&#x2F;alint" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;asamarts&#x2F;alint</a><p>[1] <a href="https:&#x2F;&#x2F;alint.org&#x2F;docs&#x2F;rules&#x2F;git-hygiene&#x2F;git_no_denied_paths&#x2F;" rel="nofollow">https:&#x2F;&#x2F;alint.org&#x2F;docs&#x2F;rules&#x2F;git-hygiene&#x2F;git_no_denied_paths...</a>
  • MatthiasPortzel2 hours ago
    You should have editor specific and platform specific files in your global gitignore.<p><a href="https:&#x2F;&#x2F;codeberg.org&#x2F;ziglang&#x2F;zig&#x2F;src&#x2F;branch&#x2F;master&#x2F;.gitignore#L2" rel="nofollow">https:&#x2F;&#x2F;codeberg.org&#x2F;ziglang&#x2F;zig&#x2F;src&#x2F;branch&#x2F;master&#x2F;.gitignor...</a><p>That fixes the problem of every project enumerating the settings files for every editor.<p>Then, as others have said, you should commit only the files you intend to commit; and ignore the files that you don’t intend to commit. This shouldn’t be difficult if you’re reviewing what you’re committing anyways.<p>Listing new files is easy with git status, at which point you can decide to ignore them. If everything is ignored, how do you know what files are new in order to know to un-ignore them?
    • jmholla1 hour ago
      I do use this, but when I&#x27;m collaborating with others, especially a lot of people, I still duplicate it across projects. It pays to be defensive and you can&#x27;t always get everyone on board with this strategy. Being defensive within your repository prevents issues before they happen.
  • queezey2 hours ago
    This approach is actually ideal for Docker ignore files to reduce bloat of your Docker images.
    • jdpage2 hours ago
      Yeah, I don&#x27;t see myself using this for Git (where it&#x27;s very easy to see what you&#x27;re adding, but not obvious and high-cost if you&#x27;re missing something), but it&#x27;s my standard approach for Docker images (where it&#x27;s easy to tell that something is missing, and low-cost to fix it).
  • temphaaa18 minutes ago
    i am not sure why this has been upvoted this is such a bad advice...
  • not-so-darkstar1 hour ago
    Use ~&#x2F;.config&#x2F;git&#x2F;ignore to ignore files in all repositories
  • mohamedkoubaa15 minutes ago
    &quot;Works on my machine&quot; accelerationism
  • vehemenz3 hours ago
    It&#x27;s a neat approach for the current problem of untracked dotfile accumulation.<p>The real problem is that the entire reason to use git at this point is because of the conventions established around it. There are better VCSes and methods now, but they &quot;break&quot; the conventions of git (which honestly sucks, but it is what it is).
  • chrismorgan1 hour ago
    Not particularly well-considered opinion I’ve mulled over for a few years: Git on macOS should ignore .DS_Store and ._* by default. Would this cause any problems?
  • internet1010102 hours ago
    Put gates in place to block all .freeadvertising folders except for the ones that the project relies on.
  • IAmLiterallyAB1 hour ago
    Use the -u flag instead of -a. Doesn&#x27;t add new files, just existing ones.
  • outloudvi3 hours ago
    If people want to apply this mechanism, it shall be not much of a hassle for writers of most (modern) programming languages, as they mostly have some `src&#x2F;` directory (maybe also some `tests&#x2F;`) that contains all source codes for a quick `git add`.<p>For Golang users, I dunno...
  • datsci_est_20152 hours ago
    Just use git add -p and review your code as you place it into staged-for-commit. Your colleagues will thank you for proofreading the slop before pushing it and opening a PR. Only add files after you’ve read them one-by-one as well. git add . is lazy and shows a lack of diligence.<p>…is what I would say if I had no filter. But it does make sense what I see in PRs sometimes - have you proofread any of this before pushing?
  • msalihb2 hours ago
    I liked .gitcare This deserves think on it
  • jedschmidt2 hours ago
    i do the same for Content Security Policy: `default-src &#x27;none&#x27;` by default, then add what i need when i need it.
  • morkalork2 hours ago
    People still aren&#x27;t committing CLAUDE.md?
  • monster_truck2 hours ago
    I&#x27;m so sick of these articles telling me what to do with meaningless subjective justifications
    • taikahessu1 hour ago
      Subscribe, like and comment if you want to see more!
  • bizcalclab1 hour ago
    [flagged]
  • laruss52 hours ago
    [flagged]