Remix.run Logo
throw2ih020 4 hours ago

For context, since a lot of people on HN haven't worked on games - this is not intended to compete with Git for general software development. This is a competitor with Perforce for game development.

Git is fine for text based files like code, but it's really bad at stuff like textures, 3D models, audio files, and other non-text files that game developers need to collaborate on. For example, one artist might need to obtain an exclusive lock on some art assets while editing them, because there is no sane way to merge two artists' async edits.

The SOTA in this area is Perforce (https://www.perforce.com/products/helix-core), a proprietary system. From what my gamedev friends tell me, when Perforce works it's great, but it hits enough snags that you need a tools engineer to manage it and occasionally fix issues manually. Git LFS is an alternative, but my gamedev friends all prefer Perforce especially when working on team projects beyond like 3-4 people.

LugosFergus 3 hours ago | parent | next [-]

Something else that git isn't good at: permissions. In gamedev, you might have proprietary work that you want to restrict to certain users. In P4, you can add restrictions to certain directories for only those who have signed the required NDAs. That's not something that you can do in git: it's all or nothing. Maybe you can set something up with submodules, but that's going to upend your repository if you hadn't planned for it.

MrDresden 3 hours ago | parent | next [-]

I once worked in a git repository that required those kinds of restrictions.

This was within a bank and the code in question was related to enabling Apple Pay from within the banking application. The consequences of that information and code leaking or being seen by anyone who had not signed the NDA were very serious (don't remember the details but it made the lawyers were extremely stressed about it).

Needing to figure out a way to protect those parts of the codebase it was decided in the end that the "easiest" way of doing this was to split the repository in half, with the actual artifact building taking place from the half that had the NDA code. The rest of the application (basically the whole application) was then used as a dependency by it.

Still didn't quite solve the issue, but access to that repository was heavily controlled.

SoftTalker 2 hours ago | parent | next [-]

Strikes me as bizarre that payment code would be sensitive, unless it's a security by obscurity thing (which would also be concerning).

Keys, secrets, etc. yes. But code? What am I missing here?

danudey 2 hours ago | parent | next [-]

As others have said, it's Apple and they do not take kindly to other people leaking their technology/announcements ahead of time.

See also: the time that ATI's CEO told his employees that their chips would be powering Apple's to-be-announced hardware a few days before the announcement. Steve Jobs responded by pulling all of ATI's hardware from its demo units at the announcement, not mentioning ATI at all, cancelling a joint demonstration of the Radeon card that was going to be in the system, and never partnering with ATI again.

https://web.archive.org/web/20001216031800/https://www.zdnet...

gouggoug 23 minutes ago | parent | next [-]

From the linked article, it was a press release, not just to his employees.

> The incident began Monday when ATI, which supplies graphics cards for all Apple's current models, issued a four-paragraph news release that stated its Radeon processor would be featured in three new Mac models -- none of which were announced by Apple (Nasdaq: AAPL) until CEO Steve Jobs' Wednesday morning keynote address.

ifh-hn an hour ago | parent | prev | next [-]

Sounds like a bit of a dick...

paulddraper 12 minutes ago | parent | next [-]

They unilaterally issued a press release about Apple's upcoming release.

That's kinda a no-no for partnerships.

yonatan8070 30 minutes ago | parent | prev [-]

One word: "Courage"

formerly_proven an hour ago | parent | prev [-]

> and never partnering with ATI again.

Except of course shipping ATI hardware for years afterwards, then also using nvidia, then dropping nvidia and only using ATI/AMD until transitioning to Apple Silicon.

kurthr 2 hours ago | parent | prev | next [-]

Because it's Apple. They are huge, have scary lawyers, write scary contracts, and want to "delight the user" with features only when they announce them. They hate leaks, and demand separate teams for basically any/all development.

user_of_the_wek an hour ago | parent | prev | next [-]

It seems this wasn’t about the code itself, it was about Apple Pay not being announced yet. So only people under NDA would be allowed to even know what they are working on.

zer00eyz an hour ago | parent | prev | next [-]

> security by obscurity thing... What am I missing here?

You are looking at the problem from the wrong direction.

If you build a honeypot, to trap hackers, does it behove you to explain what the bait is, and how the trap works?

Know your customer, fraud detection heuristics, finger prints, behavioral triggers are all areas where banks, and financial institutions need to keep the sauce secret. Telling the other party "how" you catch them just gives them the steps of what not to do.

juancn 2 hours ago | parent | prev | next [-]

It's kinda like that, there could be a proprietary fraud detection heuristic in there that you don't want to get out.

hk__2 2 hours ago | parent | prev [-]

Maybe that’s some scoring to decide if you should be able to pay or not with some method.

contingencies an hour ago | parent | prev [-]

Can confirm split repos is an excellent solution for protecting IP.

iveqy 2 hours ago | parent | prev | next [-]

The way I usually solve this is by using git submodules.

bigbuppo an hour ago | parent | next [-]

Oh man, I've been laughing at this for 37 minutes straight now.

orthoxerox 24 minutes ago | parent [-]

Git submodules are the regular expressions of version control.

contingencies an hour ago | parent | prev [-]

AFAIK the issue with using submodules is you still need the rights to pull the other source repo. However, you can use submodules or LFS to pull a specific build artifact from a build artifact repo or source instead of the source repo, which provides a neat way to manage the dep without fattening the main repo and allows the source repo to be kept separate and high security. I'd certainly do this before changing RCS/VCS solutions. That said, reverse engineering has become relatively trivial in the AI age so the practical utility of providing built rather than source elements is dropping.

Freedom2 2 hours ago | parent | prev | next [-]

I ended up writing my own layer over git for permissions for a specific client a long time ago. It has a huge amount of useful features - sadly, I never took the idea further.

stogot 2 minutes ago | parent [-]

Turn it into a business

rowanG077 3 hours ago | parent | prev | next [-]

Doesn't git crypt solve this? You can have encrypted blobs in a repo that will be auto decrypted if you have a working key.

danudey 2 hours ago | parent | next [-]

That depends on you distributing working keys for any components you want to restrict access to, and managing those keys for all users, revoking them when access permissions change, etc. It's a lot more complex, more work, and harder to manage than centralized RBAC or similar.

everforward 2 hours ago | parent | prev | next [-]

Not really, precisely because it’s decentralized. You can’t audit whether a user accessed one of the hidden files, or really even who can access it once you accept the reality of the risk that some team will put a key on S3 or a shared drive or whatever.

It’s fine for things that you want devs to be able to see without the Git host being able to see them, it’s less good at RBAC because there’s no real “identity” component at read-time.

pcdevils an hour ago | parent [-]

You can use Mozilla SOPS instead with IAM roles and KMS instead of gpg. They also shifted to AGE over gpg.

giancarlostoro 3 hours ago | parent | prev | next [-]

People don't use git crypt nearly enough unfortunately.

freedomben 2 hours ago | parent [-]

Agreed. I use and love git crypt, but it doesn't get enough use. I think because it's easy to screw up gpg keys. Most of my uses (for one to three devs) have become symmetric keys shared out-of-band instead of using gpg keys because we've had lots of onboarding pain even from people who are quite competent. There are just a lot of sharp edges in gpg that you don't know when you don't know.

embedding-shape 2 hours ago | parent | prev [-]

Git submodules + SSH keys is another (somewhat "homebrew") solution to this.

PunchyHamster 2 hours ago | parent | prev | next [-]

> That's not something that you can do in git: it's all or nothing.

That is partially incorrect; you can restrict writes via hooks but not reads; you'd need a workaround like submodules

jmaw an hour ago | parent [-]

Does `--no-verify` override the restriction via hooks, or are there some kind of server-side hooks that can be used?

stevefan1999 3 hours ago | parent | prev [-]

That's by design of git, you can't forget that git is first developed for a bazaar model of information flow, especially with a big decentrailized project like the Linux Kernel, not the silo and isolated corporate NDA and closed model you described. Git prefers open information and discourages information closures and segregation of information by placing restrictions exactly like this.

Git enthusiast would often tell you to do this separately with a submodule, and set permission on the version control forge software level (which means Gitea/Github private RBAC access to certain repos for cloning), sure, but that is also painful as hell.

But my point is that all of this is exactly by design from Linus Torvalds's need for Linux Kernel to replace BitKeeper. Git simply isn't the tool for everything, it was developed for a software project with liberalism in mind, but corporate stuff is monoculture and prefers proprietary, shut-in model, and the eat your own dog food mindset, and no wonder it is so painful to deal with.

kccqzy 3 hours ago | parent | next [-]

Git submodules aren’t convenient either. For the silo and corporate development use case, just use multiple repositories and make your build tool aware of multiple repositories. It is slightly less painful than submodules.

packetlost 2 hours ago | parent [-]

I feel like submodules could be a lot easier to work with if the git command made it easy to update all submodules in one go based on branch head for the submodule.

stackghost 2 hours ago | parent | prev [-]

I think everyone knows that this is a consequence of git's design. Nobody's disputing that.

Unfortunately there are many people who think git is a panacea and is suitable for all version control tasks of anything.

raincole 33 minutes ago | parent | prev | next [-]

One thing I don't like about Git LFS is that there is no way to delete very old history. It's the 'git spirit' to not allow deleting history, but in the context of LFS it sounds horrible. Especially if you use Github.

If there is an asset that is updated very frequently in the early stage of development, you'll be charged for all the storage for the rest of the repo's life. That happens a lot in gamedev: most assets go back and forth early on but once it's done no one will touch them ever.

Marsymars 21 minutes ago | parent | next [-]

> One thing I don't like about Git LFS is that there is no way to delete very old history. It's the 'git spirit' to not allow deleting history, but in the context of LFS it sounds horrible. Especially if you use Github.

At my dayjob we used Git LFS for a bit, but foud it unworkably clunky - we eventually found it easier to just make a separate "LFS" repository and add it as a submodule to the main monorepo. Now we can rewrite the history of the LFS repo on an as-needed basis.

paulddraper 9 minutes ago | parent | prev [-]

> that there is no way to delete very old history

That's one of the features of Git LFS is separately managed storage and lifetime.

You are correct that GitHub does not offer that feature.

arka2147483647 an hour ago | parent | prev | next [-]

Its important to understand that in Game Dev a ’git clone’, aka ’p4 sync’, can be a terabyte of stuff.

Git is bad at such volumes of binary assets, textures, models, sounds, etc.

manoDev an hour ago | parent | prev | next [-]

Git LFS is a major PITA, and if you use GitHub is even worse since there are quotas and rate limits that are charged separately.

39 minutes ago | parent | next [-]
[deleted]
ifwinterco an hour ago | parent | prev [-]

One of those ideas that sounds clever in theory but in reality doesn’t work very well

bigbuppo an hour ago | parent [-]

Also... it's kind of weird taking a decentralized system and recentralizing it.

jayd16 an hour ago | parent | prev | next [-]

P4 is more "industry standard" than "state of the art"... But it does handle large files and partial checkouts without feeling bolted on.

debarshri 2 hours ago | parent | prev | next [-]

I am building a small asset heavy game. Ran into a similar problem. Built a storage cost efficient tool for exactly this [1].

[1] https://github.com/debarshibasak/assets

kvirani 2 hours ago | parent | prev | next [-]

There's also a new player called diversion (diversion.dev) which I think may be a YC startup? Anyway it takes a different approach of being more like Google drive but bringing in VCS behavior making it more indie and designer friendly.

danudey 2 hours ago | parent [-]

At my previous game-dev-company job we ended up splitting things up into:

1. Code - Git

2. WIP art, shared assets (logos, marketing materials, etc) - Google Drive (because things are often changing, getting passed around, etc)

3. Finished assets (PSD files you're done with, or you think you're done with) - SVN (because we wanted a log of who contributed to what, wanted artists to be able to pick up where someone else left off; having a log of who made changes to a given PSD)

4. Assets rendered out to PNG to include in the app bundle/publish to the static file servers - Git (because those files never changed after being published so the git history wasn't polluted with unneeded files)

I've also used LFS, which is... a fine workaround, but still not great. Users who don't have it configured can still commit binary blobs; users who don't have it configured will clone files incorrectly; if the LFS server is slow, unavailable, unreliable, then the system starts to behave oddly; you need a Git server that supports it.

It was a huge hassle to manage; having a system like this would have been a godsend at that company, and if I still worked there I would be spending all day importing our codebase and assets into it to see how well it works.

red-iron-pine an hour ago | parent [-]

what happens if WIP stuff has rapid shifts or changes? art direction changes on the product level, etc? or even something as simple as an asset designer quits or get sick for a while

SVN makes sense cuz it's done and dusted, but I could see the Drive gettin real messy real fast if things change a lot

Decabytes 3 hours ago | parent | prev | next [-]

I wonder how useful this could be as a generalized version control for regular user systems, as a way to rollback, or scrub through history. Presumably if this is designed to work at Epic and Big Game studio scale, it should work at home computer scale

827a 2 hours ago | parent [-]

This presumption has destroyed far, far more companies and projects than the opposite assumption (that something built for small will scale to big, then doesn't).

qmr an hour ago | parent [-]

Can you name five?

ultrahax an hour ago | parent | prev | next [-]

Can confirm, we have a team dedicated to the care and feeding of p4.

reactordev an hour ago | parent | prev | next [-]

Has nothing to do with Perforce being the Oracle of VCS because it’s baked into the big 3? Riiiight.

jhatemyjob 35 minutes ago | parent [-]

It's not even baked into Google anymore.

LinearIO 2 hours ago | parent | prev | next [-]

P4 is also really well integrated into IDEs and UE Editor so that I don't need to think about it as much as I need, compared to Git. Locking assets, releasing them, merging into streams etc., is overall pretty streamlined. When it works, it's great, but when it doesn't work though, it's pretty hard to diagnose issues.

retroflexzy 2 hours ago | parent | prev | next [-]

A significant part of my job, unfortunately, is helping people fix their workspaces when Perforce (p4) goes bad, or creating guardrails and wrappers to stop Perforce doing bad things.

In fairness, p4 predates most of the VCSes we consider "modern", so I empathize with a lot of the underlying architecture decisions. However, it has and continues to utterly fail at improving at a reasonable pace.

For example:

  - p4 tracks file metadata of client workspaces on the server (sync'ed locally, opened for edit, file revision, etc) and uses this as the basis to avoid doing unneeded work.  If this becomes desync'ed, a reconcile or force sync must be used.  A reconcile can take hours, potentially days; it tries do detect file moves by default, so likely at least O(c^n) for some c>1. I have never personally seen a default reconcile operation _complete_ over any modestly large game code base, and in practice, people accumulate a litany of workarounds and scripts to fix this for themselves.

  - Scripting p4 is a nightmare. Documentation is poor, schemas do not exist, and all the language-specific libraries are just thin wrappers over its C++ API.

  - By default, p4 "helps" you with text files by "correcting" line endings on sync or even converting between encodings. This works until you have a mixed-OS environment, and discover a part of the pipechain that _must_ have a certain style.  There are various levers to pull to make this better, but I've yet to find something fool proof.

  - By default, p4 keeps flies read-only, only unlocking them when explicitly marked as being edited.  This means, to avoid having to do this manually, every tool you use needs to be p4-aware.  Or, you can turn this off, and choose to contend reconcile instead. (See above)

  - Branching a modest game project, with, say, Unreal source code, can take hours.  And this is the quick version where you ask the server to simply create new metadata, with no file transfer to a client.

  - p4 is licensed by the user-account. Every user entity in p4 not intended exclusively for performing backups and maintenance operations counts toward this, including users required to integrate with other services.  Plus, often times, these integration users must have admin access to be useful. The security posture is horrific.
htr0waway2 11 minutes ago | parent | next [-]

> Scripting p4 is a nightmare

This is why I wish more command line tools were split into a library that does most of the work and a cli module for purely user interaction. Parsing stdout seems so unnecessary and could be avoided if a program could simply import a library.

bryanlarsen 39 minutes ago | parent | prev | next [-]

> p4 predates most of the VCSes we consider "modern"

p4 also significantly predates VCSes we consider obsolete. p4 is almost a decade older than SVN.

arka2147483647 2 hours ago | parent | prev [-]

I’ll add some more

- The P4 cpp api was apparently designed before any modern Cpp std lib was available. And is at best archaic, and stringly to use.

- P4 encoding support is pain in the ass to configure. And ensist on adding or removing bom to files.

IshKebab 19 minutes ago | parent | prev | next [-]

> this is not intended to compete with Git for general software development. This is a competitor with Perforce for game development.

Well, it is intended to compete with Git for version control. It's just that Git happens to be so bad at some aspects of version control that it isn't used much in those cases.

There's no good reason that Git couldn't be good at versioning binary files, or splitting up large projects. I mean people have tried - there's LFS and submodules. It's just that those both suck balls.

I was kind of hoping Jujitsu or Pijul would take a stab at these major Git deficiencies but unfortunately it seems like they are content to do them as badly as Git does.

throwaway81523 2 hours ago | parent | prev | next [-]

> Git is fine for text based files like code, but it's really bad at stuff like textures, 3D models, audio files, and other non-text files

Git-annex ?

ur-whale 3 hours ago | parent | prev | next [-]

Git is certainly not great with binary assets, but calling perforce SOTA ... ouch.

If perforce is the best there is out there for large binary asset management, then there is a blue ocean worth of potential improvement for git.

Perforce is a piece of crap, a relic of the 20th century that must die in a fiery inferno.

danudey 2 hours ago | parent | next [-]

It can be SOTA and still be garbage if there's nothing better (and there's nothing better, sadly). This is extremely exciting for anyone who's had to manage revision control for game devs.

maccard 2 hours ago | parent | prev | next [-]

I’ve spent more than a decade working in games and unfortunately perforce is the best out there for a variety of reasons. None of them are good.

asveikau 2 hours ago | parent | prev [-]

15 years ago, both Google and Microsoft were on perforce. (The latter through a fork with a different name.)

kps an hour ago | parent [-]

Google still uses Piper, which started as a Perforce clone, though many people use it through a frontend like `fig` (try pronouncing ‘Piper HG’) or `jj`.

TheBigSalad 3 hours ago | parent | prev | next [-]

That sucks, git is so absolutely horrible. It's crazy to me that nobody has made anything better yet. Although I could start that myself and yet have not.

devin 3 hours ago | parent | next [-]

With respect, were you around to use any of its predecessors?

TheBigSalad a minute ago | parent | next [-]

Yes. Some software is just really bad.

bigstrat2003 2 hours ago | parent | prev | next [-]

I was. I thought, and still think, that svn was much more pleasant to use than git. Alas, I am in the minority.

danudey 2 hours ago | parent | next [-]

SVN was more straightforward to use, but that straightforwardness lost a lot in terms of fidelity.

The fact that it was easy to clone a subdirectory was nice; the fact that branches were just subdirectories also was not nice. The fact that tags were mutable since they were also just subdirectories... the fact that every operation you ever did required going to the server (commit, log, checkout, everything) made it a pain if you were on a slow link.

I can't count the number of times I was inspecting SVN history and had to just 'svn log > /tmp/svn.log' so I would have the whole log locally rather than having to hit the server each time I wanted to refine a grep.

Zardoz84 an hour ago | parent [-]

git-svn did wonders when we had the code base on subversion

flohofwoe an hour ago | parent | prev [-]

We are legion ;)

SVN was actually quite decent for game development, definitely more robust and (non-technical-) user-friendly than git+lfs.

(and SVN isn't really compatible with the work-from-home era unfortunately, you really needed a big server on a gigabit LAN)

3 hours ago | parent | prev [-]
[deleted]
VorpalWay 3 hours ago | parent | prev | next [-]

There are some projects:

* https://github.com/jj-vcs/jj

* https://nest.pijul.com/pijul/pijul

jaapz 3 hours ago | parent | prev | next [-]

turns out version control is hard

irishcoffee 3 hours ago | parent | prev | next [-]

We did, mercurial just didn't win.

redsocksfan45 2 hours ago | parent [-]

[dead]

zer00eyz 3 hours ago | parent | prev [-]

Git is fit for purpose. That purpose is to host a monorepo, with out a lot of 3rd party dependancies, distributed, patch based.

Thats not how everyone else works.

We're all using package managers to help with massive amounts of 3rd party dependancies (why are you version pinning in any place other than your repo, why arent you pulling updates through your repo and reviewing them)

We're reliant on tools like artifactory to make sure those depedancys dont disappear or are not corrupted.

We use yet other tools to manage our binary files (this tool would fix that).

Github, gittea, gitlab, bitbucket... have all added piles of tooling around git, that are grafted on around its short comings.

> It's crazy to me that nobody has made anything better yet.

Because our entire industry has fallen into the rut of "more tools", of stacking turtles (https://en.wikipedia.org/wiki/Turtles_all_the_way_down ) rather than fixing the real issues that hold us back.

> Although I could start that myself and yet have not.

Because unless your a Google or a Linus, no one is going to look twice at your tool for something that is this important. Im not even sure that epic games has the good will, or trust to launch this.

I am going to give them the benefit of the doubt and take a long hard look at it, but my optimism is tempered. But unless it offers a LOT more than git, the extra overhead (lacking IDE support, deployment changes and all the other tooling in GIT's orbit) it isnt going to be a worth while change.

LtdJorge 2 hours ago | parent [-]

This tool is not for pure source code. It's for videogames. Videogame-specific VCS have been lacking much more than Git has, since the start. As others have said, the biggest problem is undiffable binary files.

chadgpt3 4 hours ago | parent | prev | next [-]

Jonathan Blow found it convenient to represent all assets in a large number of text files, to enable merging. For instance he'd have one text file per entity on a map. The game and editor could read either this or the compiled binary version.

Aurornis 3 hours ago | parent | next [-]

Jonathan Blow works with extremely small team sizes relative to the big studios. When you only have a couple people working on a project you don’t need all of the same coordination features.

rootlocus 3 hours ago | parent | next [-]

He and Casey Muratory make a lot of cool instructive content, but their condescending attitude towards the industry always made me thing "Huh, must be really nice working alone and making all the decisions yourself."

Aurornis 3 hours ago | parent | next [-]

I respect his work, but I had to unfollow him on Twitter because he was so condescending to everything and everyone except his loyal fan base.

He’s in a category of influencers who post constantly about gripes and grievances and smug superiority. Some people like that content but I can’t stand it.

I really like hearing about indie development and small teams, but you don’t have to present everything as condescending superiority over the industry. That’s not the part I find interesting.

cjbgkagh 3 hours ago | parent [-]

I think there is an element of audience capture that sets up a self reinforcing feedback loop that drives out the normies and ends up rather cult like.

somenameforme 2 hours ago | parent [-]

Is it not also possible that there are an overwhelming number of problems with the big AAA type studios in games right now? I feel right now we're in sort of tale of two cities, because AAA games have turned into barely functioning uninspired parasitically monetized crap, while smaller scale development is in an absolute golden age. And it's likely that LLMs will only add fuel onto this turd burning fire.

A_D_E_P_T 15 minutes ago | parent | next [-]

In fairness, AAA games are practically over. They have grown too bloated, take too long to develop, and, with the culture wars raging in the background, almost every AAA game steps on at least one landmine and loses a large fraction of its audience before it is even released. Sad, really.

Aurornis 16 minutes ago | parent | prev | next [-]

There are real problems, but Jonathan Blow doesn't limit his criticism to those problems. He just indiscriminately criticizes everything. He's turned into the type of critic that is a broken clock that happens to right twice a day.

His criticism isn't limited to AAA game studies. He's a vaccine skeptic and is pretty heavy into far-right influencer garbage. All very surprising if you only know him from his games.

This Tweet is a classic https://x.com/Jonathan_Blow/status/1854708962462982465

Jonathan Blow:

> It doesn't help that all males currently under the age of 40 were raised to be supercucks

I started following him for his gaming work and talks. His influencer content is something else.

wredcoll 3 minutes ago | parent [-]

Anyone still following him after that needs to fundamentally reevaluate some life decisions.

cjbgkagh 2 hours ago | parent | prev [-]

That is what makes it cult like and not a full on cult, there is a lot of truth to what he says. The problems is when the conclusions are extrapolated out to absurdity - it’s hard for me to listen to it. I didn’t take sufficient notes to give a proper recount here and it’s a bit too much work for me to go through it again.

Fraterkes 2 hours ago | parent | prev | next [-]

I’ll chip in here and say theres ime a world of difference between the amount of condescension and acerbic noise produced by Blow versus Casey. Casey comes of as grumpy but fundamentally pretty respectful in the stuff I’ve seen him in.

bigstrat2003 2 hours ago | parent [-]

I have only seen Casey's writing in the whole "why is the terminal so slow" debacle, but he was a massive jerk in that. He was right! But still a jerk.

klodolph 3 hours ago | parent | prev | next [-]

IMO this is just garden variety effects of being a programming influencer. It’s a weird position to be in.

I think being influential just does that to people, with high regularity.

troupo 3 hours ago | parent | prev | next [-]

And then they usually back their words by doing things like "you claim that outputting text to a terminal emulator is a PhD level problem, so here I did it in a weekend".

Huge teams are more often than not the sign of bloat and inefficiences.

rootlocus 3 hours ago | parent | next [-]

To be fair, game developers have been rendering text on the GPU for over two decades. I've done it in college a decade ago with bmfont [1] (nowadays the engine does rasterization during import). Whoever thought was making a case with "outputting text to a terminal emulator is a PhD level problem" was really out of their depth and was making a case for unnecessary inefficiencies. Kudos to Casey for proving a point.

1. https://www.angelcode.com/products/bmfont/

bogwog 2 hours ago | parent [-]

I remember when that terminal situation first happened, and my main takeaway wasn't "wow, this Casey guy is a genius" but rather reinforcement of my pre-existing belief that Microsoft is full of incompetent and lazy people. Anyone who has ever dabbled in engine or low-level game dev has implemented basic GPU text rendering at some point.

Matl 3 hours ago | parent | prev | next [-]

Yeah, like when Blow claimed he could replace PowerPoint in a weekend and ended up implementing a presentation software that had about 2% of what PowerPoint offers.

Now there's an argument to be made that many don't need the remaining ones but to claim that you 'replaced PowerPoint' for anyone but yourself is ridiculous.

They're good at demos, I give them that.

duttish 2 hours ago | parent [-]

There's a classic saying along those lines, "everyone is only using 5% of Word. The tricky part is that everyone is using a different 5%"

rjrjrjrj 6 minutes ago | parent [-]

Originated (or maybe just popularized) by Joel Spolsky, I think?

LtdJorge 2 hours ago | parent | prev [-]

Casey was right, though. The windows terminal was (is, it's still there even if you use the new Terminal) atrocious. The performance is so bad, due to going through all the layers it does, which Casey exposed. And it's not even packed with features, pressing up on a new console doesn't bring you a command from history, which Linux terminals and 3rd party Windows ones have been doing for decades, even Powershell does that. The support for colors was also bad, the very limited options for font configuration, and it renders fonts as if it was Win2k... Thankfully, the Windows Terminal solves most of those, and includes tabs and other useful features. Too late for me as I already jumped ship to Linux.

ahtihn an hour ago | parent [-]

> pressing up on a new console doesn't bring you a command from history, which Linux terminals and 3rd party Windows ones have been doing for decades, even Powershell does that.

I'm wondering if you're confusing Windows terminal with cmd.exe?

Windows terminal is not the shell. It's a terminal emulator. You run a shell inside of the terminal, for example you can run... Powershell.

Command history is a feature of the shell.

chadgpt3 3 hours ago | parent | prev [-]

Isn't that kind of the point though? Doing more with less?

Wowfunhappy 3 hours ago | parent | prev | next [-]

He's also the sort of person who I suspect works in a very idiosyncratic way, which is great for him and his mind but probably not everyone else. (This is not a criticism.)

an hour ago | parent | prev [-]
[deleted]
flohofwoe 3 hours ago | parent | prev | next [-]

That's fine for database-like meta-data (e.g. game entity properties), but not for images, videos or audio files. Just writing those as hex dumps into text files doesn't make them any easier to merge.

superdisk 3 hours ago | parent | prev | next [-]

He uses SVN and specifically has stated that Git isn't suitable for the work he does due to big binaries in source control.

LugosFergus 3 hours ago | parent | prev | next [-]

You really can't merge binary data, such as textures, meshes, audio, etc. It doesn't matter if you base64 encode the data and stuff it in a text file: it's a jumble of data (assuming this is the implication of what Blow did).

pton_xd 3 hours ago | parent | prev [-]

How do you merge changes to a texture, mesh, audio file, etc?

rootlocus 4 hours ago | parent | prev [-]

Git LFS has file locking, and no VCS can provide you with the tools for diffing binary assets. I don't see any meaningful difference between Perforce, Diversion or Lore and git + LFS + file locking. Unless there's a meaningful performance impact for large projects (I only work on small / medium projects), the capabilities are the same. However, I get excellent git support for code in any editor, as opposed to Diversion or Lore which have none.

regnerba 4 hours ago | parent | next [-]

Git LFS for example does not support file chunking. So a single byte change on a large (100s of gigs) file means downloading the whole file again. Lore does chunking of binary files which means faster downloads and better de-dupping on the backend.

regnerba 4 hours ago | parent | next [-]

Permissions is another thing. Git permissions are done one a per repo basis.

https://epicgames.github.io/lore/explanation/system-design/#...

danudey an hour ago | parent | prev [-]

Also, Lore seems to support checking out only the assets you actually need (on-demand hydration and sparse checkouts), meaning that a level designer can check out just the level that they're working on without having to manually configure a git sparse-checkout (and then not being able to see any of the non-checked-out files).

If this supports dynamic hydration of files, either as they're accessed (like Dropbox with offline files) or by somehow knowing which files need which other files (building a dependency graph) then it could be a massive win both for speed and efficiency of downloads but also for conserving disk space on developer machines.

And since it has API bindings, it's possible that's something that could be built into IDE plugins, so that your editor (Godot, Unity, etc) can know which assets need which other assets and automatically trigger hydration, including when you e.g. try to use a new model/texture/etc in a scene that hasn't used it yet.

throw2ih020 4 hours ago | parent | prev | next [-]

I haven't made games for a long time so I can't speak for my experience, only my friends. From what I understand (1) Perforce has decent integrations with the game engine editors my friends work with, so editor support is no factor for them and (2) it has better delta support for the file types they work with - I believe Git LFS mostly uses a generic xdelta diff which is kind of mediocre at everything versus Perforce can understand different file types and be extended to support custom types.

flohofwoe 3 hours ago | parent | prev | next [-]

I guess you never worked with anything but git? The devil is in the details, and those details generally suck more in git (or generally: distributed version control systems) than in traditional centralized VCS's.

Also git-lfs is a crutch that breaks more often than it works :/

(I agree though that for small game projects, git is mostly 'good enough', even without lfs).

Tiktaalik 3 hours ago | parent | prev | next [-]

There's also the tooling. Game teams have artists and designers where baroque command line incantations are headwinds to their workflow pace.

For the longest time Git tools were really poor. In recent years there's a few ok ones, like Git Fork, though I wouldn't know if those tools scale to the level of a AAA team size repo and not fall over.

zipy124 3 hours ago | parent | prev | next [-]

Git LFS breaks so often that it can't be seen as a serious professional tool tbh. I've had nothing but trouble with it. If it wants to be serious it needs to be built into Git, not added as some after thought.

danudey an hour ago | parent [-]

> Git LFS breaks so often that it can't be seen as a serious professional tool tbh. I've had nothing but trouble with it. If it wants to be serious it needs to be built into Git, not added as some after thought.

At Fortinet we migrated our SVN repositories to git and ran into a ton of issues; developers over the past ten years had done tons of little mistakes that added up, like accidentally checking an entire Windows virtual machine into the repo. In SVN they deleted it and no one ended up caring, but in Git of course it became part of the repo history.

I did a huge amount of work for the migration, 99% of which was analyzing each repo to find out what files/file extensions were overly large, and then either:

1. Filtering them out of the git history completely during import

2. Converting them to LFS objects after the import

The LFS process was certainly better than the other alternatives, which were 'check everything into the git history' or 'remove all the un-diffable binary files and hope that they weren't needed for anything', but it was still not ideal.

Every developer (out of thousands, across multiple countries, timezones, and native languages) had to set their system up properly; if you missed a command, or if you reinstalled your OS and forgot to set up one of the aliases or hooks, then you would end up checking binary blobs into git rather than LFS, or checking out LFS idents rather than the actual files they needed.

We also had the issue of developers fetching code over SSH but LFS files over HTTPS, which would be fine except that we wanted to prevent access to HTTPS from most subnets, so while the developers could use SSH to clone or pull using their 2FA token their client would then make an HTTP request that wouldn't work unless they were on the version control VPN, which.... blah blah blah.

So yeah, it worked better than the alternative, but it did not work _well_ a lot of the time.

lentil_soup 3 hours ago | parent | prev [-]

don't think it supports branches

it's also tough when you have 1TB of data, over 1mm files and you might want to lock hundreds files in one go

danudey an hour ago | parent [-]

I mean, Git LFS 'supports branches' in that the LFS content identifiers are checked into git as files and Git operated normally; LFS is just a way to replace those content identifiers with the actual content, and then vice-versa when you commit.

I think branching is the one thing that didn't get more complicated with LFS.