Back to News
Advertisement
Advertisement

⚡ Community Insights

Discussion Sentiment

64% Positive

Analyzed from 902 words in the discussion.

Trending Topics

#git#commit#hooks#history#run#describe#pre#add#check#script

Discussion (60 Comments)Read Original on HackerNews

optionalsquid16 minutes ago
Support for config based hooks is very nice.

Only a few days ago, I was just looking for some way to automatically check (and fail) if there are inactive hooks when I try to commit. I already use `advice.ignoredhook`, but it's easy to miss the warning if you commit through VSCode, and possibly through other IDEs.

With this, I can just write a simple script to perform that check, and add it to my global config

ajoberstar3 days ago
Nice to see some seemingly jujutsu inspired features getting into Git core.

  git history reword ~= jj describe

  git history split ~= jj split
https://git-scm.com/docs/git-history

https://www.jj-vcs.dev/latest/cli-reference/#jj-describe

https://www.jj-vcs.dev/latest/cli-reference/#jj-split

aulinabout 5 hours ago
Not familiar with jj and don't want to get into bike shedding, but how is describe supposed to be a good name for history rewrites?
roblablaabout 5 hours ago
jj describe gives a name to a commit. In jj, everything rewrites the history, so there's no real point in calling it out in the command name since it's just the default behavior.
auscompgeekabout 4 hours ago
describe is also the command you can use to edit the commit message of the change you're currently drafting. In jj there's no staging area, every modification to the working tree immediately gets integrated into the current commit. (This means if you have no diff in your working tree, you're actually on an empty commit.)
skydhashabout 5 hours ago
Not really familiar too, but jj has everything committed by default (no index, staging area, and uncommitted changes). You use ‘jj new’ to stop adding changes to the current commit.

‘jj describe’ lets you add a message to a commit as it’s not there by default.

ufoabout 5 hours ago
I have always had this problem with hooks and new contributors: since hooks don't run by default if you just clone the repository, my open source projects get many PRs from new contributors that did not run the linting and commit hooks. I understand there's a security reason for this but what workflows have worked best for you to get everyone to run the hooks? And do you think the new config-based hooks can help new contributors?
jbverschoorabout 3 hours ago
I don't want you to run arbitrary hooks on my machine. As with CI/CD... your hooks should simply point to a script instead
sethops1about 5 hours ago
> what workflows have worked best for you to get everyone to run the hooks

By running the linters and any other checks on CI instead.

ufoabout 4 hours ago
We do run the linter on CI as well, but I think our comitters would get faster feedback if they ran those checks locally.
lou1306about 4 hours ago
Well you can tell them to please enable hooks in the PR guidelines, but you cannot really police what they do or don't run on their own machines.
baqabout 5 hours ago
autoformatter and autofix linter results can be committed and pushed by CI into the PR branch itself. this is a pain sometimes, but as a repo owner it should protect your sanity.
sgarlandabout 4 hours ago
Yep. Nothing I hate more than some trivial formatting error that could easily fix itself halting CI. I am all for consistent formatting and linting, I just think it should be silently handled without fuss.
skydhashabout 4 hours ago
I just add a check workflow that test that the files are well formatted and linted. If it passes, one of the key things I check are changes to the configuration. Some tools allows for bypass comments, so I keep an eye out for those too.
IshKebababout 4 hours ago
As well, not instead. Just add `pre-commit run -a` to your CI. Job done.

It's still annoying for new contributors though because they might not know how to set up pre-commit (which was quite a pain until recently because it's written in Python).

Flimmabout 4 hours ago
To clear up any confusion, Git runs pre-commit hooks, and they can be written in any programming language. There's a completely separate and independent project that gave itself the confusing "pre-commit" name, and it is written in Python. This project aims to make it easier to configure pre-commit hooks. An alternative to it is "prek", written in Rust.
purerandomnessabout 4 hours ago
In PHP, an established tool is adding GrumPHP [0] to your dependencies.

It will then handle git hooks on each commit via composer script by default (but can be omitted per commit).

[0] https://github.com/phpro/grumphp

sestepabout 4 hours ago
I agree with the other replies saying to just run the checks in CI and have the CI error message mention how to install the pre-commit hook.

I'm glad cloning a repo doesn't automatically install hooks since I strongly dislike them: I often use Git commands in the terminal but sometimes I use the VS Code UI to commit, and it's extremely frustrating when simply creating a commit runs for several seconds because of some pre-commit hook.

sgarlandabout 4 hours ago
There’s almost certainly a way to make VS Code use --no-verify.
scqabout 4 hours ago
The approach some JS projects have taken is to use Husky, which automatically sets up the git hooks when you install the project's dependencies during development.
1718627440about 4 hours ago
My project needs other things on setup as well, so I just have a setup script in my repo. `mv hooks/foo .git/hooks` is then just yet another step.
XorNotabout 4 hours ago
I add an autogen.sh script to all my repositories that does things like this as it's first action.
misnomeabout 3 hours ago
You can also set up a central git template repository, so hooks get automatically added into every repository you clone
charles_fabout 2 hours ago
git history makes me think of git revise^1, which gives you a bunch of handy tools to changes your history, move commits around, remove some of them, cut them (which git history now does). I found it very handy in the past

1: https://git-revise.readthedocs.io/en/latest/man.html

jinushaunabout 4 hours ago
`git history reword` is great. Using `git rebase -i` just to fix a spelling error is overkill and doesn’t actually do what I want.
everybodyknowsabout 2 hours ago
> ... rewrites any descendent branches to point at the updated history.

But what about local heads referred to only by a "soft" tag? Is their history rewritten, or is it left to refer to the old history?

WhyNotHugoabout 4 hours ago
The new additions to `git add -p` seem pretty neat. Staging changes with `-p` is seriously underrated!
greg_dcabout 4 hours ago
Those new git history commands will save me an average of maybe a minute a day, but it's still definitely handy nonetheless! After 2 months, that's an hour back!

The git log -L change is nice to see as well. Anything that makes git more filterable gets my vote.

samtrack20193 days ago
the new git history command seems to be useful for quick reword, altho since i use lazygit/magit i don't really see much of a problem to me
olejorgenbabout 5 hours ago
Wish reword took a commit range though
yencabulatorabout 2 hours ago
I had to check and `jj describe` does. You get all the commit messages in a single file to edit, with headers separating them.
Rover222about 4 hours ago
I do almost no direct git work myself these days. Using claude in Conductor. Working on a team. I'll tell claude what do do in git sometimes, but there doesn't seem to be much need to do it myself anymore, even with complicated rebases, reflogs, etc.