logoalt Hacker News

horsawlarwayyesterday at 3:02 PM3 repliesview on HN

I don't really see it.

I used JJ for a bit, but I personally really, really dislike the anonymous branch approach it forces you into.

Branches are just useful conceptually, at least to me. For the same reason I like my documents grouped into folders.

Frankly - I think JJ just ended up taking up far more mental bandwidth than git. Simple operations need generated ids, commands require complicated input (ex - the entire revset thing), I have to be constantly thinking about the tool and its structure.

It feels really oversold to me. It's solving problems for people who live in source control, not problems for people who just want snapshots of code every now and then. Hell - just look at some of the example commands from the suggested tutorial:

jj new ym z r yx m -m "merge: steve's branch"

jj log -r 'ancestors(trunk, 2)'

jj new o

jj log -r '@ | ancestors(remote_bookmarks().., 2) | trunk()'

---

With all due respect, if the intro tutorial to your tool includes a command having to literally write function names in quoted commands, or run a command with fucking 8 (EIGHT!) arguments... You've jumped the shark.

Not trying to harsh anyone's buzz - if you like it... great, it's clearly quite powerful. But it misses the mark for me. I want "just powerful enough" with minimal mental overhead.


Replies

steveklabnikyesterday at 3:43 PM

If you cherry pick complicated commands, and remove all context, sure, they look cryptic.

I wrote that tutorial, and literally only one of those is relevant to my day to day work: jj new o, which means “make a new change on top of the change named o”. Yes, if you remove the context that “o” is on your screen and highlighted, it looks complex.

It’s the same with the other “jj new” command: you’re producing a merge by giving it every branch you want to merge together. If you’re merging five branches into one, you need to provide five identifiers for those branches. It could not be simpler than this. And -m adds a message, same as git.

The other two are showing off the power of the revset language; you’re not typing this stuff in yourself more than once, and if you are, you use an alias so that it’s shorter and easier to use.

show 1 reply
whereistejasyesterday at 4:14 PM

First of all: you do you and as long as you are happy, I am happy.

`jj` is a tool trying to amplify the strengths of git and strengthen its weaknesses. `git rebase` being just one of the many quirky commands. Yes, `jj` requires some rewiring of your brain, but once you get over the initial bump its pretty slick.

Also, I use `jj` everyday exclusively. And I have written `revsets` like 4 times in total.

nonbinary-cpuyesterday at 3:58 PM

i mean i can throw a million cryptic git commands at you, too (jj revsets can be arcane, but they're also fairly well-documented and the names are fairly descriptive). git's gotten a lot of usability features over the years, but there's still a ton of stuff that's just confusing. jj ends up being a lot more intuitive in practice IMO, though the anon branch thing does take some getting used to. there's a lot more i'm comfortable doing in jj, without that 'defusing a bomb' feeling complex git operations often had for me.