News for hackers. Stuff that matters.
Re:A Git catastrophe cleaned up by mcherm on Wednesday December 21, 2016 @08:12AM (#13228790)
The author concludes by saying:

>I think I've written before that this profusion of solutions is the sign of a well-designed system. The tools and concepts are powerful, and can be combined in many ways to solve many problems that the designers didn't foresee.

I disagree. I consider this to be a failure of Git. The set of different options (normal merge, rebase, filter-branch, etc) is complex and not cleanly orthogonal which makes for a very messy "mental model". Even experienced experts would have difficulty finding the clear, simple way to solve this problem and those less experienced would have little chance of proceeding cleanly.

I really wish some tool other than Git had "won" the version-control race; I honestly believe Git to be the worst of the contenders in the most recent generation of version control systems (albeit better than the previous generation in important ways).

Re:A Git catastrophe cleaned up by deanCommie on Wednesday December 21, 2016 @08:25AM (#13228864)
Allow me to disagree with your disagreement.

Git fails often for the "basic" use cases. I won't lie. The number of options is intimidating for a beginner and one can easily get themselves into trouble. This is why there are Git guides and tutorials and UIs and they are all ultimately unsatisfying when you're a beginner.

However the use case discussed in this article is NOT a beginner use case. It is an advanced case and the fact that Git is an advanced tool that supports it (both natively with git-filter-branch, as the author found out, and ad-hoc-ly as was their original plan is a testament to the power of the system.

Tell me how you would better achieve the requirements that were the premise for this article in a different VCS?

Re:A Git catastrophe cleaned up by jasoncchild on Wednesday December 21, 2016 @08:52AM (#13229053)
I agree with your disagreement. Furthermore, I'm curious how this edge case could have been mitigated using an alternative tool? most of my VCS experience is with git, and a very little SVN.
Re:A Git catastrophe cleaned up by agentgt on Wednesday December 21, 2016 @11:39AM (#13230442)
As an experienced Hg user I will say what the author did would be about the same pain level in Hg (maybe even less if you use some extensions). Regardless it is probably less painful with whatever tool you are most familiar with.

I would argue the author probably could have even used SVN (not that I would recommend that at all) given he did some pretty manual scripting stuff (looping through commit ids etc).

Of course it his hard for me to tell with out seeing his exact repository (files).

Re:A Git catastrophe cleaned up by AstralStorm on Wednesday December 21, 2016 @11:53AM (#13230582)
In SVN, this case would completely explode into manually applying a big patch.
Re:A Git catastrophe cleaned up by Someone on Wednesday December 21, 2016 @05:36PM (#13233268)
"The easiest strategy in a case like this is usually to (go) back in time [...] That strategy wasn't available because X had already published the master with his back-end files, and a hundred other programmers had copies of them."

"a hundred other programmers had copies of them." isn't a problem/cannot happen with svn because svn uses a single master repository. Fix it, and everybody can fetch it.

That leaves the "going back in time" step. That isn't easy with svn. If you have a backup of your repository, you can create patches for the commits made after it, restore from backup, and replay those you want to keep.

If you don't have a backup, the svn administrator can use svnadmin to dump and restore revisions and remove them (http://superuser.com/a/315138). I think that will be a lengthy operation if your repository has lots of history. It also requires free space to create a copy of your reporpsitory. Disclaimer: I have never used this tool.

Re:A Git catastrophe cleaned up by saghm on Thursday December 22, 2016 @12:41AM (#13235138)
> If you have a backup of your repository, you can create patches for the commits made after it, restore from backup, and replay those you want to keep.

Maybe I'm just too young to have a good perspective on this (due to only becoming a developer after git was fairly well established), but I thought that version control itself is supposed to be your backup

Re:A Git catastrophe cleaned up by Someone on Thursday December 22, 2016 @05:52AM (#13236401)
A backup by necessity is a copy; with centralized version control as svn is, you don't have a copy of the repository, so you have to make one some way.

(Decentralized version control is only slightly different; if you lose the 'main' repository and don't have an exact clone (aka a backup), you may be able to glue together something from other repositories that is close to or equal to what you had, but there is no way to know for sure)

Re:A Git catastrophe cleaned up by y4mi on Thursday December 22, 2016 @04:50AM (#13236155)
it is for as long as your repository is undamaged.

its rare, but sometimes a repository can get damaged beyond repair. keeping it inside of a cloud storage directory like google drive, dropbox or similar makes it prone for fatal errors.

in such a scenario a backup of the full repository is required. in gits case, remote sources can fill the 'backup' role pretty easily, as everything gets pushed to a remote server. this is obviously not enough safety if you're a bigger enterprise, they'll need additional safety guards/backups, but its sufficient for most people.

Re:A Git catastrophe cleaned up by ams6110 on Wednesday December 21, 2016 @08:17PM (#13234038)
The edge case could be mitigated by having a pre-defined development workflow and not seat-of-the-pants cowboy commits of "backend" and "frontend" changes that were in reality interwoven. Or even a basic code review where someone hopefully would say "WTF are you doing!?"
Re:A Git catastrophe cleaned up by SOLAR_FIELDS on Wednesday December 21, 2016 @08:23PM (#13234051)
Agree - this should have been a single push and dev should have squashed commits together where it makes sense to. I get in the dev stage you might be all over the place but a well-designed codebase with separation of concerns should have allowed the dev to group like commits into single areas and brought it down to something more manageable like 20 commits instead of 400.
Re:A Git catastrophe cleaned up by ap22213 on Wednesday December 21, 2016 @12:59PM (#13231127)
DVCS is fundamentally a simple concept. And, every use case should be possible with a series of elemental operations. Any 'advanced' use cases can and should just be 'macros'.
Re:A Git catastrophe cleaned up by jack9 on Wednesday December 21, 2016 @01:32PM (#13231428)
> DVCS is fundamentally a simple concept

It is, if you're going to simplify it so far as to avoid the problemspace by nomenclature. It's just transforming nonlinear events into a linear sequence! I guess multithreading is also a fundamentally simple concept, in that vein.

Re:A Git catastrophe cleaned up by ap22213 on Wednesday December 21, 2016 @06:24PM (#13233541)
I don't mean to minimize the effort that went into Git. But, have you ever looked at the source code? It's like someone dropped the kitchen sink into the global namespace. The whole code base is full of premature optimizations. And, there's a lot of low-level infrastructure code coupled in with the core logic.

I know abstraction is out of fashion these days, but it may have helped a little in organizing things. Abstraction, when used properly, can almost always make complicated things more simple.

Basically, if a regular person had created Git, and not a demigod, would it even have become what it is?

Re:A Git catastrophe cleaned up by Hello71 on Wednesday December 21, 2016 @06:42PM (#13233619)
we would have hg.

as a user, I'll take premature optimizations over slow as balls any day.

Re:A Git catastrophe cleaned up by ap22213 on Wednesday December 21, 2016 @06:51PM (#13233666)
The problem with premature optimization is that most of it has little effect on overall performance. Software performance almost always follows a Pareto distribution.

But, wtf do I know, I'm just some regular person.

Re:A Git catastrophe cleaned up by SOLAR_FIELDS on Wednesday December 21, 2016 @08:25PM (#13234067)
It's hard to tell - did the premature optimizations allow Git to extend way beyond the initial release with little worries of performance? It's not something that's easily quantifiable.
Re:A Git catastrophe cleaned up by kobeya on Wednesday December 21, 2016 @01:11PM (#13231262)
Not sure why you are being down-voted. What you describe is the philosophy of e.g. monotone, which works quite well.
Re:A Git catastrophe cleaned up by z3t4 on Wednesday December 21, 2016 @02:00PM (#13231660)
simple systems can appear complexed because there are many buttons. You often only have to use just a few buttons, where the rest are for special ocations.
Re:A Git catastrophe cleaned up by ksk on Wednesday December 21, 2016 @11:37AM (#13230427)
What is advanced about a partial checkin?
Re:A Git catastrophe cleaned up by Ajedi32 on Wednesday December 21, 2016 @11:50AM (#13230555)
Nothing. The author stated though that the merge had to be done:

> without losing the commit history and messages

Otherwise a "partial checkin" (which was exactly what "co-worker X" did) would have worked fine.

Re:A Git catastrophe cleaned up by ksk on Wednesday December 21, 2016 @12:37PM (#13230936)
Ah okay, my bad.. I was mis-reading the article. I get it now. The topic branch commit history where the co-worker built up the branch would be lost if you just tacked on the leaf node to the master branch..
Re:A Git catastrophe cleaned up by nolemurs on Wednesday December 21, 2016 @08:51AM (#13229037)
I see what you mean about the messy mental model, and I do 100% agree that in a well designed system most problems should have one obvious best solution. That said, I'm not sure that's a fair criticism of git.

For instance, in this case, as mentioned below, the author of the article should have just reverted the commit where he checked out the files, then done a normal merge. If you're thinking of everything at the commit level, it's pretty much the obvious thing to do. The first obvious thought is to just backtrack (as mentioned in the article), then once you realize that's off the table (since the code is out in the wild) the very next obvious idea is to revert. Revert is what you do when you can't just undo. It's not even as if his commit involved any merges, so the revert is super easy.

I guess I just don't agree that experts would have a hard time finding the simple solution - it was the first thought that popped into my head, and I read the article mostly looking for the explanation for why he didn't just do it.

While git does provide near complete control, you almost never need to use more than the basics, and it doesn't have to be confusing.

EDIT: Just to make very clear why I think the solution is obvious, the first thought that I think will occur to almost anyone is, "if I can just bring the master branch back to its prior state, then I can merge like usual". The beauty of git is if you can form a coherent idea like "bring the master branch back to its prior state" then you can probably do it, and it probably isn't hard. The mistake the author made was to have that thought, and then instead go off down a rabbit hole, and throw out the original simple idea.

Re:A Git catastrophe cleaned up by jdmichal on Wednesday December 21, 2016 @12:45PM (#13231010)
If you revert, how do you guarantee that the final result is identical to the previously deployed and tested version?
Re:A Git catastrophe cleaned up by cyberpunk on Wednesday December 21, 2016 @02:44PM (#13232013)
He'd need to revert like 400 commits!

Woah that's a real messy one. I hope everyone walks away with a feeling that merging 400 commits in what sounds like a CD env is asking for trouble...

I'm probably not going to earn extra ninja points here, but in that situation I'd have turned off the deploy jenkins job, force pushed master back to sanity, squashed these commits into a sensible amount in a new branch, rebased it from master and gotten someone (several someones) to go over the pull rq which should be able to merge without conflict. (Fix conflicts in branch!)

Maybe you'll have to get your devs to make a new branch locally and cherry pick their stuff back in, but urgh; I think the solution in the article would have taken me ages to RTFM enough to work it out...

The lesson here is merge less, more often, or pay more attention when doing evil things like this should you get into that kind of situ...

Re:A Git catastrophe cleaned up by jdmichal on Wednesday December 21, 2016 @03:13PM (#13232224)
If you don't care about the history, you can just squash the merge. Otherwise, it's not like those commits on the topic branch cost you anything, and they might have important context.

I do agree though that my first step would have been merge from master to the topic, or rebase the topic onto master.

Re:A Git catastrophe cleaned up by nolemurs on Wednesday December 21, 2016 @08:48PM (#13234158)
After you merge everything you could just diff the originally committed files against the deployed and tested versions. If there are any differences, then those need testing!

Presumably if you're merging a bunch of other changes in anyway, you're going to need to do a bunch of testing in any case, that's just an inevitable result of splitting the deployment into two phases.

Re:A Git catastrophe cleaned up by artpepper on Wednesday December 21, 2016 @01:08PM (#13231224)
But how do you revert a commit if there were subsequent commits that changed the same files? (If I'm reading the original post correctly.)
Re:A Git catastrophe cleaned up by joatmon-snoo on Wednesday December 21, 2016 @02:08PM (#13231728)
I think grandparent meant a "git revert", which is actually a distinct operation (introduce a commit which is the inverse of a given commit) from resetting a branch pointer.
Re:A Git catastrophe cleaned up by nolemurs on Wednesday December 21, 2016 @08:56PM (#13234191)
Well, in the worst case, you can literally revert all subsequent commits, merge the topic-branch, then reapply the commits.

In most real situations you'll probably find that only a small number of commits actually need to be reverted and reapplied, especially if your team is good about having reasonably self-contained commits.

If you're concerned about filling the git logs up with noise, you can always do use rebase to combine any revert/re-revert commits into single log entries.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @09:31AM (#13229353)
> The set of different options (normal merge, rebase, filter-branch, etc) is complex and not cleanly orthogonal

All of those commands you just listed are clearly defined and serve different purposes. In other cases, most commands or command flags simply help the user do something in an automated fashion that you could do by typing each specific command out (i.e., git pull --rebase). Git's core tooling is mainly centered around graph manipulation, everything else has been added due to convenience. And quite frankly I've never really understood the criticism people levy at git for being "complicated."

It's stupidly simple at the end of the day, especially compared to the hodgepodge of features that other VC's provide, all of which don't really work together and are designed to cover some gap in what should be handled in the core design of the VC (I'm looking at you, Mercurial branches and bookmarks). All tools require you to be familiar with them. There's no getting around that.

> Even experienced experts would have difficulty finding the clear, simple way to solve this problem

I'm not sure how you can possibly say that, the answer is pretty obvious to a lot of us reading this article. This just feels like baseless whining.

There is a litany of literature out there that could have easily pointed the author to a well defined, accepted, and documented solution.

Re:A Git catastrophe cleaned up by avmich on Wednesday December 21, 2016 @10:56AM (#13230049)
> It's stupidly simple at the end of the day

That reminds me a joke. On a particularly convoluted math lecture the professor writes on the whiteboard and explains at the same time: "from here we can state that, obviously..." He suddenly stops, slowly turns the head down, keeps mumbling "so we can obviously...". He slowly walks in the room, trying to catch the thought, then leaves the room... Some minutes pass. Then he comes back, with head up, widely open eyes and confidently continues - "Yes, this is completely obvious - so from here we can easily get the following conclusion."

Git has a lot of nice explanations. However it's either a particularly edgy case, or all those great explanations somehow fail to easily conduct those core "stupidly simple" ideas forward to actual Git beginners. At least to some of those beginners - not an insignificant number.

Re:A Git catastrophe cleaned up by notheguyouthink on Wednesday December 21, 2016 @11:27AM (#13230318)
I mean, i just find any defense of Git's "simplicity" hilariously unobservant. I'm sure to many Git is perfectly simplistic in design and UX. It is clear, and well thought out.

But, for many others, Git is a confusing mess. And, i should think, nearly everyone has heard someone(s) call Git confusing. I don't think it is up for debate that Git is known for being confusing.

Who cares if it "is" confusing or not - that's relative. Most things aren't confusing if you've learned the subject matter.. right? It is known for being confusing though, and that is clearly to people who don't know Git. Ffs, there wouldn't be debates about Git's UX every month on HN if it was so utterly non-confusing, haha.

Some things are very simple and easy to learn, use, and adopt. Git is not one of them, clearly and objectively.

Re:A Git catastrophe cleaned up by oxymoron on Wednesday December 21, 2016 @12:12PM (#13230731)
One thing often missing from the debate is this: version control is a fundamentally complex problem. In my view, it's a unfair to blame this complexity on the tools. The cockpit of an airplane is famously complex not because Boeing and Airbus wanted it that way but because flying a plane is complex, and because they couldn't make it any simpler.

Git has a fundamentally sound architecture, and with a correct mental model of what's going on you'll be able to deal with pretty much any situation. Nevertheless, you won't get beyond the simple use cases if your conceptual picture is incorrect, but that'll be the case for any VCS. I don't believe that git is necessarily superior to mercurial or take-your-pick, but let's not disregard that we're dealing with something difficult.

Re:A Git catastrophe cleaned up by hyperpape on Wednesday December 21, 2016 @12:18PM (#13230782)
Version control is complicated, but git adds a whole nother layer of bullshit on top of it. Why do you use checkout to change a branch, create a branch and revert a file? Not because version control is hard, but because as a CLI, git does many things wrong (example from http://stevelosh.com/blog/2013/04/git-koans/).
Re:A Git catastrophe cleaned up by cyphar on Wednesday December 21, 2016 @12:44PM (#13231004)
> Why do you use checkout to change a branch, create a branch and revert a file

git checkout lets you check out files from a particular point in time. If you don't specify a path, it will check out every file. If you don't specify a point in time, it defaults to HEAD (like every git command). I fail to see what is confusing about that. You're not "reverting" changes to a file, you're just checking out a version of the file from the history.

`git checkout -b` is shorthand, and is shorthand that I personally don't use.

Re:A Git catastrophe cleaned up by user5994461 on Wednesday December 21, 2016 @12:31PM (#13230892)
> One thing often missing from the debate is this: version control is a fundamentally complex problem.

No, it's not!

I've been teaching SVN to Electronics Engineers, Designers and other folks who have never used version control before. It's always been very straightforward. They'd be able to use it effectively after a quick tutorial and demo, with a few notes of advice.

I've been teaching Git recently... until I gave up. It's a giant WTF clusterfuck. Git is the ultimate failure in simplicity and user experience.

Just use SVN (it works on git repo).

Re:A Git catastrophe cleaned up by cyphar on Wednesday December 21, 2016 @12:46PM (#13231016)
> No, it's not!

Yes it is. SVN is so "simple" because it doesn't have many of the features needed by large teams working on code. It's simply not fit for purpose.

> Just use SVN (it works on git repo).

Unless you need branches (and merge them), code that doesn't get silently corrupted, a proper history of all changes, the ability to work offline without connecting to a server. Y'know, the problems that git was built to solve.

Re:A Git catastrophe cleaned up by CaptSpify on Wednesday December 21, 2016 @03:45PM (#13232476)
> Unless you need branches (and merge them),

I use svn to merge branches every day. I do agree that git is probably more useful for more complicated setups, but svn is very capable of branching and merging.

Re:A Git catastrophe cleaned up by cyphar on Wednesday December 21, 2016 @04:26PM (#13232761)
> I use svn to merge branches every day.

Has it gotten any better with conflicts? From what I heard a few years ago, it's still absolutely shocking (if two people touch the same file you can forget about merging your branch).

Re:A Git catastrophe cleaned up by CaptSpify on Wednesday December 21, 2016 @05:39PM (#13233288)
I typically don't have any issues, but I guess that would heavily depend on your workflow.
Re:A Git catastrophe cleaned up by chousuke on Wednesday December 21, 2016 @01:14PM (#13231286)
My problem with Subversion is that it only really works well for trivial cases where you have linear and non-overlapping changes. It's great for configuration management, but not much else.

If you have more than 1 person doing simultaneous changes to a repository which might overlap, SVN becomes a pain to use because its merge handling is basically "Oh, there's a conflict. Here is the whole mess, good luck!" and you lose access to all the tools SVN provides for normal use.

Git (and hg) treat merges as an everyday thing, and a merge conflict does not leave you unable to do basic things such as commit or stage changes with the index, which is a huge help when resolving large conflicts.

Re:A Git catastrophe cleaned up by slavik81 on Wednesday December 21, 2016 @06:28PM (#13233559)
I've met people who have given up entirely on merging SVN branches. They just copy changes around manually. Coming from git, I thought their overly-cautious usage of svn was ridiculous. My attitude changed when I ran into revprop issues merging my changes and struggled to discover why some commits seem to randomly be missing svn:mergeinfo. I only had so much time to deal with the issue, so eventually I gave up on fixing the problem and just generated patches to apply manually to the other branch.

One thing I always worried about when experimenting with commands in SVN was that I'd permanently screw up the server. With git, I was comfortable in the knowledge that as long as I didn't push, at worst I would screw up my local repository. Even better, I could just make a copy of that local repository before trying something I wasn't sure about. I haven't had to do that in a very long time, but it was nice while I was learning.

git is not the first version control I tried, but it's definitely the first that really made sense to me. Sure, there's a bunch of badly named commands to memorize, but the underlying concepts they represent are simple.

Re:A Git catastrophe cleaned up by vertex-four on Wednesday December 21, 2016 @02:06PM (#13231703)
Personally, I find darcs lovely to use. It avoids complexities like branches (you already have a filesystem - if you want to work on multiple things, you can have multiple checkouts) and provides a simple UI that shows you what you're doing every step of the way by default.
Re:A Git catastrophe cleaned up by bsder on Wednesday December 21, 2016 @10:25PM (#13234500)
Try Mercurial. It's mental model maps more directly to SVN.

I have successfully taught it to people like CEO's and CTO's with very little difficulty.

The problem with Git is that it has 3 areas of state (working-index-repo) instead of 2 (working-repo).

That makes things HORRIBLY complicated for the 99% of useful use cases.

Re:A Git catastrophe cleaned up by marcinkuzminski on Thursday December 22, 2016 @04:40AM (#13236100)
+ there are nice tools like RhodeCode to work with Mercurial repositories.
Re:A Git catastrophe cleaned up by jefurii on Wednesday December 21, 2016 @01:00PM (#13231132)
Git is not "simple" from the point of view of new users. But it is "simple" from the point of view of the programmers of Git. There's the graph structure and some tools to manipulate it. It doesn't do much to hide that.

The underlying code of the application I'm writing would be much "simpler" if I didn't have to add all kinds of features to make it easier for the user.

Also, Git is not so much a VCS application as a framework for version control.

Re:A Git catastrophe cleaned up by skarap on Wednesday December 21, 2016 @11:38AM (#13230433)
> "from here we can state that, obviously..." He suddenly stops, slowly turns the head down, keeps mumbling "so we can obviously...". He slowly walks in the room, trying to catch the thought, then leaves the room... Some minutes pass. Then he comes back, with head up, widely open eyes and confidently continues - "Yes, this is completely obvious - so from here we can easily get the following conclusion."

I had a lecturer who did this! With the only difference being he didn't leave the room, he would just stand there speechless with a poker face and then - 0.5-1 minute later - he'd say "well, this is obvious".

SUDDENLY, during the exams he expected us to explain the obvious.

Re:A Git catastrophe cleaned up by buzzybee on Wednesday December 21, 2016 @04:05PM (#13232607)
There is a good complementary story to this, of the math professor who is asked how to solve a math problem by a student. The professor pauses, then says the answer. The student asks again, "But how do you solve it?" The professor pauses again, says the answer again. When the student protests, the professor says, "I already solved it two different ways! What more do you want?"
Re:A Git catastrophe cleaned up by CJefferson on Wednesday December 21, 2016 @11:35AM (#13230405)
My problem with git is that it has a simple model, with a horrible GUI on top.

For example, what does the following command do?

    git checkout a/b
I've had confused users manage to produce 3 different outcomes from this command:

* Get a clean copy of the file a/b from the current branch

* Checkout the branch b from remote a

* Checkout the local branch 'a/b'

By confusing where you can use particular types of arguments, I've found students will often end up in these situations (in particular lots seem to end up with local branches called 'remote/branchname', or files called 'remote/branchname'), which tends to lead to massive confusion.

Life would be much better if git was a more direct mapping to it's underlying model, and didn't try to be so clever about guessing what users wanted.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @11:54AM (#13230589)
You asked what the following command did, and it will do plainly what you tell it to, but you're treating the fact that a/b can be anything you make it to be somehow a fault of checkout, and all because it decided to be nice and try to guess what you really want. I don't understand that line of thought.

The git documentation clearly states what happens in your scenario:

> ARGUMENT DISAMBIGUATION

> When there is only one argument given and it is not -- (e.g. "git checkout abc"), and when the argument is both a valid <tree-ish> (e.g. a branch "abc" exists) and a valid <pathspec> (e.g. a file or a directory whose name is "abc" exists), Git would usually ask you to disambiguate. Because checking out a branch is so common an operation, however, "git checkout abc" takes "abc" as a <tree-ish> in such a situation. Use git checkout -- <pathspec> if you want to checkout these paths out of the index.

See here: https://git-scm.com/docs/git-checkout#_argument_disambiguati...

If you somehow manage to purposefully name things in a confusing manner, you can tell git exactly what you want it to grab at any point in time. I don't possibly see how this is a fault of the tooling.

Re:A Git catastrophe cleaned up by CJefferson on Wednesday December 21, 2016 @12:38PM (#13230950)
We might just have different points of view here.

Obviously one can read the documentation carefully and read what's going on, but in practice most users don't. Also, to be fair to users, they often don't know what they don't know -- they aren't aware they should be reading how checkout does argument disambiguation when they start getting weird error messages.

On the other hand, if git didn't allow '/' in branch names, except are a remote/branchname seperator, then we would know what '/' meant -- in practice this is what almost everyone does in practice anyway (there may be a deeper issue here I'm not aware of).

Similarly, if git didn't have commands which could take either a <tree-ish> or a <pathspec>, say have "checkout-file" (that's an awful name, but I'm sure we can find a better one), then there would be no need to have this special bit of documentation, and describe to people how to get around the issue.

My experience of teaching is that git guessing what people want makes learning git harder, as they have to learn what are the fundamentals, and what is git being "helpful".

Re:A Git catastrophe cleaned up by jakub_g on Wednesday December 21, 2016 @05:28PM (#13233220)
Yep there's a lot of best practices you learn after using git for a while that is not obvious initially, like not using '/' in branch name (though, I used to have a coworker who always named branches like 'fix/something' or 'feat/something' -- well at least there was a pattern there).

I also don't use most of the git commands directly, I have a bazillion of aliases that are shorter and/or more intuitive.

To be honest, there were some changes for the better in the CLI. For instance 'git push' no longer defaults to the crazy 'matching' behavior, but 'simple' instead.

I guess the problem is perhaps that most of the time, people get used to the quirks and don't report them (maybe I'm mistaken).

In fact, if git bug tracker was hosted on GitHub, I'd probably be more active in reporting and discussing things. I'm not an old school mailing list kind of guy I guess, and maybe not only me (but I believe many git maintainers would say, it's a feature that barrier of entry is not low).

Re:A Git catastrophe cleaned up by mjrbrennan on Wednesday December 21, 2016 @08:50PM (#13234168)
I always use '/' in the branch name and have never had any issues. Can you explain why this would be an issue?
Re:A Git catastrophe cleaned up by CJefferson on Thursday December 22, 2016 @04:07AM (#13235963)
The only issue I am aware of is that beginners often assume, based on basically every tutorial, that / has a special meaning, it is used to denote remote/branchname.
Re:A Git catastrophe cleaned up by pyre on Wednesday December 21, 2016 @11:44AM (#13230498)
To be fair, issues like this are really only UI issues with some git commands, not necessarily git as a whole. The GP post was probably lamenting a much deeper issue with the design of git.
Re:A Git catastrophe cleaned up by blktiger on Wednesday December 21, 2016 @09:59AM (#13229582)
Mercurial bookmarks are equivalent to git branches, but Mercurial branches have no equivalent in git. In Mercurial, branches give you a way to track the branches a commit is a part of which is good for long-running branches (I think of things like master, maybe a long running refactor or major feature branch) while bookmarks are great for the more normal workflow of small, focused, feature branching. Neither of those are designed to cover a gap in the core design, they are a _feature_ of the core design that git doesn't even have.
Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @10:18AM (#13229744)
>branches give you a way to track the branches a commit is a part of which is good for long-running branches

I think you have a slight misunderstanding on the differences between git and mercurial, as git absolutely allows you to do this. Mercurial tends to track this information in a way where it actually limits telling you what branches a commit is contained in. Git will tell you straight up which branches lead back to a commit (i.e., being contained in them). Mercurial tends to only give you immediate, direct ancestors, any kind of complicated history and Mercurial can't be bothered to actually to dive in and tell you what branches a commit is really apart of.

That seems to be strangely counter-intuitive for "long running branches."

Git doesn't need an equivalent of Mercurial branches and bookmarks, because git branches do everything both of those mercurial features do and more, in a far more lightweight and efficient manner contained in a clean, singular feature.

Re:A Git catastrophe cleaned up by AlexMax on Wednesday December 21, 2016 @12:17PM (#13230768)
> Git doesn't need an equivalent of Mercurial branches and bookmarks, because git branches do everything both of those mercurial features do and more, in a far more lightweight and efficient manner contained in a clean, singular feature.

Not quite everything. Since Mercurial branch names are baked into the commit, if you wanted to know which branch a commit was originally part of, you can find out.

Git does not support this. If two branches have parent commits in common, it technically belongs to both branches.

There is a valid conversation to be had on if this feature is actually necessary or makes sense in the context of a DVCS, but git branches are not a full substitute for Mercurial branches.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @01:32PM (#13231429)
> If two branches have parent commits in common, it technically belongs to both branches.

It belongs to both branches as well in Mercurial, it just hides that information from you. An astoundingly bad idea, no? I'm not sure how mercurial hiding information from you is a "feature" in any sense of the word.

Re:A Git catastrophe cleaned up by binarycrusader on Wednesday December 21, 2016 @02:44PM (#13232023)
Hiding or encapsulating information is arguably part of the very nature of an abstraction; the CLIs provided by git and Mercurial could be considered an abstraction of the implementation details of the respective technologies.

As such, I fully expect each tool to hide some amount of information so that I don't have to think about the details.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @03:34PM (#13232387)
There's no easy quick way to represent the actual state of the commit. It's far easier in git because it's the only way to do it. Furthermore, then information being "encapsulated" can actually become stale or misleading in Mercurial.
Re:A Git catastrophe cleaned up by babyrainbow on Wednesday December 21, 2016 @12:10PM (#13230717)
Mercurial records in every commit, that branch it was made. It is part of it's identity. That is what the parent is talking about. Git does not do this. Because git does not have this concept of named branches.

In other words, Mercurial has feature branches, while git has developer branches. This gives much more possible workflows in case of Mercurial.

>Mercurial tends to only give you immediate, direct ancestors, any kind of complicated history and Mercurial can't be bothered to actually to dive in and tell you what branches a commit is really apart of...

http://stackoverflow.com/questions/7166011/mercurial-find-al...

Is that what you are talking about?

Mercurial contains vastly more querying capabilities in the form of revsets. No such thing exists for Git.

If you go head to head with git vs mercurial, git will loose pathetically.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @01:45PM (#13231540)
>Git does not do this. Because git does not have this concept of named branches.

It doesn't pre-bake the information in the commit, because it's entirely useless information to bake into a commit; and even in the case of Mercurial can paint the wrong picture about the nature of a commit given branches that it's on.

>This gives much more possible workflows in case of Mercurial.

That is the exact opposite of what it gives you. I'm not even sure how you possibly arrived at that conclusion.

>Mercurial contains vastly more querying capabilities in the form of revsets.

Git doesn't need a query language, because you can literally do everything revsets will give you with git log and then maybe some very elementary bash script knowledge. You are literally arguing that Mercurial having its own arbitrary DSL is somehow better than git being able to seamlessly use popular tooling with conventional command line syntax; which seems to be at odds with the whole "mercurial is easier to use." I take extreme issue with your claim that Mercurial has "vastly" more querying capabilities and then you not even give one measly example.

Re:A Git catastrophe cleaned up by babyrainbow on Wednesday December 21, 2016 @07:32PM (#13233860)
>because it's entirely useless information to bake into a commit;

I have found it very useful in untangling a complex history. You might not see the value in it becuase git does not care to maintain a truthful history, but promotes building a "clean" history. It makes sense to do that if you are maintaing somethign like linux kernal. But for smaller projects, maintaining a truthful history is much more valuable.

So I would say that it is extremely valuable information in the context of Mercurial.

And there are other version control systems that follow similar model. Take a look at the '3.3 Branches' heading in another fantastic version control system called 'Fossil' here [1].

>That is the exact opposite of what it gives you. I'm not even sure how you possibly arrived at that conclusion.

Well, Mercurial supports git's branching model and a lot of others. I am not sure how that is not clear.

>Git doesn't need a query language...

Of course. It is not meant to be used by mere mortals..

>because you can literally do everything revsets will give you with git log ...

Are you seriously saying that using command line flags is more powerful and easier than using a query language that lets you use arbitrarily expressions to query a data set?

> I take extreme issue with your claim that Mercurial has "vastly" more querying capabilities and then you not even give one measly example.

Checkout the link I mentioned in my earlier comment.

This is the manual page for revsets [2]. Please take a look.

[1] http://www.fossil-scm.org/fossil/doc/trunk:2012-01-01/www/fo...

[2] https://www.mercurial-scm.org/repo/hg/help/revsets

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @09:04PM (#13234215)
>But for smaller projects, maintaining a truthful history is much more valuable.

Elaborate.

>Mercurial supports git's branching model and a lot of others.

Except, it doesn't completely.

>Are you seriously saying that using command line flags is more powerful and easier than using a query language that lets you use arbitrarily expressions to query a data set?

Yes, because command line flags are ubiquitous in nearly every single tool, versus an arbitrary DSL that has no convention behind it, or can be easily parsed by other tools in the same ecosystem.

> Please take a look.

You seem to be under the impression that I have not or do not use Mercurial. You would be mistaken. Both of those pages do not lend support to your claim that the ability to "query" (with or without a DSL) the history graph is somehow superior in Mercurial. They merely document the feature, but do not draw any meaningful comparisons highlighting what it can do that git log or even git rev-list (which git log uses) can't.

Re:A Git catastrophe cleaned up by babyrainbow on Thursday December 22, 2016 @12:29AM (#13235085)
> Elaborate

For example, to answer questions like "What feature was this commit part of, originally". "How and where did the merges happened?". To answer these questions months after the merges happened, even after you did't think that you would need to answer these questions, something like the workflows mercurial is essential.

>Except, it doesn't completely.

Elaborate?

>Yes, because command line flags are ubiquitous in nearly every single tool

Ok. But that does not mean that it is powerful enough and can be a replacement for or better than a proper query laguage..

> arbitrary DSL that has no convention behind it

What convention? I am not getting you.

>can be easily parsed by other tools in the same ecosystem.

Parse what exactly?

>Both of those pages do not lend support to your claim that the ability to "query" (with or without a DSL) the history graph is somehow superior in Mercurial. They merely document the feature, but do not draw any meaningful comparisons highlighting what it can do that git log or even git rev-list (which git log uses) can't.

Oh it does support it plenty. Take a look at the vocabulary supported by revsets in form of intuitive and easy to remember predicates. I don't think you are really impartial if you are not convinced by it.

Re:A Git catastrophe cleaned up by justinlaster on Thursday December 22, 2016 @10:12AM (#13237706)
>to answer questions like "What feature was this commit part of, originally"

Neither system will answer that. If you're relying on branches to tell you what feature sets changes belong to, you should be adding that to your commits.

>"How and where did the merges happened?"

Git will do this faster and in a more correct manner. In a complicated history graph, Mercurial will actually hide information from you if you try to query it and sometimes even mislead you. I'm starting to think you haven't used either system extensively.

>Parse what exactly?

Arguments and output.

>Oh it does support it plenty.

It does not. If you can't give an example, you can just admit that you don't know what you're talking about.

Re:A Git catastrophe cleaned up by babyrainbow on Thursday December 22, 2016 @12:17PM (#13238682)
>Neither system will answer that....

I am not sure what you are talking about. Every change set in Mercurial contain the branch in which it was made. Even after a merge, there is a clear distinction about the commits made in a certain branch.

I think you might be thinking of rebased change sets. In that case, you would be right.

>Git will do this faster and in a more correct manner..

Please show an example. I would also like to see an instance where Mercurial hiding information from you and giving misleading answers to your queries.

>Arguments and output.

But it is supposed to be used by people. So it should be first human friendly. And there is nothing stopping you from parsing output of mercurial commands. And what is the use case of parsing arguments? Why did you think so? Mercurial has even a template feature letting you format the output in any way you want. I am not sure, it seems to me that you are not making a whole lot of sense..

>If you can't give an example, you can just admit that you don't know what you're talking about.

There are some examples at the bottom of the revset page I linked. Knock yourself out. And do share some examples of your claims, because your last commits contained enough stuff to doubt your experience..(stuff about conventions and DSLs, what was that again?)

Re:A Git catastrophe cleaned up by justinlaster on Thursday December 22, 2016 @11:55PM (#13242934)
> I would also like to see an instance where Mercurial hiding information from you and giving misleading answers to your queries.

A branch with two heads. Two branches that have the same name. Which commit came from where? What happens if that branch was merged into the other? Or what happens if only one got merged into a "mainline" branch, while the other one was reverted else where. It's useless information at best, and misleading at worse.

>But it is supposed to be used by people. So it should be first human friendly.

You're going to claim a DSL that you have to research is somehow easier to use than simple command line arguments that have decades of convention behind them? Odd.

Git allows you to format output as well. Not sure why you felt the need to bring that up. Again, unless you've extensively used both systems I'm not sure why you feel the need to argue because it's making you look foolish.

>There are some examples at the bottom of the revset page I linked.

And absolutely none of them help your argument.

Re:A Git catastrophe cleaned up by babyrainbow on Friday December 23, 2016 @03:16AM (#13243609)
> It's useless information at best, and misleading at worse.

It seems useless to you because you see it from a git viewpoint. It is clear when you say that "Two branches that have the same name". It is not "two branches", but one branch with two heads. In Mercurial, a Branch is a set of commits. That view is incompatible with the thing that git call "branches".

If you think about it, Mercurial's implementation of a Branch is closer to the idea of a "Branch". As I told earlier, Mercurial branches are "Feature" branches". I am not sure if you have gone through the fossil doc page I linked earlier. When you see it like that, it makes complete sense that a Branch can have any number of heads. Say, the second head containing a different implementation of the same feature.

(God I miss Mercurial)

>Which commit came from where? What happens if that branch was merged into the other? Or what happens if only one got merged into a "mainline" branch, while the other one was reverted else where. It's useless information at best, and misleading at worse.

These questions are the result of trying to make sense of Mercurial branches in a GIt way..

>what happens if only one got merged into a "mainline" branch, while the other one was reverted else where.

Again, this question is a result of you seeing mercurial branches in a git way. Because git define a branch as the set of commits starting from a "head", the idea of merging only one of the heads does not make sense to you.

But you can do the same with git, right. You can move back couple of commits from a head and create a new head by starting committing from there. Only that in git, the previous head would be hidden. And you will have to go to the reflog to dig them up. But in Mercurial, things are much clearer and exposed (contrary to your accusation of it hiding and misleading).

So again, it feels misleading to you because it is different from git. It is very consistent in conforming to its on model.

>You're going to claim a DSL that you have to research is somehow easier to use than simple command line arguments that have decades of convention behind them? Odd.

I am not at all getting you here. "command line arguments that have decades of convention"? What exactly does that mean? And what is the thing about "a DSL that you have to research"?. You don't have to look up command line arguments of git? And you call git's command line arguments simple?

>Again, unless you've extensively used both systems I'm not sure why you feel the need to argue because it's making you look foolish.

I didn't claim that git does not allow you to format the output, but just that Mercurial allows you to do that so that your argument about easily parseable output is moot.

Re:A Git catastrophe cleaned up by nickez on Wednesday December 21, 2016 @10:06AM (#13229633)
Could you maybe specify better how this is implemented in hg so that I can understand why it would be better than:

    git branch --contains <commit>
Re:A Git catastrophe cleaned up by rcthompson on Wednesday December 21, 2016 @10:48AM (#13229978)
When you make the commit, hg records in the commit which branch you were on when you made it. It becomes a permanent part of the commit. Regardless of whether you later merge or even delete that branch, the association between that branch and that commit is still there.

I personally don't understand the use case, and prefer git's way of handling things, but I don't rule out that other people find it useful.

Re:A Git catastrophe cleaned up by aidenn0 on Wednesday December 21, 2016 @11:43AM (#13230490)
One use case is given branch X, tell me what the branch looked like N commits in the past. Git cannot tell you this because all parent commits are equal. DVCS workflows tend towards lots of short-lived branches where it is less useful (which is why hg has bookmarks).

It can also just simplify certain things. I can tell by checking if a commit is reachable from e.g. the v1.2 bugfix branch but not from master that the commit was post the 1.2.0 release to fix a bug.

With hg branches you can just see that the commit was made the the v1.2 bugfix branch. This is very minor, but my experience with hg is that there are dozens of these minor niceties that are why a lot of hg users are still around despite git having clearly won the popularity contest.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @12:02PM (#13230654)
>One use case is given branch X, tell me what the branch looked like N commits in the past.

What am I not understanding here? You definitely can go N commits in the past on each branch, and even any commit. And if you rewrite history you can even use the reflog to really tell what the branch was like (as long as it hasn't been cleaned out).

Re:A Git catastrophe cleaned up by stevelosh on Wednesday December 21, 2016 @12:50PM (#13231050)

    ┌─────┐◀──────── master
    │Merge│◀──────── bugfix
    └▲───▲┘
     │   │
     │   │
     │  ┌─┐
     │  │B│
     │  └▲┘
    ┌─┐  │
    │A│  │
    └▲┘  │
     └───┤
         │
    ┌────────┐
    │Ancestor│
    └────────┘
Which branch was commit `B` made on? What did the `bugfix` branch look like one commit ago?
Re:A Git catastrophe cleaned up by grzm on Wednesday December 21, 2016 @01:09PM (#13231227)
Nice use of Unicode! Do you have a tool to help you construct a diagram like this?
Re:A Git catastrophe cleaned up by sampo on Wednesday December 21, 2016 @01:29PM (#13231407)
If you were in master when you merged bugfix in ("git merge bugfix"), then you can

  git cat-file -p master
and see which commit, A or B, is listed as the first parent. This belongs to the master.
Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @02:02PM (#13231677)
> Which branch was commit `B` made on

You can do some basic heuristics to figure it out, but I'm not sure what the point of knowing this is.

>What did the `bugfix` branch look like one commit ago?

`git checkout bugfix; git log bugfix^1`

Re:A Git catastrophe cleaned up by zck on Wednesday December 21, 2016 @12:51PM (#13231057)
In the case of merges, how would you tell which parent to look at? Branches might have been deleted, moved, or merged.

> And if you rewrite history you can even use the reflog to really tell what the branch was like (as long as it hasn't been cleaned out).

The reflog is not moved across remotes, is it? If I make a fresh clone of a repository, that doesn't tell me what the branch was like a year ago.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @02:00PM (#13231664)
You're right, it's not moved across remotes. I'm just confused to why the information would ever be needed. It seems to not have any real use case. You can recreate a branch any where at any point in the history, why would you care what commit a branch originally came from? It seems like a solution in search of a problem. Or maybe even a solution to a problem that shouldn't need solving in the first place!

>If I make a fresh clone of a repository, that doesn't tell me what the branch was like a year ago.

This isn't true with Mercurial either. A lot can happen in a year, and it might even make the information misleading (having similar named branches, history deletion, etc). It's useless at best and misleading at worst.

Re:A Git catastrophe cleaned up by zck on Wednesday December 21, 2016 @02:39PM (#13231978)
"This commit has a bad commit message. Why did I commit it? Oh, it's on the branch add-search-functionality."

I find that having a branch name that was the sole branch name when the code was made gives context to the commit; why it was made and what its purpose was. Being reachable from a branch pointer doesn't give that same context. Yes, commit messages should handle this. But I find they don't.

> It's useless at best and misleading at worst.

This has not been my experience. I haven't found a great need for "what's the whole state a year ago"; more so "what was the context around this commit", which I think a mercurial-style branch name answers.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @03:36PM (#13232415)
I'm sorry, in what practice are you in where your commit messages are somehow so lackluster that a branch name (not even a PR!) can give you more information about why something is being done?

And to make sure no one responds with some silly "just because you don't have a use for it, doesn't mean don't have their uses for it": I get what you're trying to say. I'm really just not buying it as an actual use case. If your commit message isn't sufficient enough to explain the purpose of the commit (ticket numbers, explanation, etc), it doesn't get approved. If you're relying on a <20 character branch name to give you sufficient context about a commit a year later, I simply have no words.

>which I think a mercurial-style branch name answers.

I find that extremely suspect.

Re:A Git catastrophe cleaned up by zck on Wednesday December 21, 2016 @03:48PM (#13232497)
> If your commit message isn't sufficient enough to explain the purpose of the commit (ticket numbers, explanation, etc), it doesn't get approved.

I'm glad this is the case where you work and develop. I have never worked at a company where this is the case. I'm also not perfect about commit messages in my personal code. The codebase I'm currently working on has recent commits with description "review", "add addressDto" and "post rebase fix".

> >which I think a mercurial-style branch name answers.

> I find that extremely suspect.

Ok. If I see "add addressDto" as a part of the branch "google-geocoding", that tells me the context. If I see it as part of "refactor-to-use-hibernate", that also tells me something useful.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @07:07PM (#13233748)
>The codebase I'm currently working on has recent commits with description "review", "add addressDto" and "post rebase fix".

I guess what I don't get, is that if you have people doing commit messages like that, how can you possibly expect them to appropriately name a branch which most likely stores far less characters.

Re:A Git catastrophe cleaned up by aidenn0 on Thursday December 22, 2016 @03:14AM (#13235763)
Far too often the commit message says "what" while the branch name says "why."

Just recently I had to triage a recently discovered bug whose symptoms disappeared about 4 years ago to determine if the bug was fixed or just masked. This was code that I was completely unfamiliar with because the other engineers that might have looked at it were otherwise indisposed working on things that were known for sure to be issues.

The "what" told me the specific change that masked the bug and the "why" informed me of the feature that this supported. That allowed me to generate a new test-case that showed up in the current version. Without both pieces of information I would likely have had to spend a couple of hours inspecting code changes to do the same.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday January 04, 2017 @11:54PM (#13324863)
If you can't trust your developers to write acceptable commit messages, why are you trusting them to write code?
Re:A Git catastrophe cleaned up by zck on Wednesday December 21, 2016 @08:26PM (#13234075)
Because you're less in the nitty-gritty when naming a branch, so you're more likely to name it with something referencing the large feature you're working on.
Re:A Git catastrophe cleaned up by aidenn0 on Thursday December 22, 2016 @03:02AM (#13235723)
I work with two codebases with over 200k commits and over 10k branches each. Sometimes the branch names are useless. Sometimes the commit messages are poor. Often knowing one helps provide more context for the other.

Believe it or not, there were times in the last 20 years when there was insufficient review of commit messages!

Re:A Git catastrophe cleaned up by 1wd on Wednesday December 21, 2016 @07:21PM (#13233808)
It's sometimes very useful, but not that often. It's not great for short lived feature branches. It's for long-term branches. If you don't need those (and most often you do not): great, your life is (relatively) simple; don't over-complicate it. You don't buy the use-case, because the situation is not that common or desirable. But once you get in a situation where you really do need multiple long-term branches developed in parallel, you might be happy to have a tool that helps untangle the web of merges somewhat.
Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @09:10PM (#13234228)
>It's for long-term branches.

Please elaborate how this helps you in long-term branches, instead of just assuming long-term branches aren't something most people deal with on a daily basis.

>you might be happy to have a tool that helps untangle the web of merges somewhat.

This has no relation to long-term branches, this happens with any kind of normal history, and even shared history between repositories (which is a far messier thing to untangle). Yet this feature is unneeded, because the information can be correctly found within git in an accurate and not misleading fashion.

Re:A Git catastrophe cleaned up by sampo on Wednesday December 21, 2016 @01:04PM (#13231171)
> branches give you a way to track the branches a commit is a part of which is good for long-running branches (I think of things like master, maybe a long running refactor or major feature branch)

If you always merge "from the right direction", you can follow the first parent line in git and reconstruct which parent is in the master branch (or in the "heavier" branch in general) and which isn't.

In more complicated situations, Mercurial named branches (commit forever carries the branch name) can be helpful. But you can get pretty far with git, too.

Re:A Git catastrophe cleaned up by darkerside on Wednesday December 21, 2016 @09:53AM (#13229548)
> most commands or command flags simply help the user do something in an automated fashion that you could do by typing each specific command out (i.e., git pull --rebase)

A tangent perhaps, but would you mind expanding on this? I use `git pull --rebase` frequently, and I'm not sure how this fits into what you described. Is it the specific command, or the automated shortcut? And what's the counterpart?

Just trying to check my mental model.

Re:A Git catastrophe cleaned up by neckro23 on Wednesday December 21, 2016 @10:06AM (#13229630)
"git pull" is just a shortcut for running "git fetch" and then merging (or rebasing) the current branch to its upstream.

IMO this is a stumbling block for a lot of people new to Git -- for example it covers up the fact that "remote" branches are a separate reference ("master" and "origin/master" are not the same branch!).

Re:A Git catastrophe cleaned up by strictfp on Wednesday December 21, 2016 @11:58AM (#13230623)
"remote" branches are called remote-trackimg branches. And yes, it's very confusing. Especially when git status says "up to date with origin/master", but pulls down loads of stuff when you pull...
Re:A Git catastrophe cleaned up by mbrock on Wednesday December 21, 2016 @09:59AM (#13229581)
From the "git-pull" man page:

> Incorporates changes from a remote repository into the current branch. In its default mode, git pull is shorthand for git fetch followed by git merge FETCH_HEAD.

> More precisely, git pull runs git fetch with the given parameters and calls git merge to merge the retrieved branch heads into the current branch. With --rebase, it runs git rebase instead of git merge.

Re:A Git catastrophe cleaned up by justinlaster on Wednesday December 21, 2016 @10:10AM (#13229663)
I had a comment written up, but I decided to test my claim in my original post about a "litany of literature", and sure enough this has been documented elsewhere:

http://gitolite.com/git-pull--rebase

I searched for "how does git pull --rebase work"

Re:A Git catastrophe cleaned up by ipioxu15 on Wednesday December 21, 2016 @08:23AM (#13228855)
Git is certainly the best of the version control systems to date, and I'm happy that it won. Experts have no problems with issues like this.

The described failure mode also can occur in any existing version control system --- the user is essentially did

cp -f ../mybranch/somefile-new.c somefile.c; hg commit somefile.c

The history in mybranch touching somefile.c is now partly useless, since all the patches are already applied. Of course, the branch can still be merged, if the conflicts are resolved --- the conflict resolution is then pretty much doing the above command again.

Re:A Git catastrophe cleaned up by warbiscuit on Wednesday December 21, 2016 @10:16AM (#13229723)
Honestly, I'm in the exact opposite camp - I'm glad mercurial is still alive and kicking, since I've found my experience with it (and tortoisehg) to be superior in a number of ways. Fewer cross platform issues, a much cleaner commandline interface, can hop over to a much more powerful gui if needed -- I generally use it even when I'm interacting with a git repo.

That said, I'm far from an expert in git. What do you see as it's advantages? (outside of the larger mindshare, obviously :)

Re:A Git catastrophe cleaned up by nine_k on Wednesday December 21, 2016 @10:43AM (#13229928)
The UI story of Hg is much better than Git's. The conceptual model of Git looks superior, though: it's more general and more orthogonal.

I wish some well thought-out front-end to Git became hugely popular and eventually standard. I mean, including the CLI. Git even has a "plumbing mode" to interact with other programs more easily.

But doing that is hard work.

Re:A Git catastrophe cleaned up by rekado on Wednesday December 21, 2016 @01:51PM (#13231581)
Although I'm quite familiar with git on the command line, I'm using git mostly through magit[1] for Emacs. It's a very functional and discoverable user interface.

[1]: https://magit.vc/

Re:A Git catastrophe cleaned up by nine_k on Wednesday December 21, 2016 @01:55PM (#13231611)
Same here! Magit is brilliant.

Emacs is a somehow heavyweight frontend for a VCS, though. OTOH it can be considered a GUI client (and comes with a nice built-in editor).

Re:A Git catastrophe cleaned up by Sir_Cmpwn on Wednesday December 21, 2016 @11:42AM (#13230479)
The fact that you use a Windows-only GUI for Hg is extremely telling. Git is fundamentally a Unix tool that follows Unix design expectations and integrates with the Unix ecosystem and expects the user to be a component command line user.
Re:A Git catastrophe cleaned up by warbiscuit on Wednesday December 21, 2016 @01:43PM (#13231522)
I'd disagree with a number of assumptions in that statement.

For one, TortoiseHg isn't windows only. It's a python+qt based application that works uniformly pretty much everywhere.

That fact that you made that assumption makes me thing you may not have explored many alternatives. I'd recommend trying out some other VCSes, just to get a broader picture of how they function. I think doing that helps to get a grip on what your specific needs actually are, as well as a better understanding of the tradeoffs for whatever tool you pick. None of them I've seen are 100% superior.

Secondly, I love tortoisehg specifically because of the command line. Doing a simple commit with mercurial just takes `hg ci`. Doing a commit using the gui just takes `thg ci`. The latter one pops up a gui for me to stage the commit, and then I'm back in the console again.

IMO it's the best of both worlds -- I don't have to get knocked out of the commandline until I need to, and I can trigger whatever gui action explicitly, as part of my existing workflow.

There are some things which I think are just fundamentally better with a gui -- whether it's a curses-style "TUI", or proper graphics. Under tortoisehg, if I'm cherry picking for a commit, I can double click to open up a file in meld to make last-minute edits, shelve bits away for later, all kinds of one-off actions which are much more complex from the command line. Not to mention performing complex searches on VCS history.

It's a lack of an equivalently powerful cli-controlled gui for git which has kept me using hg as my primary vcs.

Re:A Git catastrophe cleaned up by Sir_Cmpwn on Wednesday December 21, 2016 @02:00PM (#13231653)
You're making a number of assumptions yourself.

>For one, TortoiseHg isn't windows only. It's a python+qt based application that works uniformly pretty much everywhere.

Yeah, admitted this mistake elsewhere.

>That fact that you made that assumption makes me thing you may not have explored many alternatives. I'd recommend trying out some other VCSes, just to get a broader picture of how they function. I think doing that helps to get a grip on what your specific needs actually are, as well as a better understanding of the tradeoffs for whatever tool you pick. None of them I've seen are 100% superior.

I have used, in this order, visual source safe, TFS, SVN, Hg, git.

>Secondly, I love tortoisehg specifically because of the command line. Doing a simple commit with mercurial just takes `hg ci`. Doing a commit using the gui just takes `thg ci`. The latter one pops up a gui for me to stage the commit, and then I'm back in the console again.

Doing a simple commit with git is just git commit. What am I missing here? You could alias it to git ci if you want.

>There are some things which I think are just fundamentally better with a gui -- whether it's a curses-style "TUI", or proper graphics. Under tortoisehg, if I'm cherry picking for a commit, I can double click to open up a file in meld to make last-minute edits, shelve bits away for later, all kinds of one-off actions which are much more complex from the command line. Not to mention performing complex searches on VCS history.

These aren't more complex on the command line, they're just done differently. They aren't as intuitive as a GUI, where the button is presented to you rather than having to read about a flag in the man pages. But VCS is a tool you use all day every day, it's worth it to learn about it in depth.

Re:A Git catastrophe cleaned up by warbiscuit on Wednesday December 21, 2016 @02:22PM (#13231847)
> Doing a simple commit with git is just git commit. What am I missing here? ...

> ... These aren't more complex on the command line, they're just done differently.

The process I outlined was a series of steps which were all part of what I'd consider an average commit (not necessarily "simple"). Invoking `thg ci` I could cherry pick lines, edit files as I'm reviewing the diffs, shelve away others, all within seconds, without shifting context. There isn't a single "flag" to read about which makes typing all those commands out necessarily faster.

Simple commits, I will frequently just do `hg ci` and be done. But if I'm doing a bunch of manipulation, I have click the hunks I want, commit, merge and push, all in much fewer seconds than it would be possible to type the equivalent set of commands.

I consider the overall job "tell the computer what I want, as efficiently as possible". For some specific tasks, a mouse just is a better method than a keyboard. I think it's good for complex multi-purpose tools to offer multiple UIs, allowing the user to get work done using the most efficient method tailored to their specific task at hand.

That said, I think having them based on the CLI, and using it to trigger a gui, is a far superior meta flow than having a gui trigger a cli just never seems to work out.

Re:A Git catastrophe cleaned up by neandrake on Thursday December 22, 2016 @04:03AM (#13235939)
I just recently discovered `hg ci -i` which is a TUI for selecting which changes/hunks to include in the commit. I think it used to be a separate extension but now is part of the main hg distribution. I've tried to use it more now for scenarios where I happened to make multiple modifications to a file while working on a fix/feature and want them in separate commits.
Re:A Git catastrophe cleaned up by ufo on Wednesday December 21, 2016 @01:27PM (#13231392)
The real reason ther eare few git GUIs is not that git expects advanced users that can use the command line. It is that it is very very hard to create a GUI for git due to the way it is built as a complex web of web of scripts written in C, Shell and Perl.

This architecture is the reason why projects such as libgit had to reimplement a lot of core git algorithms. https://libgit2.github.com/

Mercurial, on the other hand is more amenable for extension due to being built our of a bunch of Python modules.

Re:A Git catastrophe cleaned up by Sir_Cmpwn on Wednesday December 21, 2016 @01:37PM (#13231480)
You're half right, but coming from the wrong place. The fact that git is hard to make a GUI for is an intentional design choice in git. It was built to be CLI first and shoehorning a GUI onto it is the wrong way to use git. The correct way is to learn how to be comfortable in a CLI. Git's design with that web of shell and perl and C is totally fine and suited to a CLI-first application.
Re:A Git catastrophe cleaned up by warbiscuit on Wednesday December 21, 2016 @01:50PM (#13231575)
I think different tasks are (more) suitable to different interfaces.

CLIs are great when the space of actions you could perform is large (to nigh uncountable), but the range of subjects is small (the file paths, etc are known). Since you know the subjects, a programming language like `sh` is the most concise way to express a complex action.

GUIs are better in the exact opposite case: when you have a constrained set of actions to perform, but a large number of subjects they may be performed on. In that case, the problem isn't expressing the action, it's picking which subjects to act on (pick these lines to commit, oh except let me edit that one, put that one aside, ok back to the commit i'm staging...).

Many complex tools like VCSes contain both kinds of situations. I think sometimes a CLI is more appropriate, and sometimes a GUI is, depending on the context. IMO a fully mature VCS should make it as easy to invoke a gui for complex tasks as it is to do them from the command line.

Re:A Git catastrophe cleaned up by Sir_Cmpwn on Wednesday December 21, 2016 @02:02PM (#13231668)
>GUIs are better in the exact opposite case: when you have a constrained set of actions to perform, but a large number of subjects they may be performed on. In that case, the problem isn't expressing the action, it's picking which subjects to act on (pick these lines to commit, oh except let me edit that one, put that one aside, ok back to the commit i'm staging...).

Those examples are not only possible, but easy to do in the CLI for an advanced user. I do that sort of thing every day.

I agree that some tasks are better suited to a GUI and some are better suited to a CLI, but your VCS is firmly in the latter camp imo.

Re:A Git catastrophe cleaned up by warbiscuit on Wednesday December 21, 2016 @02:33PM (#13231924)
As a semi-concrete example, say you have a VCS checkout with 40 edited chunks across 15 files. You want to commit 20 of 40 chunks (spread across 6 of 15 of the files). When you're halfway done, you notice a typo needs correcting in chunk 16, and fix it. You then proceed to commit your selection.

From the command prompt, invoking thg and doing that took me about 18 seconds.

I'm reasonably good on the command line, but I certainly don't see how to beat that time using just the cli. I think saying it's "easy for an advanced user" is a little loaded, but I'm still interested to know how to do that task faster. And if such a cli process could only be done with git, I'd consider switching.

Re:A Git catastrophe cleaned up by Sir_Cmpwn on Wednesday December 21, 2016 @02:54PM (#13232092)
git add -p
Re:A Git catastrophe cleaned up by warbiscuit on Wednesday December 21, 2016 @04:06PM (#13232613)
That's a good example of where I think a gui has an advantage.

For the example I gave, unless the hunks were asymetrically distributed, `git add -p` would require pressing "n" 20 times to skip through the excluded hunks (among other things), even when the user could visually see all the hunks, and know which ones they wanted. Where as gui would only require the clicks to select the "y" hunks.

I realize this is arguing a difference in the efficiency, not capability, of the UIs; but that's basically my point. The use-cases where one or the other is optimal are too closely situated together in the problem space to say one is inherently the better choice, even for VCS tasks.

While command line interaction may allow the user to receive a whole screen's worth of information at once, it forces them to interact with it in a serial fashion, regardless of whether out-of-order interaction with on-screen elements would allow them to complete the task faster.

Re:A Git catastrophe cleaned up by jcrites on Wednesday December 21, 2016 @04:52PM (#13232952)
I tend to use Git primarily at the command line as well. I recently saw a colleague use an advanced IDE (I think it was IntelliJ IDEA) to perform a complex `git add -i` with staging individual hunks in multiple files. He did it quite a lot faster in his GUI than I could at the command line. His IDE displayed the files he was staging, with full syntax highlighting for the programming language, and background highlighting showing the lines being modified.

He quickly paginated through the file and just by clicking with his mouse was able to stage and unstage hunks. He had a neat side-by-side view with two panes of text showing the current text and staged commit, if I recall correctly. The IDE instantly showed if this would result in syntax errors, and could even automatically run the project build and tests.

`git add -i` and `git add -p` can do this, but it's much more clunky and serial and modal. For example, my colleague could easily scroll up and down the files, staging and unstaging hunks as needed. He could easily see which files in his file explorer needed this processing and switch between them. This information was all displayed on the screen at the same time, contextually, and the GUI enables navigation to any point in this workflow instantaneously with a click or scroll.

I don't tend to have to do this kind of operation very much, and I'm comfortable doing them from the CLI, so I haven't bothered to set up this GUI tool. But I've seen that GUI tools for tasks like this are faster. Anything involving editing the actual text of files or diffs of them will likely be faster in a GUI.

Re:A Git catastrophe cleaned up by Amezarak on Wednesday December 21, 2016 @03:09PM (#13232201)
It seems unintuitive to me that manipulating a graph via a GUI should be the wrong way to operate. I find it difficult to imagine this argument would be made if git were not the DVCS of choice.

I would say, though, that the ideal GUI for a DVCS has probably not been invented yet.

Re:A Git catastrophe cleaned up by slrz on Wednesday December 21, 2016 @10:16PM (#13234470)
Right and it's pretty sad, I think. Most contemporary software doesn't even try making use of graphic displays and mouse input to create a more efficient interface for trained professionals, often lacking even the most basic forms of ad-hoc programmability.
Re:A Git catastrophe cleaned up by krupan on Wednesday December 21, 2016 @12:08PM (#13230699)
tortoiseHG is not windows only
Re:A Git catastrophe cleaned up by Sir_Cmpwn on Wednesday December 21, 2016 @12:11PM (#13230727)
My mistake. The point remains - users who are more comfortable in a GUI are in a similar boat.
Re:A Git catastrophe cleaned up by mtrn on Wednesday December 21, 2016 @09:20AM (#13229248)
> Git is certainly the best of the version control systems to date, and I'm happy that it won.

Me too.

What I found was that people do not recognize what tool git really is. People do not read the manuals and count on their world knowledge acquired from years of svn or other centralized systems. It's not the best sign, that you have to really dig git to be able to use it properly. But once you understood the core ideas, you can basically derive a lot of the workflows yourself, in a very principled and clear manner. Also: once you get a bit more familiar with the data model, one almost cannot not appreciate its beauty, I believe.

Re:A Git catastrophe cleaned up by theptip on Wednesday December 21, 2016 @11:14AM (#13230194)
This is close to theological discussion territory, and I can see both sides of the argument, so I'm just going to mention that there is an interesting paper[1] from a couple years ago that uses a rigorous concept design process to attempt to simplify Git, and results in a VCS that does indeed require a simpler mental model (Gitless).

Personally I'm not going to abandon Git and all the tooling and community it comes with just for a simpler mental model, given that I have a moderately good handle on the (mainline) features of git -- and therein lies the problem. (Although note, Gitless does work on top of Git, so you should be able to use it with Github by the looks of things [2]).

I've linked Adrian Colyer's summary of the paper to make it easier to digest:

[1]: https://blog.acolyer.org/2016/10/24/whats-wrong-with-git-a-c... [2]: http://gitless.com/#vs

Re:A Git catastrophe cleaned up by agentgt on Wednesday December 21, 2016 @11:53AM (#13230577)
I have to say I am fan of both Mercurial and Git particularly because I'm a crusty old developer who came from some god awful VCS/SCM like PVCS, CVS, RCS, Source safe. I remember first using Perforce for the first time and thinking dear god it is expensive but totally worth it (this was before git).

Really what I think needs improvement is better diff/merging interfaces. There really isn't platform independent one that is opensource and free.

Right now I use p4merge because it works fairly well on macOS but I still think it sucks (it doesn't have keybindings and yeah I have tried vim and emacs diff ... they are ok but not as easy to visualize diffing).

Re:A Git catastrophe cleaned up by stonecodegump on Wednesday December 21, 2016 @08:18AM (#13228831)
I agree. I know there is a lot to Git and you can pretty much do everything. But whenever such discussions come up about how many options there are and how amazing it is, I just glaze over and completely fail to concentrate. I don't think I have the brain power to actually master Git. Luckily I work in a 2 man team, so rarely do I need to do anything particularly complex. I have my workflow and I do what I can not to stray from it.
Re:A Git catastrophe cleaned up by Sir_Cmpwn on Wednesday December 21, 2016 @11:37AM (#13230426)
Remember that git was written by and written for kernel hackers. Most of the people I've found having trouble with git are as far from kernel hackers as you can get and most who don't are quite a bit closer.

As a kernel hacker myself, I think Git's interface is superb and intuitive.

Re:A Git catastrophe cleaned up by emmelaich on Thursday December 22, 2016 @01:30AM (#13235330)
I don't think Junio Hamano (aka gitster) has done much kernel work at all.

But point taken.

Re:A Git catastrophe cleaned up by stephenboyd on Wednesday December 21, 2016 @09:13AM (#13229190)
I think there's an opportunity for a simpler-to-use alternative CLI Git client. Something more user-friendly than the /usr/bin/git program we're talking about and more developer-friendly than the existing Git GUI apps.
Re:A Git catastrophe cleaned up by Drdrdrq on Wednesday December 21, 2016 @12:25PM (#13230846)
There is gitless [0][1], haven't used it though.

[0] http://gitless.com/

[1] https://news.ycombinator.com/item?id=12621837

Re:A Git catastrophe cleaned up by VLM on Wednesday December 21, 2016 @10:08AM (#13229646)
Another parallel idea to consider is procedure and policy.

The cleanup after the foot-shot was pretty gory, but I'm not sure with disciplined git-flow that its possible to replicate that foot-shot, and if you can't shoot yourself in the foot then the goriness of the cleanup is a non-issue.

A third level up is you've got two devs carefully not coordinating and working together on code that closely related to each other, aside from the git-splosion that is not generally a recipe for success. Like, refactor the obviously independent multiple concepts (obviously independent because non-cooperating devs are working separately in parallel on them) in those files into multiple files and then there aren't merges to fight.

Re:A Git catastrophe cleaned up by VLM on Wednesday December 21, 2016 @10:00AM (#13229589)
Git is just getting in the way of the classic old philosophical discussion of there should only be one correct way to think vs a more multicultural the more ways there are to think and adapt and overcome, the better.

The technical discussion of git innards and workflow just get in the way of the core philosophical discussion, and the innards would fall into place if the philosophical question were answered (as if philosophical questions are ever truly answered, LOL)

A classic example of the philosophical argument is Perl vs Python. There's infinite ways to express yourself vs there is only one way that works.

Now its very politically incorrect to say you like Perl in 2016 and I suspect Git is going to be in big trouble soon enough for the same philosophical reason.

I would be interested in hearing what is the philosophical equivalent of Python for source code revision control. I mean... people can't be seriously suggesting going back to RCS/CVS/SVN/Hg, can they? Or I guess they can? Maybe some closed source silo I'm unfamiliar with? Maybe no revision control at all and go back to tgz files with dates embedded in the filename?

A classic problem with limiting opportunity, limiting the range of thoughts and ideas, is finding a way to do it without impacting productivity or quality. In that way "use something simpler and enormously less capable" would be considered cheating the philosophical problem.

Re:A Git catastrophe cleaned up by bad_user on Wednesday December 21, 2016 @10:09AM (#13229653)
You're trying to find too much reasoning.

Nowadays many people hate Python as well and I'm speaking as an ex-Python developer that now hates Python.

And do you know what's ironic about Python? Because the language excluded certain features, it led to multiple non-orthogonal features that solve very specific use-cases and ways of doing things in its ecosystem, with hacks upon hacks meant to implement ideas from other ecosystems, most of them slightly broken.

The problem with language simplicity is that it is misunderstood. Simplicity in the language implementation is often correlated with complexity for the developer, being what happens when you limit what can be expressed.

Re:A Git catastrophe cleaned up by VLM on Wednesday December 21, 2016 @10:23AM (#13229769)
WRT the reasoning I have a gut level feeling its not technically solvable so I'm going for an abstract proof that its equivalent to a known existing unsolvable philosophical debate, therefore any mention of technical problems or feature list of git is bike shedding because its provably unsolvable at a higher level.

So if the answer to the philosophical question is two opposing camps, and we have the source code revision control solution for one pole, then all we need to do is find the opposite pole and then ask the two never to merge (oh the extended pun..) groups, to realize the other side exists and please be civil with each other, etc. That could save a lot of wasted effort.

Clearly the equivalent of methodically twisting Python into Perl one little bit at a time isn't going to make anyone on any side happy, or vice versa.

Re:A Git catastrophe cleaned up by __jal on Wednesday December 21, 2016 @11:40AM (#13230459)
I do think the GP has a point though.

Very roughly, by cliche:

Perl, Git: "The street finds its own uses."

Python: "How can you have any pudding if you don't eat your meat?"

(With apologies to those who don't read Gibson or haven't heard Pink Floyd.)

Re:A Git catastrophe cleaned up by Amezarak on Wednesday December 21, 2016 @10:22AM (#13229761)
> I mean... people can't be seriously suggesting going back to RCS/CVS/SVN/Hg, can they?

...What's wrong with Mercurial? Or is there another Hg source control?

Personally, I started using Mercurial when I can and Git when I have to; I can't imagine someone considering Mercurial as backward even if they prefer Git.

Re:A Git catastrophe cleaned up by brianwawok on Wednesday December 21, 2016 @10:38AM (#13229892)
Used both, I consider Hg a little kids Git.. which is fine for many workflows - but I do prefer Git.
Re:A Git catastrophe cleaned up by kasey_junk on Wednesday December 21, 2016 @05:56PM (#13233398)
You would...

I've yet find a workflow I prefer git to hg for.

Re:A Git catastrophe cleaned up by kasey_junk on Wednesday December 21, 2016 @06:08PM (#13233462)
A) I've used both hg & git extensively and muuuuch prefer hg.

B) I find it crazy that people are so reductionist when it comes to source control. There are tons of systems out there beyond the rcs/cvs/svn tree that have explored the space immensely. If all you are comparing to is those then clearly you'd think git was the only choice.

Re:A Git catastrophe cleaned up by pawadu on Wednesday December 21, 2016 @08:37AM (#13228936)
> I consider this to be a failure of Git. The set of different options (normal merge, rebase, filter-branch, etc) is complex and not cleanly orthogonal which makes for a very messy "mental model".

Allow me to disagree... Does the CVS or SVN way of doing rebase and filter-branch work with your "mental model"? Well, there is your answer.

> I really wish some tool other than Git had "won" the version-control race; I honestly believe Git to be the worst of the contenders in the most recent generation of version control systems

Not to sound harsh, but why would I want to use an inferior tool just because you don't get git?

Re:A Git catastrophe cleaned up by irishsultan on Wednesday December 21, 2016 @08:43AM (#13228975)
I disagree with the person you're replying too, but CVS and SVN are not the current generation of version control systems (and CVS is perhaps not even the previous generation), so it's unclear why you bring them up.

If you want to compare, compare to darcs, mercurial, bazaar, monotone, ... plenty of choice without going back to svn (let alone cvs).

Re:A Git catastrophe cleaned up by pawadu on Wednesday December 21, 2016 @08:58AM (#13229096)
I agree with you on all accounts ;)

The point I was half-jokingly making was that people don't understand what an extremely powerful tool they have been given and instead complain about shallow stuff that for them is simple to grasp

edit: the way mg, bzr and the rest do the advanced stuff [when available] is basically a carbon copy of git.

Re:A Git catastrophe cleaned up by laughinghan on Wednesday December 21, 2016 @11:41AM (#13230463)
> the way mg, bzr and the rest do the advanced stuff [when available] is basically a carbon copy of git.

I'm a pretty big fan of git, but this is an unproductive stance. I don't know much about bzr, but my impression is that darcs pioneered the ideas that became git-rebase, and elsewhere in this thread people are having substantive discussions about hg (Mercurial; I assume that's what you meant by mg) bookmarks and branches vs git branches: https://news.ycombinator.com/item?id=13229582

Re:A Git catastrophe cleaned up by wilde on Wednesday December 21, 2016 @11:40AM (#13230453)
Luckily there are a bunch of tools that wrap the git primitives to present more friendly UIs. I spend most of my source control time in SourceTree at this point.
Re:A Git catastrophe cleaned up by ASalazarMX on Wednesday December 21, 2016 @11:36AM (#13230420)
I'll just leave this here http://xkcd.com/1597/
Re:A Git catastrophe cleaned up by AstralStorm on Wednesday December 21, 2016 @11:58AM (#13230619)
This could be written about any tool. Especially bad with Perforce and Subversion - which do not really support branching. They say they do, but then the merging is a huge pain.
Re:A Git catastrophe cleaned up by voidr on Wednesday December 21, 2016 @12:02PM (#13230658)
I would be interested to know that in your view, which VCS would have solved this problem better assuming they would have done the same thing. It seems to me that they chose the worst possible option each time they hit a problem.
Re:A Git catastrophe cleaned up by SixSigma on Wednesday December 21, 2016 @11:04AM (#13230118)
> I consider this to be a failure of Git.

Surely it's a failure of source code as streams of text.

If each function was versioned with dependencies then this problem would be eliminated.

Replaced by other problems.