This is just the tech crowd equivalent of a tabloid at the supermarket checkout isle, Tom Cruise is secretly a ferret-lover, read all about Bob’s torrid affair with Mallory!
Torvalds isn't wrong, and I'm almost certain he didn't mean, "...and therefore everyone should quit GitHub immediately." but people will interpret it that way. And on the off chance he did mean for everyone to quit GitHub, he's then ignoring a cornucopia of value that GitHub provides unrelated to his expertise as the creator of git, which I don't think he's arrogant enough to do, anymore.
What would you rather see? That he just avoid expressing any opinion that might make people question your status-quo? Muddy his own message by weighing down his emails with hedging and qualifying statements that are - at best - superfluous to his target audience?
I'd love it if one of my juniors was tuned in enough to read this and realize there is more to git than github. And maybe they even start learning how to use that tool beyond the lowest common denominator of git knowledge that most people skate by with.
Of course it might mean steering them away from a rash decisions like misinterpreting this email, or wanting to leave github just because someone pointed out it wasn't perfect. But that's what makes them junior. It's my job to make them better than that.
>which ends up being a lot of work for no material gain for my org.
If you would just paternalistically tell them no, or would give a mentoring answer but don't see the value in that, then there is a workplace problem to address. Either you're hiring too junior for what you're willing to support on the team, or you need to reconsider your role within the team.
If he can roll out a kernel and distributed version control system, listen to him. Otherwise, it's time to have the talk about cargo culting.
Maybe Torvalds is just as positive as he is negative and the whole reason why you think that he's someone who's "unsurprisingly negative" is because that's the content that everyone is passing around. If this was just another of his normal comments you wouldn't even see it posted.
When he has a list of complaints, that is his strong reaction. And why would he need to go stronger?
If he uses his strongest reaction for normal work-day issues like drivers and interface design, where does he go for any potential existential community issues we face in the future?
If something comes up that threatens the future of Linux, and he swears and threatens as usual while trying to warn people about it, nobody will care because 'ah yeah that's just normal Linus'.
And yeah, it was more effective. You just have to remember the topic is your code not your person - they are 2 entirely different things. i.e. Brendan Eich is a wizard but javascript started out as a smoking pile of shit.
In The graphing calculator story Ron Avitzur mentioned the other devs saying "It doesn't even suck" which was the highest possible praise.
No he definitely attacks people's person.
"You're a moron."
https://github.com/torvalds/linux/pull/17#issuecomment-56599...
What Linus rightfully wants is the whole story right in the commit message of the merge.
I think GitHub purposely makes condensed commit messages for merges as a way to hook users to their web UI.
The second problem is that it's not portable, it's something internal of GitHub, that is fine till you use GitHub, when you need to migrate to another server, or host your own git repository, for reasons (GitHub changes plans, GitHub closes down, GitHub no longer wants to host your project, etc) what do you do?
currently trying to find an exploit using this 'feature'
This is also why Actions have convoluted security implications.
Also, not that chromium did something different. They reference tons of internal bug IDs, change IDs, and this commit msg also has an URL with the non-standard domain go (no TLD):
https://github.com/chromium/chromium/commit/8b4b1831e333a43d...
The kernel does that too. Those key-value pairs are called "trailers", and are semi-standardized at https://git.wiki.kernel.org/index.php/CommitMessageConventio...
The "git interpret-trailers" command exists to work with this kind of data.
For nearly all cases it's good enough, projects like the Linux kernel are in the end an exception wrt. their requirements and workflow. Most project are just hosted in one place so the shorthand is always clear, and has the benefit of not being "broken" if a project is renamed/moved.
Furthermore GitHub always allows the user to specify the commit message, it just prefills some hint. But it can't really know your style of using git so it can't do much more then just prefilling the hints. But you can always write them the way you want to filling in all the details needed.
Through IMHO the problem are non-ff git merges in general, not only do they motivate bad commit messages but also does "not having merge conflicts" in no way mean there is no problem. I had more then one time where a "no conflict" git merge introduced bugs.
Projects like Linux are a bit special due to the size, number of contributers and sizes of contribution.
But for most projects I can just strongly recommend to only allow FF merges and locally rebase branches on master if it doesn't work. Preferable with users using interactive rebases to create nice commit histories, alternatively squashing works to but git is just _bad_ at squashing and so are tools based ontop of it (e.g. GitHub).
If a project is renamed or relocated from one name to another it might (and should) preserve issue and merge related information and discussion, but any full URLs will have changed, making full URLs fail in specific cases. Using any form of shortened sequential identifiers will fail when referenced in commits merged in from forks of the project that have their own conflicting identifiers.
To solve this in any real way there needs to be a way that when a project is forked it carries information about issues and merges with it, and when commits from that fork are merged back into the main project, or merges from a fork of a fork are merged all the way back to the original project, all metadata about those merges are carried to the original project.
Linus' argument is that the correct place to store that is in the merge commit's message. That it is the responsibility of the person doing the merge to provide that information, and that GitHub does a bad job of providing tools to do that.
It's not the content of what's merged that he's complaining about, it's the default formatting from the GitHub UI (no commit message for instance).
> That's another of those things that I really don't want to see - github creates absolutely useless garbage merges, and you should never ever use the github interfaces to merge anything.
> Clickbait is a text or a thumbnail link that is designed to attract attention and to entice users to follow that link and read, view, or listen to the linked piece of online content, being typically deceptive, sensationalized, or otherwise misleading.
I don't see the title as misleading. I expected to see a kernel mailing list email from Linus where he says what he doesn't like about Github merges and that's what I got.
https://www.theregister.com/2021/09/06/github_merges_useless...
He also says: "But it also means proper authorship and committer information etc. All of which github entirely screws up." and they link back to an earlier complaint from him about that.
Through if you just want commits to be signed, then GitHub does it for you as it (always??) signs commits created by their UI/System with their key.
Generally I would recommend FF-Only commits (independent of signing) and local auto-signing of all commits.
> GitHub will automatically use GPG to sign commits you make using the GitHub web interface
You can then make it that GitHub shows any non signed commit as unverified and at a project level not allow PRs that contain unsigned commits.
I think you can only link a GPG public key though.
..."What is your job?" Torvalds replied, "I read and write a lot of email. My job really is, in the end, is to say 'no.' Somebody has to say 'no' to [this patch or that pull request]. And because developers know that if they do something that I'll say 'no' to, they do a better job of writing the code." [1]
Do we have any idea what will happen to Linux once Torvalds is not there? Is there any example in history of OSS development as to what happens when BDFL [2] is not there anymore?
[1] https://www.zdnet.com/article/linus-torvalds-im-not-a-progra...
[2] https://en.wikipedia.org/wiki/Benevolent_dictator_for_life
The Python BDFL announced his resignation three years ago, so that project might serve as an example.
https://lwn.net/Articles/759654/
I think it will be a while before we see the long term effects of Guido's departure, but I already miss him. The few interactions we had left me feeling that he was good at choosing his yeses and noes appropriately.
It’s just that no one in their right mind would want to do Linus’ job. It’s miserable and stressful; he only does it because he’s been doing it for 30 years and it’s his baby.
The outcome will be interesting to be certain.
Oh that's easy. You bring all maintainers in the one place, disconnect their internet and wait for the white smoke.
I think it's much more common to say his communication style has problems. I think he has really good intuition on technical stuff.
This is not to say Linux or Linus are perfect, but you can usually pick out certain of his opinions and find them to be pretty grounded.
In fact I once did a PR moving around some files which is visible with multiple commits (move file commit, edit file commit) which was replaced by a sqiash commit that deletes files and adds one with modified content.
As an industry, we should be nudging people away from those bad habits. Instead, the "squash merge" feature nudges them in the opposite direction. It disincentivizes careful commit commit messages and encourages general disregard for the commit log.
Collaboration requires good communication. For programmers, that means:
- writing clear code
- commenting your code
- documenting your code
- writing a clear summary in the PR description
- organizing your changes into cohesive, (mostly) self-contained, reviewable units -- expressed as independent commits in the version history
On that last point: The commit log is something worth curating, tending to it with the same care you would use for the other points.
Yes, PRs are often small and self-contained enough that it shouldn't be subdivided into multiple commits. But just as often, it's clearer to use multiple commits which can be reviewed in sequence, rather than in one big chunk.
In the latter case, it's incumbent on the PR author to present a logical, clean commit history. If you wrote four commits but two of them are inseparable, then squash those two before you submit the PR. Commit messages like "fix typo from last change" are completely unacceptable in a PR. That sort of thing is fine in your own repos, outside of any review process. But when sharing code with others? No way -- that's inconsiderate with others' time, and pollutes a valuable data stream (the commit log).
But hey, if there's a good chance that all your commits will be squashed anyway, then why bother curating your commit log at all?
Instead of letting bad commit messages slide and simply squashing them, we should gently insist that PR authors fix their commits on their end. Their next PR will be better for it.
In the past, I've been occasionally annoyed when my carefully crafted commit log was simply squashed by a PR. I had intended the commits to be reviewed one-by-one. And if a bug is discovered in one commit later on, it would be clear which lines ought to be reverted, and which should stay unchanged. All of that care gets thrown out by a squash. Grr...
Edit: but it really is a niche use case. Count the number of developers working, the number of lines written, for projects that are not the special snowflake of the Linux kernel. Line of business apps. Consultoware. Fuggin' code bootcamp students selfishly using other people's open source projects for their grad advancement. All this code that nobody, maybe not even the people writing it, cares about. Git is the wrong tool for those jobs, but because Torvalds wrote it, it must be good.
The biggest problem is when developers who do not really understand version control at all (there are a lot of them -- they tend to think of it as a "save" mechanism) are allowed to use all the features of GitHub and can only do their work with buttons.
For example, it is common for some developers to think that there are only two options when dealing with merge conflicts: "Accept theirs" or "accept ours" when, in reality, most real merge conflicts require a synthesis. Now, add to this the fact that such developers barely write commit message (seen too many projects with only "merge X and Y", "update", "fix bug", "implement feature" etc). The situation gets worse.
Soon, you end up with a project where the only tool for locating any issue becomes `git bisect`.
One of the major reasons Github does not / cannot do commit messages the way Linus likes is that the reasons why odd is changed are in and supposed to be in the ticket tracker (where non-coders / committers can view / comment / approve.)
This is not a technical fix that github can make - this is a fundamental split about where the power lies - most companies do not have the final say, the source of truth, in their codebase and consequently their repos.
Linus is on the side of history here. But for those of us coders living in ticket trackers for our daily job, it's a serious culture shock. For non- coders it's an existential threat.
On a separate note, I think there is a space for using hashes to compress tickets and all the ancillary evidence and sign offs, into one artifact, and then reference that in the repo commit. But I just can't see it in my head
Through not seldom the source of truth is also hidden somewhere in the Linux mailing list.
Similar a (insane) high amount of projects on GitHub and in companies will hardly ever use the history besides a last few commits. Sure git blame is a thing, and so is bisect but how often is it used on projects besides large open-source projects?
Note that you generally don't send pull requests when contributing to Linux unless your changeset is unusually big, so pull requests are usually only used by maintainers to forward their stuff to other maintainers. Regular contributors submit patches instead: https://www.kernel.org/doc/html/latest/process/submitting-pa...
If you just pick rebase instead of merge from the UI the commits will be merged without that "meta commit".
No need to get all emotional