HaraldvonBlauzahn

joined 4 months ago
[–] HaraldvonBlauzahn@feddit.org 0 points 8 hours ago* (last edited 7 hours ago)

squash exists but it squashes commits.

The rebase command is a bit more flexible but a key difference is handling of conflicts: They represent as regions with conflict markers in the conflicted text regions and all following commits/changes, and they disappear once the conflict has been resolved. No weird interim stated and git rebase --abort. If you want the old state back, you only need to do jj undo and that's it.

[–] HaraldvonBlauzahn@feddit.org 1 points 8 hours ago

I create lots of log files and other temp files when I work. Maybe I just fetched some .json from a service and put it in tmp.json? Maybe I created a small shell script to automate something I'm doing?

You might be able to put them into .gitignore. But why not keep the shell script in a tools folder?

[–] HaraldvonBlauzahn@feddit.org 0 points 8 hours ago* (last edited 8 hours ago)

I can see that - but that's a "less frequent" task than me switching between branches.

My observation is that one happens to edit the commit graph much more often because it is so effortless.

And the analogous thing to switching a branch is:

jj

to get the log. And then, with say "qx" being the abbreviated commit id I want to append the next change to:

jj new qx

and now I am already working at the right series of changes.

Because I like a lot to focus on one single thing, the next thing I do is often

 jj desc

which opens $EDITOR with the commit description and lets me write down what I am going to add or change.

That commit description also shows up in the log command, so I know always what the change is about.

[–] HaraldvonBlauzahn@feddit.org 0 points 8 hours ago* (last edited 8 hours ago) (1 children)

jujutsu changes a lot of the affordances to manage changes and I understand that many people will be reluctant to use such a changed interface - for one, after they have spent so much time with learning the git CLI, and also because there are dozens of alternative git UIs and VCSes which claim to offer something simpler.

But: jujutsu offers about similar power and flexibility as git, while requiring much less UI complexity. The proof for this is the much, much smaller amount of required documentation as well as practice before one can work productively with it.

All the changed elements give a very orthogonal and cohesive whole, which is very rare for software of that complexity.

Will this work for everyone? Probably not, that happens extremely rarely.

Will many people pick it up on a whim? No, change does not happen that way. In the ideal case, a kind of logistic function but adoption will be very unlikely to be as rapid as git's adoption.

Will experienced git users drop the work they have to do and spend half a day to try a new tool? Some do, and this is good. Some don't, and this is also good.

So, no, I don't have a problem. People have time and decide to look at something or they don't. Both is fine.

[–] HaraldvonBlauzahn@feddit.org 2 points 9 hours ago* (last edited 7 hours ago)

More shortcomings of jujutsu:

Some things that are also missing are signing commits and such, but again one can use git for this.

Also, git servers and tools like github, gerrit etc. don't know about jujutsu's change ids, so the advantages are kept local. But this is changing, the tools are adding this metadata.

Also, one can sync up jj repos with rsync, which transmits the change ids.

gitk shows many temporary commits which is distracting.

It obsoletes Emacs Magit, which means vim is the better choice for editing commit messages, which means you see yourself morphing into a vim user. Or maybe emacsclient.

Building jujutsu from source requires a fairly up-to-date Rust environment. (One can download a binary that is statically linked with musl from github but I hate downloading binaries). Debian stable has not even an out-dated version. Building it under Guix's cargo took me some tries.

If you work on a Mainframe or Tandem system, you'll need to wait until your system's Rust port is done. A hefty requirement compared to the needs of building git.

Seeing the list of dependencies makes one wonder whether it was written in node/js.

[–] HaraldvonBlauzahn@feddit.org 1 points 11 hours ago* (last edited 11 hours ago) (8 children)

YMMV but I've found it much easier to manage complex workflows with jj compared

It is no secret that git's interface is a bit too complex - even XKCD has made fun of it.

But what is amusing is that people now have a kind of Stockholm Syndrome, and plain refuse to believe there could be something better.

(Perhaps motivated by the long list of half-assed helper interfaces and GUIs which just were hapless trying to hide the sprawling complexity).

[–] HaraldvonBlauzahn@feddit.org 3 points 11 hours ago* (last edited 11 hours ago)

I look forward to read your beautiful, thoughtful, well-commented commit history. No more "Merge branch 'asdfasjkfdlas/alkdjf' into sdkjfls-final" ;-) .

[–] HaraldvonBlauzahn@feddit.org 2 points 12 hours ago* (last edited 8 hours ago) (1 children)
  • jj is overeager about adding stuff to ðe repos; it's by design.

One just needs to learn how to un-track stuff, by (1) adding the missing .gitignore entry, (2) issuing the "jj file untrack" ..." command, and (3) removing the file.

The big advantage is the simplification which becomes possible by this: no staging area, no git add / git remove / git commit, no stash save, stash pop, stash apply, and so on. No git amend, fixups, reset soft/hard/ mixed,...

And the overall complexity saving of jujutsu is enormous: two of the man pages on the more complex git commands are already larger and more complicated than all of the jujutsu command line reference (link)- which is pretty complete! And Steve Klabnik's jujutsu tutorial is about a tenth of the length of Beejs brilliant Guide on git. And with Klabnik's Introduction, you can already do more (for example complex rebase operations, like rebasing multiple branches at once).

[–] HaraldvonBlauzahn@feddit.org 2 points 12 hours ago* (last edited 11 hours ago) (2 children)

But, did you try it? Myself, I was comfortable with working with it after one hour or two - after working with git for 18 or 19 years, and often being the first git user in my organization.

[–] HaraldvonBlauzahn@feddit.org 2 points 12 hours ago (1 children)

The entire point of branches is to have a name that has meaning to me that I can use to refer to work I'm doing.

You already have a name for every change/commit: The first line of the commit message, which you can write when you start work on it.

Branch names in git are temporary: When a branch is merged, its name disappaers.

[–] HaraldvonBlauzahn@feddit.org 0 points 13 hours ago* (last edited 11 hours ago)

This is... unforgivably obnoxious.

Well, if you really don't like it after giving it consideration - use git. Nobody forces you to use jujutsu.

[–] HaraldvonBlauzahn@feddit.org 2 points 15 hours ago* (last edited 11 hours ago) (2 children)

Yeah, sort of. It can be used e.g. instead of command-line git commands, or also be intermixed with them. Pushing a branch to a git server works as normal "git push" (needed in older versions with complex vpn/ssh configurations).

Has also still limitations remaining - no git submodule support. But it has work trees.

 

“Jujutsu (jj) is a version control system with a significantly simplified mental model and command-line interface compared to Git, without sacrificing expressibility or power (in fact, you could argue Jujutsu is more powerful). Stacked-diff workflows, seamless rebases, and ephemeral revisions are all natural with jj [...]”

Part 2 of the series is out and is here.

 

Well, I hope you don't have any important, sensitive personal information in the cloud?

 

Sounds a bit bizarre, but hey, so are the times we live in....

 

cross-posted from: https://scribe.disroot.org/post/3819931

Helsinki has not recorded a single traffic fatality in the past 12 months, city and police officials confirmed this week.

The city's most recent fatal accident occurred in early July 2024 on Keinulaudantie in the city's Kontula district.

Authorities are calling the situation exceptional.

"A lot of factors contributed to this, but speed limits are one of the most important," said Roni Utriainen, a traffic engineer with the city's Urban Environment Division.

...

According to Utriainen, more than half of Helsinki's streets now have a speed limit of 30 km/h. Fifty years ago, that proportion featured 50 km/h limits.

Earlier this summer, Helsinki decided to lower speed limits near schools to 30 km/h, a measure that is set to take effect as the academic year begins.

...

 

Archive link: https://archive.ph/A7LI4

Marianne Belotti has worked at large institutions with modernizing decades-old code bases. She is author of the book "Kill it with Fire" [review].

From that book's author bio:

Marianne Bellotti has worked as a software engineer for over 15 years. She built data infrastructure for the United Nations to help humanitarian organizations share crisis data worldwide and tackled some of the oldest and most complicated computer systems in the world as part of United States Digital Service. At Auth0 she ran Platform Services, a portfolio that included shared services, untrusted code execution, and developer tools. Currently she runs Identity and Access Control at Rebellion Defense. She can be found on most social networks under the handle bellmar.

 

Ich sehe es schon kommen, wir müssen die Löhne senken und die Boni erhöhen. Schliesslich braucht man in so einer Situation vorausschauende und kompetente Manager!!

 

cross-posted from: https://feddit.org/post/16116378

One aspect of Guix I found to be really fascinating: That there is basically no conceptual difference between defining a package as a private build script, and using a package as part of the system.

Let me explain: Say you wrote a little program in Python which uses a C library (or a Rust library with C ABI) which is in the distribution. Then, in Guix you would put that librarie's name and needed version into a manifest.scm file which lists your dependency, and makes it available if you run guix shell in that folder. It does not matter whether you run the full Guix System, or just use Guix as s package manager.

Now, if you want to install your little python program as part of your system, you'll write an install script or package definition, which is nothing else than a litle piece of Scheme code which contains the name of your program, your dependency, and the information needed to call python's build tool.

The point I am making is now that the only thing which is different between your local package and a distributed package in Guix is that distributed packages are package definitions hosted in public git repos, called 'channels'. So, if you put your package's source into a github or codeberg repo, and the package definition into another repo, you now have published a package which is a part of Guix (in your own channel). Anybody who wants to install and run your package just needs your channel's URL and the packages name. It is a fully decentral system.

In short, in Guix you have built-in something like Arch's AUR, just in a much more elegant and clean manner - and in a fully decentralized way.

view more: next ›