Hacker News new | past | comments | ask | show | jobs | submit login

Can you elaborate on the deep problems? I personally find it relatively conceptually elegant.



I think the main problem is that many developers don't think of Git as a DAG, so they don't really understand at a fundamental level what the operations are actually doing.

Once you understand this, Git really does become simple. All you have to do is map each command to the actual operation on the DAG.

This video really explains it quite well, it's the one video that allowed me to fully grasp everything: https://www.youtube.com/watch?v=1ffBJ4sVUb4


Yeah, but the question is whether a DAG is a good mental model for a VCS. Just because that's the underlying data structure doesn't mean it has to be the user interface too.


Exactly. This seems to be a point that the "Git is easy" crew doesn't understand. Not everyone (in fact, very few) find going into that depth for something that's nothing more than a tool to be reasonable. Reminds me of the Gentoo users that used to say compiling everything is a great idea for an OS.


I find that people understand "linearized" concepts easier than other kinds(DAGs included). When elements are left-to-right or top-to-bottom, you can read what is going on at a glance.

So the next major step in VCS technology will most likely do something to help linearize our views and reduce the tangling that comes into play with any tree or graph structure.


Don’t we already have that in some respects?

a) Most people’s git workflow might as well be linear.

b) rebasing a development branch onto master literally linearizes it

Where git shines though of course is where you can’t get away witha linear model


A big part of learning anything is understanding - at a fundamental level - what operations are being executed by whichever tool is being utilized.

So if you will pardon the paraphrase, I think the main problem is that many developers don’t take the time to simply learn git.


I compare it to 10-15 years ago, when functional programming was rather rare. Mid-level OO programmers would complain it was confusing and unfamilar, whereas in reality has beautiful and simple concepts.

Git's use of a DAG is confusing and unfamilar for many programmers, though in reality it's beautiful and simple.


The DAG is the easy part. I can understand perfectly well what I want to do with the DAG and have no idea how to get git to DO it.


Pretty much this. Fortunately the command you need is usually a quick Google search away, and a sequence of basic invocations of branch, checkout, merge, rebase and commit are usually enough to transform the DAG however you want, even if there are simpler ways to do it.


> The DAG is the easy part.

Excellent. I responded to the comment that claimed "deep problems in its conceptual design".

> have no idea how to get git to DO it.

Yes, the ergonomics of git could be significantly better. Branches vs tags, manipulating local refs vs remote refs, etc.


Is OO simple ?

It is supposed to be, but I am not sure it delivers on that part. That’s another discussion, but for instance I wouldn’t bet on having a random 10 yo kid understand OO beyond the bare Cats and Dogs tutorial everyone goes through at first.

And that’s what I would say about git as well. Even after knowing the internals and how it is supposed to work, I still feel that for a tool it’s pretty unelegant and puts a significant burden on the user to know what needs to be done in what situations.


Yup, second that. My old boss introduced the whole team to Scala and made us attend a weekly tutorial as part of training/team-building. Since then, I try to write stateless functions, methods and objects as much as possible regardless of language or platform.

Git is quite elegant if one has a good grasp of graph theory.


Git is certainly great technically. But one should not need to know graph theory to source control files. And I believe that any version control system that does not follow the convention (that probably predates Linus' existence on Earth) that commit should actually commit changes to server, is, by definition, more4 hard to use than it has any reason to be.

But this might be a good study in why Linux is not taking over the desktop, and unlikely to do so in foreseeable future.


>I believe that any version control system that does not follow the convention (that probably predates Linus' existence on Earth) that commit should actually commit changes to server, is, by definition, more4 hard to use than it has any reason to be.

This is just 'your use-case is wrong'.


> But one should not need to know graph theory to source control files.

You have two pills. Or you know few basic DAG concepts, or you need to know a lot of "semantic" VCS commands.


Usually, VCS commands makes some sense (i.e. commit commits), which isn't always the case with Git. THere are only two version control systems where I ever needed to use commands, rather than being able to do what I need in GUI -- SVN (because it is crap and would corrupt repository all the time, and then you needed to fix it up by hand) and Git, because... well, because Git.


I worked with cvs, perforce, clear case, svn and mercurial before git. And each system force me to learn new concepts and a new set of commands. There is no one universal set. There is no surprise your vcs skills are not transfered to git. And no, some inferior wrapper like subj doesn't help you. It's always better to learn tool.


But checkin had always did the same thing, be it in VSS or PVCS. Sure, there'd be varying capabilities, differences in tooling, but concepts were the same. Git wants to be different for the sake of being different (even if we assume for a moment that one should know anything about DAGs in order to use version control, which is pretty laughable by itself).


> But checkin had always did the same thing

I bet you have no problem in remembering what git pull, git checkout, git add, git commit and git push do, isn't it? For everyday work it's enough. You have problem in mastering git, all these nifty logs, diffs, indexes, refs, heads, remotes and other stuff. Other VCS have complex concepts too besides checkins.


It's not even remembering whatever non-standard terminology Linus came up with (although when I am feeling particularly curmudgeony I don't even want to know what push is, and why doing a commit isn't enough). It's a) having to deal with it in the first place, because the management decided to cargo-cult it, even though we are not developing anything resembling Linux kernel (there were no issues using TFS before, they just decided that they want to give Microsoft even more money and got a commercial Github account), and b) that I even have to drop to the CLI in the first place for operations that in any other VCS I could do with a couple clicks right in VS GUI. With TFS I had to use command line maybe once a year, and usually for something not strictly necessary. With SVN it was maybe every c9ouple of weeks to fix up the repository it messed up, With Git it is way too often.

Whatever technical advantages of Git are (and technically it is good), I think it fails as a tool to let me do my job easier.


> Git's use of a DAG is confusing and unfamilar for many programmers, though in reality it's beautiful and simple.

The difference relative to functional programming is that you get paid for one and the other is just a tool


I would argue that functional programming is just a tool as well... Programmers are paid for solving problems and code is just a means to that end.


I think that you can find good explanations of these problems here :

https://jneem.github.io/merging/

https://pijul.org/model/#why-care-about-patch-theory

Unfortunatly Gitless doesn't solve them.

But Pijul solve many problems of Git (and Darcs) and is easier to use.

https://pijul.org


It appears as https://nest.pijul.com/pijul_org/pijul is currently being hugged to death?


It's a once a month / once a quarter occurance. I'm not sure if it's because of changes to the webservice or not enough financial backing.

I've basically given up on using early access pijul. I've had a problem with each of the last three versions, primarily pushing to Nest. It wouldn't be an issue if I could install pijul on NearlyFreeSpeech (because then I could self host on a known good version). I want pijul to succeed, its patching model sounds good. Clearly, it's working for some group of people. But I'm not one of them, and it's past where I feel like I'm wasting my time. I'll try again when they're v1.0


It's ok now. They published a new version of Pijul and it seems that it cause some problems.

https://pijul.org/posts/2018-11-20-pijul-0.11/

https://pijul.org/posts/2018-04-21-pijul-0.10/




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: