I think it’s generally agreed upon that large files that change often do not belong while small files that never change are fine. But there’s still a lot of middle ground where the answer is not so clear to me.

So what’s your stance on this? Where do you draw the line?

  • FizzyOrange@programming.dev
    link
    fedilink
    arrow-up
    10
    ·
    2 months ago

    The main downside is Git downloads all history by default, and so any large files will bloat the download for people cloning your repo forever. It isn’t about binary vs text. It’s just the size that matters.

  • count_dongulus@lemmy.world
    link
    fedilink
    arrow-up
    8
    ·
    2 months ago

    If it’s a build artifact, put it in a registry. If it’s resource type files, Git LFS can be used if it’s not an absolute ton.

    • EarMaster@lemmy.world
      link
      fedilink
      arrow-up
      2
      ·
      1 month ago

      This. If the file can be generated from the repository it should not be put inside it, but if you need it to build the project it should (unless it is an easy to install external dependency that should be declared in a Readme file).

  • deathgrindfreak@lemmy.world
    link
    fedilink
    arrow-up
    5
    ·
    1 month ago

    Fyi, there’s a fun project designed for handling the syncing of large files that uses git under the hood called git-annex. Fun fact, it’s written in Haskell as well.

  • tiredofsametab@kbin.run
    link
    fedilink
    arrow-up
    2
    ·
    2 months ago

    I think the only binaries I have are tiny samples used by a couple of tests in that repo. I generally try to avoid them altogether.

  • Ephera
    link
    fedilink
    arrow-up
    2
    ·
    2 months ago

    I’ll go to quite a bit of effort to avoid them. Arguably too much effort, but I often find that the path that avoids them is also useful in other ways.

    For example, for a personal project, I automated rendering a PNG fallback icon from an SVG, so now I can have as many different resolutions as I want and don’t need to manually update them, if I want to tweak the icon.

    I’d also like to publish a screenshot of the project. The simple solution is to check a PNG into the repo and link it in the README.md. But what would be a lot nicer, is to set up a project webpage, which with Codeberg Pages isn’t even that much effort, but I would have less motivation to do it otherwise.

  • Lodra@programming.dev
    link
    fedilink
    English
    arrow-up
    5
    arrow-down
    4
    ·
    2 months ago

    Never do this.

    Git is all about tracking changes over time which is meaningless with binary files. They are bloat for your repo, slowing down operations. Depending on the repo, they are likely to change from CI with every commit. That last one means that every commit turns into 2 commits btw. They are can ruin diffs. I could go on for a long time here.

    There are basically 0 upsides. Use an artifact repository instead!

    • FizzyOrange@programming.dev
      link
      fedilink
      arrow-up
      7
      arrow-down
      1
      ·
      2 months ago

      Git is all about tracking changes over time which is meaningless with binary files.

      Utter codswallop. You can see the changes to a PNG over time. Lots of different UIs will even show you diffs for images.

      Git can track changes to binary files perfectly well. It might not be great at dealing with conflicts in them but that’s another matter.

      The only issue is that binary files tend to be large, and often don’t compress very well with Git’s delta compression. It’s large files that are the issue, not binary files. If you have a 20 kB binary file it’s going to be absolutely fine in Git. Likewise a 10 GB CSV file is not going to be such a good idea.

  • magic_lobster_party@kbin.run
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    1 month ago

    I think assets like app icons are ok. They rarely change, and are often quite small. It’s convenient to have those kinds of things bundled together with the code.