It could’ve been mercurial, but I’m glad that didn’t happen. Being shouted at in a mailing-list for fixing a bug doesn’t sound like fun. Also, the amount of CPU resources that would be wasted running a VCS in python would be phenomenal. And have fun trying to develop a project using a separate python version than supported by your python VCS.
Python 10s of multiples more CPU cycles than git. It is an interpreted language: every instruction is read by another process, checked, and then run. Hit on the other hand is executed straight by the CPU. It has at least one layer of indirection less than python (the python interpreter may have multiple). That means it can be slower but it definitely uses more energy.
Since git is so popular, if it were instead mercurial, the energy requirements would be much higher for version control. Whether that will be noticeable on a bill is debatable. I haven’t run the numbers.
Regarding the different python versions. As mentioned before, there is a python interpreter. That interpreter is versioned and so is the python language. Many things are backwards compatible meaning something written in a higher version of the python language can be interpreted by a lower version of the python interpreter. The reverse is also true, so python interpreter with a higher version can interpret a python file using a lower version of the language.
Notice that I put “can” in bold. That’s because newer versions can deprecate certain features or parts of the language. So, if you’re writing a project in a different version of python, mercurial may or may not run depending on your version. Resolving that may not be as intuitive as one thinks.
I think those were he points you were referring to when you asked your question?
I don’t think it’s hyperbole to say a significant percentage of Git activity happens on GitHub (and other “foundries”) – which are themselves a far cry from efficient.
My ultimate takeaway on the topic is that we’re stuck with Git’s very counterintuitive porcelain, and only satisfactory plumbing, regardless of performance/efficiency; but if Mercurial had won out, we’d still have its better interface (and IMO workflow), and any performance problems could’ve been addressed by a rewrite in C (or the Rust one that is so very slowly happening).
No, git has labels on heads of branches. Once the head moves you loose the information. It also makes for a more messy history, which I believe created the whole “rebase everything” philosophy to cope.
If I hand you a commit, you cannot tell which ‘branch’ it is on without searching the git history and hoping that you only get one answer. That’s a bummer if, for instance, you’re a github action and only get handed the commit. If it’s on the master branch, I want to do different things than if it’s a dev branch.
Git branches are very different to Mercurial branches. In git they’re similar to tags that move along with the head commit of that particular branch. In Mercurial every commit contains meta data indicating the branch it’s on. It also has a query language that lets you do sone quite neat things with selecting groups of commits based on their metadata, which can be useful in code reviews and similar.
I’ve never used Mercurial, but a simple one based on the explanations and my experience with Git:
Locating the branch a commit originated from.
If a git branch has been merged into (or rebased on) main or another branch, there’s no way to tell which commit came from which branch. But sometimes I’d really like that information to figure out what prompted a certain change. Without it, I need to use external tools like a ticketing system and hope the other developers added in the necessary information.
That seems to be the opposite of useful if a commit is initially pushed to a development branch, which is relatively standard practice; now you’re polluting the tree with data that’s purposefully ephemeral, and even potentially leaking internal information.
Also, I’d argue that such deep details do belong in another tool, rather than asking the source control tool perform triple duty by being a CR and issue tracker as well.
Some instances of one of the mercurial devs being a bully. It was a long time ago and I can’t remember the alias of the dev, but I do remember they had merge or commit rights - whatever those are called in mercurial. It felt like they had their own Linus but different. Whether they are still active or whether they still are like that, I dunno. Certainly hope they changed.
Dunno if the git mailing list was as toxic. Didn’t investigate that.
It could’ve been mercurial, but I’m glad that didn’t happen. Being shouted at in a mailing-list for fixing a bug doesn’t sound like fun. Also, the amount of CPU resources that would be wasted running a VCS in python would be phenomenal. And have fun trying to develop a project using a separate python version than supported by your python VCS.
Anti Commercial-AI license
Care to explain your comment for a layman?
From my limited experience mercurial is way more intuitive than git. The big one is named branches are a thing instead of an abstraction.
Python 10s of multiples more CPU cycles than git. It is an interpreted language: every instruction is read by another process, checked, and then run. Hit on the other hand is executed straight by the CPU. It has at least one layer of indirection less than python (the python interpreter may have multiple). That means it can be slower but it definitely uses more energy.
Since git is so popular, if it were instead mercurial, the energy requirements would be much higher for version control. Whether that will be noticeable on a bill is debatable. I haven’t run the numbers.
Regarding the different python versions. As mentioned before, there is a python interpreter. That interpreter is versioned and so is the python language. Many things are backwards compatible meaning something written in a higher version of the python language can be interpreted by a lower version of the python interpreter. The reverse is also true, so python interpreter with a higher version can interpret a python file using a lower version of the language.
Notice that I put “can” in bold. That’s because newer versions can deprecate certain features or parts of the language. So, if you’re writing a project in a different version of python, mercurial may or may not run depending on your version. Resolving that may not be as intuitive as one thinks.
I think those were he points you were referring to when you asked your question?
Anti Commercial-AI license
Surely it could be rewritten in Fortran if performance is really a concern.
Assembly is the true language of the gods, sir.
Anti Commercial-AI license
I don’t think it’s hyperbole to say a significant percentage of Git activity happens on GitHub (and other “foundries”) – which are themselves a far cry from efficient.
My ultimate takeaway on the topic is that we’re stuck with Git’s very counterintuitive porcelain, and only satisfactory plumbing, regardless of performance/efficiency; but if Mercurial had won out, we’d still have its better interface (and IMO workflow), and any performance problems could’ve been addressed by a rewrite in C (or the Rust one that is so very slowly happening).
Imagine if their VCS operations were 10s of times less efficient 😉
Anti Commercial-AI license
What do you mean by “are a thing?” Git has branches.
No, git has labels on heads of branches. Once the head moves you loose the information. It also makes for a more messy history, which I believe created the whole “rebase everything” philosophy to cope.
What information is “loosed” when another commit is made to the branch?
If I hand you a commit, you cannot tell which ‘branch’ it is on without searching the git history and hoping that you only get one answer. That’s a bummer if, for instance, you’re a github action and only get handed the commit. If it’s on the master branch, I want to do different things than if it’s a dev branch.
A commit all by itself doesn’t mean as much without context.
Why would I not want to be able to apply a commit to any arbitrary branch?
Also, GitHub is not git - it’s based on git. Any shortcomings it may have aren’t necessarily due to a flaw in git.
Luckily a commit points to its parent, which means the context is inherently present. What’s your point?
Nobody said that.
True enough.
Your claim appears to be that Mercurial binds commits to branches, and I’m explaining how I fail to see the advantage.
Git branches are very different to Mercurial branches. In git they’re similar to tags that move along with the head commit of that particular branch. In Mercurial every commit contains meta data indicating the branch it’s on. It also has a query language that lets you do sone quite neat things with selecting groups of commits based on their metadata, which can be useful in code reviews and similar.
That just sounds like an implementation detail.
Can you provide an example of something that’s possible in Mercurial, but not git?
I’ve never used Mercurial, but a simple one based on the explanations and my experience with Git:
Locating the branch a commit originated from. If a git branch has been merged into (or rebased on) main or another branch, there’s no way to tell which commit came from which branch. But sometimes I’d really like that information to figure out what prompted a certain change. Without it, I need to use external tools like a ticketing system and hope the other developers added in the necessary information.
That seems to be the opposite of useful if a commit is initially pushed to a development branch, which is relatively standard practice; now you’re polluting the tree with data that’s purposefully ephemeral, and even potentially leaking internal information.
Also, I’d argue that such deep details do belong in another tool, rather than asking the source control tool perform triple duty by being a CR and issue tracker as well.
Mercurial is written in Python, Git in C.
Given the number of git instances, had it been implemented in Python, a lot more CPU cycles / electricity would have been used.
Blah blah Mercurial is responsible for global warming.
I think it’s less user experience and more that mercurial is a lot more demanding hardware wise to do the same rough job?
What’s that a reference to?
Some instances of one of the mercurial devs being a bully. It was a long time ago and I can’t remember the alias of the dev, but I do remember they had merge or commit rights - whatever those are called in mercurial. It felt like they had their own Linus but different. Whether they are still active or whether they still are like that, I dunno. Certainly hope they changed.
Dunno if the git mailing list was as toxic. Didn’t investigate that.
Anti Commercial-AI license
If Mercurial were as popular as Git I would presume that it would be rewritten in C or Rust, but who can say.
I’m sure it could, but no one thinks it’s worth their time when Git is right there and does the same job.