Email or username:

Password:

Forgot your password?
Dana Fried

I posted a rant in someone else's mentions which I regret and then deleted but I need to vent.

I use git every day. I'm very comfortable with git.

Also: git is fucking terrible, and I suspect it's the reason a lot of people get scared away from writing software.

208 comments
Shannon Quinn :verified_root:

@tess git honestly makes me question whether or not I’m a good developer

I can only imagine how that plays out for folks without my straight-white-dude privilege

Mx. Eddie R

LB:
Git really is terrible software. You're not a bad dev, you're just stuck using an unapologetically bad tool.

Si Dawson

@silvermoon82 YES!

I'm glad I'm not the only person that can see this.

It's a beautiful, elegant design... wrapped in a dumpster. Full of toxic waste. That's on fire.

I'm waiting, eventually, the world will wake up and go "oh, what WERE we thinking?!?" and move on.

But I suspect I'm going to be waiting a while. Git is AWFUL. Also, the Emperor has no clothes.

Mx. Eddie R

@sidawson
It's awful, but it's established and has a self-supporting user community. Replacing it will take something world-changing.

Si Dawson

@silvermoon82 Sadly, yes.

Also, I think there's a LOT of Stockholm Syndrome.

"I've invested SO much time and pain learning this tool. Therefore, I must be 1337, and because it proves I'm worthy (& other people struggle with it, therefore proving I must be better than them), I will defend this tool to my death."

Dana Fried

Imagine you're someone with an interest in learning how to code.

Perhaps you're from one or more communities that face serious stereotype threat in this area (e.g. a woman or a BIPoC person) - that is, you don't have a ton of role models and may even have been told outright that coding isn't *for you*.

But you decided to Do The Thing anyway, because you're a badass.

Dana Fried

Imagine the steps you need to go through:

1. Pick a language. Python, Ruby, etc. There are nice tutorials online. You do them and feel smart.

2. Download a runtime and start writing code locally, testing it out. This can be tricky if you are trying to do web stuff, but whatever. You feel smart.

3. Okay, you actually wanna do *development*? Then learn git. The names confuse you. You end up fucking up your source tree six times before you learn reflog. You feel like an idiot.

Dana Fried

I am extremely convinced that git is the Great Filter for people trying to get into coding on their own.

It never ceases to make me sad and frustrated that we've settled on the Worst Possible Tool to do source management.

Nothing in git is named or grouped coherently. It's the opposite of discoverable. Even with tab completion. By the way, you know who doesn't get tab completion? Windows users. Which is most people who are gonna try to learn to program on their own.

Jeffrey Hulten

@tess

Don't tell anyone, but by git aliases map my old SVN finger macros over to the arcane git commands.

Dana Fried

@jhulten I should use more aliases, except I'd have to implement them across multiple operating systems and shell environments

Jeffrey Hulten

@tess A decade ago I used freshshell to automate my dotfiles for *nix hosts. Now that I have WSL, I am covered everywhere.

Jeffrey Hulten

@tess I was consulting and would get a laptop for six months, sometimes overlapping between clients. I got it down to about 20 minutes to install most of my config and standard tools.

Ylva :babaw_soft: :sheher: :babaw_is: :babaw_me:

@tess That's why asshole coders need to stop being gatekeepy about real coders using git from the command line
Use a GUI like Github Desktop, stop recommending beginners do anything else

Honestly, the devs that feel better than others because they use CLI are likely the worst at actually commitng properly. GUI's make it so much easier to cherry pick files and lines, and makes it much harder to make mistakes

William Pietri

@tess Totally. It was a tool made for an unusual case in a different era, created by experts designing for experts. I would love to see a modern VCS tool emerge, one that focuses on the common use cases for modern development, and designed with novices in mind.

Dana Fried

@williampietri

Perforce is right there, man.

It is, in fact, exactly that thing.

William Pietri

@tess Is it? It's older than git by a decade, right? And it's still a commercial product, I thought.

Dana Fried

@williampietri free for a lot of small-scale use IIRC, and pretty constantly updated also IIRC, plus what's wrong with paying for a good tool?

But fine, use subversion plus a decent OSS shell integration.

William Pietri

@tess Version control is an area where I'd be especially cautious about vendor lock-in. Especially in this age of enshittification. There's no way I'm trusting a company owned by private equity over a long-term relationship.

And that's before we get to all the open-source concerns, where I think git has a legitimate edge. I think the Perforce/SVN centralization/SPoF model can be fine for companies. But that centralized control mindset doesn't work for richer relationship approaches.

Dana Fried

@williampietri even OSS projects have a central repo with the "canonical" source; I don't see the difference between hosting code on github or equivalent vs having it on a hosted SVN server.

Daniel

@tess it’s easily the most complex tool a beginner has to learn, and probably the most complex tool the rest of us use regularly.

AndreaTvillingπŸ™ƒπŸ³οΈβ€βš§οΈπŸŒˆπŸŒ»πŸ‡ΊπŸ‡¦

@dznz @tess

it depends... if you start in linux kernel development or surrounding middleware, it's The Most Natural tool pretty much soon after you start - rest is more complex than git.

Dana Fried

@aytvill @dznz

Nobody *starts* in Linux kernel development.

Daniel

@aytvill @tess what did they do before that, subway maintenance? Industrial chip design?

AndreaTvillingπŸ™ƒπŸ³οΈβ€βš§οΈπŸŒˆπŸŒ»πŸ‡ΊπŸ‡¦

@dznz

mostly worked with hardware (from big iron to network equipment to embedded) or design, all after uni. Uni are rarely to give proper sw de loop anyway

@tess

Dana Fried

Your source management tool should be the *easiest* tool you use, not the hardest.

The order of difficulty in tasks should be:

write code > test code > build code > manage code

But in the real world the order is, somehow:

manage code > build code > test code > write code

This is incredibly stupid.

Sophie Schmieg

@tess and honestly, the user unfriendliness of git would be mostly avoidable, especially if the source control took into account how we actually use it.

Pretty much every setup has a central server tracking the repo, and the code has a clear main branch and a clear version at HEAD, which you usually want to keep consistent with. But git is built on the assumption that everything is its own repository and equal, so it supports a bunch of features for a use case that very few people need, while being shoehorned into the process that people actually use.

@tess and honestly, the user unfriendliness of git would be mostly avoidable, especially if the source control took into account how we actually use it.

Pretty much every setup has a central server tracking the repo, and the code has a clear main branch and a clear version at HEAD, which you usually want to keep consistent with. But git is built on the assumption that everything is its own repository and equal, so it supports a bunch of features for a use case that very few people need, while being...

Dana Fried

@sophieschmieg precisely. Also: it's a graph theory peg being rammed into a source control hole.

Chrome at least gives us a bunch of common functionality that sands *some* of the sharp edges off of it, but it's still awful to use and I'm still learning tricks that make my experience with it less painful five years after starting with it.

Sindarina, Edge Case Detective

@tess Is this about command-line git usage? A decent GUI client made it so much easier, for me.

The Modesto Kid

@tess I wrote code as my job for 25 years and spent very little time or energy on source code control. This had pluses and minuses and would probably not be possible any more. I did not work on teams very much until the very end of my career (last year in the industry was 2020).

firstprimate

@tess Right!?!? And don’t get me started with some of the tool chains. Looking at you JavaScript.

Mike Hucka

@tess I am nodding in agreement so vigorously that I think I sprained my neck.

dstu

@tess 100% agreement about git not being the right thing to hand to people who are new to source control.

When I was a TA, the professor wanted students to turn in assignments with a "real" tool. I opted for SVN over git.

Students still did silly things when committing to the course repository, but I wasn't about to tell them to pick up a tool whose handles consisted almost entirely of sharp edges. The course was "make Roombas play soccer," not "how to lose your source code like the pros."

AndreaTvillingπŸ™ƒπŸ³οΈβ€βš§οΈπŸŒˆπŸŒ»πŸ‡ΊπŸ‡¦

@trurl

my observations during hackathons with (mainly) students say me:
a) unis are very far from realistic dev loop/pattern
b) lack of depriving from contact IRL also spoils and "simplifies"
c) large / mature FLOSS project give boost about it

@tess

dstu

@aytvill @tess (a) was definitely true... the prof's intention was for students to collaborate over svn, but I'm pretty sure most teams just hacked locally and committed to an assignment's tag when it was time to turn in.

I'm not sure I understand your points (b) and (c). Were they complaining that the uni setting simplifies the collaboration problems you get in industry [so SCm as taught at school isn't helpful], and big FLOSS projects require use of git [so learning other tools doesn't help]?

AndreaTvillingπŸ™ƒπŸ³οΈβ€βš§οΈπŸŒˆπŸŒ»πŸ‡ΊπŸ‡¦

@trurl

b) if your team has luxury of personal meetings, typically enforced by mgmt, then async dev mode turns into sync slot mode - you go away from bazaar to cathedral

c) large FLOSS is bazaar at roots and that's what makes cathedral folks to abhor at dealing with what they perceive as chaos ;)

@tess

Third spruce tree on the left

@trurl @tess I've been using lesser source controls (rcs, cvs, pvcs, clearcase, mks, some real esoteric ones) for years, then subversion for over a decade.

Then I had to move to git, sourcetree and crapbucket.

Then I learned fear.

I've read many guides, but I still couldn't explain what a rebase is.

dstu

@tess I am pretty far removed from teaching tools like this nowadays. If advising a smart, driven friend who's running Windows (like, say, my friend with a bio PhD who keeps asking me questions about awk and shell scripting), I would probably suggest they use their IDE's support for git or a shell extension like tortoisegit.org/.

Is that a reasonable starting point these days?

dstu

@tess

It doesn't help with the git model (or the myriad of oopsies like, "I rebased and can't push to remote anymore," and "I checked out a floating HEAD what is a floating HEAD oh god"), but at least it provides a UI layer that might help keep them from straying into that territory in the first week.

Dana Fried

@trurl oh neat, I didn't realize Tortoise did a git implementation! I used their SVN integration for along time.

(Unfortunately, I'm now developing on three platforms for five, so I can't consistently use Tortoise.)

Jonathan Dierksen

@trurl @tess +1 for using the IDE.

One chicken-and-egg reason for git becoming so ubiquitous is the amount of tooling for it. The fact that I can pull up VSCode and do all my day-to-day git stuff with just a couple of clicks makes it easy to ignore how awful it is under the hood.

Comparing to Perforce, which I also have to use daily, which has minimal VSCode support, and I have to jump back to the (admittedly, 100x better) command line for the 10k edge cases.

Dana Fried

@dierksen @trurl I honestly never figured out how to use git through vs code, except to see what files are modified, look at diffs, and revert stuff.

I'm sure it does more, but tbh I don't know how much of the chromium development tooling is supported regardless.

Orc

@tess Oh, the whole fucking Agile/Extreme Programming/Git/Github axis is designed to drive people screaming for the exits.

I was very fortunate to go from actual SCCS to CVS to Bitkeeper to Git, so the simple concepts weren't much of a problem. The "fancy" stuff (like selecting on revisions, just to pick one example), on the other hand, is a complete nightmare and I couldn't blame people either not doing SCCS or rolling their own (hg is apparently much better, but I don't want to change SCCSs again after bitmover lost their mind and pulled out of the free software world. Now that was a nightmare and a half to migrate from!)

@tess Oh, the whole fucking Agile/Extreme Programming/Git/Github axis is designed to drive people screaming for the exits.

I was very fortunate to go from actual SCCS to CVS to Bitkeeper to Git, so the simple concepts weren't much of a problem. The "fancy" stuff (like selecting on revisions, just to pick one example), on the other hand, is a complete nightmare and I couldn't blame people either not doing SCCS or rolling their own (hg is apparently much better, but I don't want to change SCCSs again...

Irenes (many)

@tess we do think you're right about this

we have friends who've chosen to approach this from the documentation angle (cf. kickstarter.com/projects/essen ) and we do hope that will help

but it sure would be nice if the core git people would, like, loop in a tech writer for advice on names and conceptual organization and then actually take their advice

Fizzy Logic

@tess I miss the simplicity of SVN. Sure, it didn’t have a local copy of the entire damned repo, but who cares. Commit in SVN to a remote server does what I need, without the β€œare you sure?” semantics of commit+push.

The Modesto Kid

@tess there's got to be a shareware WinGit out there somewhere with a crudely implemented File Manager overlay to your repository

Orc

@tess

"3. Okay, you actually wanna do development? Then learn git. The names confuse you. You end up fucking up your source tree six times before you learn reflog."

Oh, so there's a way to unfuck a git repository other than blowing it away and {restoring it from time machine/blowing it away and cloning one of your remote repositories}?

Dana Fried

@orc YES! CONGRATULATIONS! YOU JUST LEVELED UP

Orc

@tess Well, I would level up but that's an advanced feature and those scare me.

damien

@tess ive been writing software for a living for almost 9 years and i still google most of the "barely non-basic stuff" for Git and i think what saves me is that we squash commits on PRs at work lol πŸ™ƒ

Luna Saphira Dragofelis
@tess I think the only reason git is used is that it was the best open source source control when it was developed, and by now it's so entrenched barely anyone bothers with alternatives
Tony Byrne

@tess Agree! Git is actually a Masterclass in obfuscation. Source Control is tricky enough to grok, there’s no need for the tooling to make it harder. Then there’s the obtuseness of telling you that there’s a command similar to what you’ve typed instead of just running it.

Jake Mannix

@tess

we need to normalize "feeling like an idiot with git". I have been using git since... 2008 or so?

I *never* rebase, I basically use maybe 7 commands: clone, checkout (sometimes with -t) fetch, pull, commit (often! all the time!), merge, push. If anything breaks, start over from scratch on a new clone and move over files I want to keep one by one

Git sucks, but I ignore everything complex about it, and pretend it is unable to do anything other than the above 7 commands, no variation

Michael Bond

@tess what would you recommend over git for source control?

LΓ‘szlΓ³ Kupcsik

@tess
I have yet to meet a single person who got scared away from programming because of git. Maybe someone out there has stories like that, but that will still be anecdotal at best. There are so many other, more annoying things about writing software. Heard about a sect called "agile"? They _are_ scary as hell!

dana :blobhaj_witch:

@tess GitHub Desktop isn’t so scary as command line git at least.

alwillis

@tess Preach! You're on-point regarding Git.

I've seen so many developers suffering from Git Stockholm Syndrome over the years.

Russell

@tess Reading through this thread, I'm beginning to think a huge factor of the problem is the Git Flow model that is often espoused as The Way. The OG has even said 'this might not be right for you' nvie.com/posts/a-successful-gi

At my workplaces our workflow minimizes rebasing and avoids managing multiple non-feature branches. Similar to @pbrane the commands we use regularly are pull, checkout, status, diff, add/rm/mv, commit, merge, and push [-u]. Rarely rebase, reflog, cherry pick, reset, etc.

@tess Reading through this thread, I'm beginning to think a huge factor of the problem is the Git Flow model that is often espoused as The Way. The OG has even said 'this might not be right for you' nvie.com/posts/a-successful-gi

At my workplaces our workflow minimizes rebasing and avoids managing multiple non-feature branches. Similar to @pbrane the commands we use regularly are pull, checkout, status, diff, add/rm/mv, commit, merge, and push [-u]. Rarely rebase, reflog,...

Negative12DollarBill

@tess
I so agree. I literally flinch every time I need to use git for anything. I have lost literal days to this kind of thing.

It's taking all my strength not to list many many things I hate about it.

I'll just tell you one: radically different Git behaviour between versions. I spent a lot of time figuring out that the advice I got for my problem was correct for more recent Git, but it was well known that `git fetch origin master` would not do what you thought it did if my Git was older than a given version.

You just had to know this.

@tess
I so agree. I literally flinch every time I need to use git for anything. I have lost literal days to this kind of thing.

It's taking all my strength not to list many many things I hate about it.

I'll just tell you one: radically different Git behaviour between versions. I spent a lot of time figuring out that the advice I got for my problem was correct for more recent Git, but it was well known that `git fetch origin master` would not do what you thought it did if my Git was older than a given version.

skry

@tess I don’t even want to write software. I want to maintain a medium-sized static website. Git is an insurmountable obstacle, despite my familiarity with making websites. Gitlab added 5x the clicks to my workflow, also unusable by me. Way too much metawork. Give me SFTP and a staging area, any day.

Sorry, now I’m ranting in your mentions :)

Mallory πŸ³οΈβ€βš§οΈ:freebsd_logo:

@tess After more than 10 years of teaching git, I think the biggest barrier to understanding is that git hides its internal model from users. If git showed the current state of its internal model and each command explained how it manipulates the internal model, git would be much much easier to learn and use.

One day I'd like to write a new porcelain for git that puts these ideas into practice.

HarkMahlberg

@tess My systems programming class would not accept homework submissions in any other capacity than a git push. Learning it was trial by fire: if you didn't know how to use it in command line, you were looking forward to zeroes on assignments you had working perfectly.

In a way, this forced me to learn git and get good at using it. I feel good when I figure out how to make it do what I want. But the entire problem is that using it is solving a problem in and of itself.

Source control should be like your bank: inconspicuous, in the background, mundane. I shouldn't have to think about my bank holding my money. Likewise I shouldn't have to think about git holding my source code. It should be seamless, so intuitive as to be forgettable.

@tess My systems programming class would not accept homework submissions in any other capacity than a git push. Learning it was trial by fire: if you didn't know how to use it in command line, you were looking forward to zeroes on assignments you had working perfectly.

In a way, this forced me to learn git and get good at using it. I feel good when I figure out how to make it do what I want. But the entire problem is that using it is solving a problem in and of itself.

bluGill

@tess hg was before git (by maybe a month), and much better. Unfortunately all the other tools I use assume you are using git and so i'm forced to use git.

Doctor Memory

@tess git: β€œoh, you thought β€˜worse is better’ was some kind of clever metaphor??”

rhempel

@tess Hmmm - I am very comfortable with git but the comments here have inspired me to ask more questions of new users.

That being said I DID mess up source trees in the beginning until someone really explained what was going on. It's actually a LOT simpler than most tutorials would have you believe.

Until you get to submodules.

I'm working on my moving a team from svn to git and will approach it as if they don't know anything about it - and will support them as much as I can.

pmbAustin

@tess
Git really is awful. I just can't abide it. I also can't get comfortable with it. But it's absolutely NOT the right tool for me or the way I work. Yet I am forced to use it because everyone "loves" it. Or something.

Chris Fjell

@tess
Wow the git hate is thick! Anyone remember MS Visual Source Safe? That really really sucked. Git seems robust at least in its terribly named functionality (β€œpull” into main? Wha? That’s not the same as fetch or clone?!?)

Chris Fjell

@tess
And CVS concurrent versions systems or something… I haven’t had to blow away git repos cuz they’re corrupted at least. Just spending a day undoing git mistakes is small beer compared to heart stopping full repo reconstruction from backups. Or maybe I’m just a shitty admin :)

Richard Hendricks

@tess It's such a weird ass tool in that it is terrifying for a novice and so weirdly safe for an expert.

And oh god, don't even get started with submodules. They seem like the perfect answer but they are just a giant baseball bat heading to the back of your skull on any non-trivial project. I've been on multiple large projects that went monorepo -> submodules -> weeping -> back to monorepo.

CodeByJeff

@tess git wasted an hour of my life today just because

I'll bring cupcakes. Tell me where we're meeting to plan the revolution.

Yellow Flag

@tess I’m an experienced developer, I tried using git multiple times throughout my career, and I always had to give up. It’s extremely counterintuitive, the only way to use it seems to be memorizing a bunch of commonly used commands. Which is why I always end up using Mercurial and accessing Git repositories via hg-git. πŸ€·β€β™‚οΈ

rich

@tess omg this πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―πŸ’―

Γ–lbaum

@tess I’m very comfortable with git as well (I’ve been using it every for 14 years,) and I completely agree with you. I had to start with a GUI (the excellent Tower) just to know which of the unrelated flavours of β€˜reset’ I had to use in each situation. And I already understood the VCS concepts from CVS and SVN, and the distributed concepts from Mercurial. As you said, grouping is terrible, syntax is awfully designed (update-ref anyone?) and discoverability is zero. >>

Paul Rosen

@tess I can't wait for git to be "disrupted". Vite replaced webpack in a year. It can happen.

bison βœ…

@tess @b0rk depends if they even come this far and don't get scared of by university "programming" courses first.

Nicholas Weaver

@tess
Agreed, and TBT the only reason I tolerate git is basically I use it like good old subversion...

nthcdr

@tess Using #git with #magit in #emacs is one of lifes pleasure for me.

I've gone through a multitude of source code management tools before git stole the show and I don't long for any of them.

I get that the git command line can be frustrating. But that fix is just a few aliases away anyway, so why bother getting upset.

Also most people settle on a few of the commands for 99 percent of their usage. It's not like you need to memorize all possible flags and variations.

Go Up