News for hackers. Stuff that matters.
Re:Why SQLite Does Not Use Git by mabbo on Tuesday April 10, 2018 @09:27PM (#16807290)
The day I got over what I feel was the end of the steep part of the learning curve, everything made so much sense. Everything became easy to do. I've never been confused or unsure of what was going on in git since.

What git needs is a chair lift up that hill. A way to easily get people there. But I have no idea what that would look like. Lots of people try, few do very well at it.

Re:Why SQLite Does Not Use Git by johnfn on Tuesday April 10, 2018 @10:15PM (#16807530)
The whole point about abstractions is you shouldn't need to understand the internals to use them. If the best defense of git is "once you understand the inner workings, it's so clear" then it is by definition a poor abstraction.
Re:Why SQLite Does Not Use Git by andrewflnr on Tuesday April 10, 2018 @10:34PM (#16807597)
Who said it's supposed to be an abstraction? The point, theoretically, of something like Git is that the actual unvarnished model is clear enough that you don't need an abstraction. The problem IMO is that the commands are kind of random and don't map cleanly to the model.
Re:Why SQLite Does Not Use Git by AstralStorm on Wednesday April 11, 2018 @03:56AM (#16808948)
Indeed, the worst offenders are in my opinion checkout, reset and pull.

They mix multiple only slightly related commands in one.

Re:Why SQLite Does Not Use Git by simik on Wednesday April 11, 2018 @08:16AM (#16810305)
There are couple projects that try to tackle this problem by providing an alternative CLI (on top of git's own plumbing), like gitless and g2. Haven't used any of them myself, but would be interested in experience of others.
Re:Why SQLite Does Not Use Git by naasking on Tuesday April 10, 2018 @11:28PM (#16807808)
Any interface means you'll build an mental model of the system you're manipulating. How else could you possibly know what you want to do and what commands to issue?

So given a mental model is inevitable, seems reasonable that that model should be the actual model.

Re:Why SQLite Does Not Use Git by tedivm on Wednesday April 11, 2018 @12:25AM (#16808029)
You don't need to understand how media is encoded to watch a movie or listen to a song. You don't need to understand the on disk format of a Word document to write a letter. When writing a row to an SQL database I don't always understand how that software is going to record that data, but I do know I can use that SQL abstraction to get it back out.
Re:Why SQLite Does Not Use Git by fiedzia on Wednesday April 11, 2018 @06:49AM (#16809759)
> You don't need to understand how media is encoded to watch a movie or listen to a song.

I recall the time when mp3 was to demanding for many CPUs, so you had to convert to non-compressed formats. Today you do need to know that downloading non-compressed audio will cost you a lot of network traffic. Once performance is a concern, all abstractions have to be discarded.

Re:Why SQLite Does Not Use Git by jsjohnst on Wednesday April 11, 2018 @01:11AM (#16808238)
Exactly, if you stick to the very basics with git, you can live a happy life never caring about the internals. If you however want to dig into the depths of Git and use all its power, I don’t get why people don’t think there would be an obvious learning curve.

Same exact thing above applies to so many things in software development, from IDEs, to code editors (Vim/Emacs/Sublime/etc), to programming languages, to deploy tools, the list goes on. There’s a reason software development is classified as skilled labor and not a low end job generally. You’re expected to have knowledge of, or be willing to learn a lot, to do your job.

Re:Why SQLite Does Not Use Git by naasking on Wednesday April 11, 2018 @08:13AM (#16810293)
The difference is that the video model abstracts over the encoding, the git model does not abstract over the storage model, it exposes it. git commands are operations on a versioned blob store.
Re:Why SQLite Does Not Use Git by blattimwind on Wednesday April 11, 2018 @08:29AM (#16810397)
It's not versioned.
Re:Why SQLite Does Not Use Git by ethbro on Wednesday April 11, 2018 @12:24AM (#16808023)
> So given a mental model is inevitable, seems reasonable that that model should be the actual model.

I think the longevity of SQL has proved there's value is non-leaky abstracted interfaces.

Re:Why SQLite Does Not Use Git by flukus on Wednesday April 11, 2018 @12:44AM (#16808098)
> I think the longevity of SQL has proved there's value is non-leaky abstracted interfaces.

How is sql non-leaky? To be proficient with sql you have to understand how results are stored on disk, how indexes work, how joins work, etc. To debug and improve them you need to look at the query plan which is the database exposing it's inner workings to you.

You have to know about the abstractions an sql server sits on as well. Why is it faster if it's on an SSD instead of an HDD? Why does the data dissapear if it's an in memory DB?

Re:Why SQLite Does Not Use Git by bch on Wednesday April 11, 2018 @12:59AM (#16808177)
> To be proficient with sql you have to understand how results are stored on disk, how indexes work, how joins work, etc

No, you don’t. As far as I know, the data is stored in discrete little boxes and indexes are a separate stack of sorted little boxes connected to the main boxes by spaghetti. This is the abstraction, it works, and I don’t need to know about btrees, blocksizes, how locks are implemented, or anything else to grok a database.

Re:Why SQLite Does Not Use Git by flukus on Wednesday April 11, 2018 @03:32AM (#16808845)
You've never had to look at a query plan that explains what the database is doing internally? If not then I wouldn't consider you proficient, or you've only ever worked with tiny data sets.

Have you created an index? Was it clustered or non-clustered? That's not a black box, that's you giving implementation details to the database.

Re:Why SQLite Does Not Use Git by bch on Wednesday April 11, 2018 @04:23AM (#16809080)
I don’t think being a professional DBA managing an enterprise Oracle installation is isomorphic to the general populace that might use git.

There’s no question that knowing more will get you more, but I think for the question of “when will things go sideways and I need to understand internals to save myself”, one would be able to use a relational database with success longer than git, getting by on abstractions alone. Running a high-performance installation of either is really outside the scope of the original point.

Re:Why SQLite Does Not Use Git by LyndsySimon on Wednesday April 11, 2018 @11:59AM (#16812440)
Those things don't generally influence how you structure the query, though - you can choose to structure your query to fit the underlying structure better, or you can modify the underlying structure to better fit your data and the manipulations you are trying to preform.

Yes, most of us will have to do both at some point, but they can be thought of as discrete skills.

Re:Why SQLite Does Not Use Git by btschaegg on Thursday April 12, 2018 @01:33AM (#16818276)
This isn't a bad analogy though. Git itself is similar - once you understood the graph-like nature of commits (which isn't all that complicated to begin with), it's generally not hard to skim through a repository and understand its history. Diffing etc. is also simple enough this way.

If, on the other hand, you are working to create said history (and devise/use an advanced workflow for that), it's very helpful if you understand the underlying concepts. Which also goes for designing database layouts - someone who doesn't understand the basics of the optimizer will inevitably run into performance problems, just as someone who doesn't understand Git's inner workings will inevitably bork the repository.

Re:Why SQLite Does Not Use Git by DomreiRoam on Wednesday April 11, 2018 @04:09AM (#16809016)
You don't need to know more than sql to manipulate the data. The semantic of your query is fully contained in sql.

You may need to go deeper and understand the underline model if you want performance but sticking to normal form can make unnecessary for a lot of people a lot of the time.

You can have a useful separation of work between a developer understanding/using sql and a DBA doing the DDL part and the optimization when needed.

Re:Why SQLite Does Not Use Git by eesmith on Wednesday April 11, 2018 @03:19AM (#16808786)
You have a very high standard for what 'proficient' means, and yet a very low one.

That is, I am not proficient with relational databases, and I can handwave why an SDD is faster, and why data may disappear from an in-memory DB.

But I couldn't do an outer join without help. Nor do I know when I would want to do one.

Bob Martin wrote the essay at http://blog.cleancoder.com/uncle-bob/2017/12/09/Dbtails.html , in which he writes:

> Relational databases abstract away the physical nature of the disk, just as file systems do; but instead of storing informal arrays of bytes, relational databases provide access to sets of fixed sized records.

This isn't true. SQLite does not use fixed size records.

This suggests to me that a lot of people who consider themselves proficient with SQL don't know how the results are stored on disk, nor the difference between the SQL model and the actual implementation details, making them not proficient under your definition.

Re:Why SQLite Does Not Use Git by flukus on Wednesday April 11, 2018 @03:59AM (#16808958)
> That is, I am not proficient with relational databases, and I can handwave why an SDD is faster, and why data may disappear from an in-memory DB.

Because you know that information for other reasons as most people would. Just because the information is gained for other reasons does not make it irrelevant when using a database though.

> This isn't true. SQLite does not use fixed size records.

It's actually true of most/all modern databases these days. The point isn't knowing the exact structure the database uses to store it's information (even though it can be useful) but knowing how efficiently it can find the information for any given request. Knowing when a database is doing an index lookup or a full table scan is very important and I wouldn't consider someone that can't make a reasonable guess to be proficient in sql. Many of these details are even exposed in the sql, when you create an index and decide if it's clustered or non-clustered your giving the database specific directions about how the data will be physically stored.

The fact that you need to know anything about how they do their work internally to be reasonably competent at using them makes them a leaky abstraction.

Re:Why SQLite Does Not Use Git by blattimwind on Wednesday April 11, 2018 @08:33AM (#16810421)
SQL leaks for complex queries and schemas if performance needs to be optimized. I argue virtually all abstractions leak heavily when performance is considered, some more than others. SQL leaks relatively little in comparison to some other technologies IME.

Also, SQL has well-established processes and formalisms to design schemas which generally result in solid performance by themselves. That's what RDBMS are around for, after all: enabling efficient and consistent record-oriented data manipulation. This is quite difficult to do correctly in reality; for example, if you write your own transaction mechanism for disk/solid-state storage, you are going to do it wrong. This is genuinely difficult stuff.

There is a ton of internals that SQL abstracts so well that very few DB programmers know or (have to) care about them. Things like commit and rollback protocols, checkpointing, on-disk layouts, I/O scheduling, page allocation strategies, caching etc.

Re:Why SQLite Does Not Use Git by eesmith on Thursday April 12, 2018 @04:27AM (#16818970)
You wrote "Just because the information is gained for other reasons does not make it irrelevant when using a database though."

Certainly. My comment, however, concerned what you meant by 'proficient', and not simple use.

You used the qualifier "all modern databases". Was that meant to imply that SQLite is not a modern database?

My point remains that there are many people who are proficient in SQL, and would do very well with SQLite, even without knowing the on-disk format.

That is why I disagree with your use of the term "proficient".

Re:Why SQLite Does Not Use Git by i2om3r on Wednesday April 11, 2018 @04:16AM (#16809044)
You seem to be talking about a different kind of leakiness. In my mind, there are two kinds: conceptual and performance leakiness. You are talking about the latter. Pretty much any non-trivial system on modern hardware leaks performance details. From what I understand, git's UI tries to provide a different model that the actual implementation but still leaks a lot of details of the implementation model.
Re:Why SQLite Does Not Use Git by Mikhail_Edoshin on Thursday April 12, 2018 @07:03AM (#16819597)
It probably should be homomorphic to the actual model, but not the actual model. The map cannot be the terrain.
Re:Why SQLite Does Not Use Git by boudin on Wednesday April 11, 2018 @03:29AM (#16808838)
I disagree with that. The point of an abstraction is to not having to know the implementation. Understanding the principles used behind will always lead to a much better use of your abstraction
Re:Why SQLite Does Not Use Git by AlexCoventry on Saturday April 14, 2018 @05:08PM (#16839513)
I'd also say an abstraction could be carrying its weight even if it only reduces the amount you have to think about the implementation details when using it.
Re:Why SQLite Does Not Use Git by specialist on Tuesday April 10, 2018 @11:19PM (#16807768)
Leaky abstractions is how we get stuff like ORMs.
Re:Why SQLite Does Not Use Git by pritambaral on Wednesday April 11, 2018 @07:07AM (#16809868)
To be fair, most ORMs poorly implement the "leaky" principle. When implemented well, like with SQLAlchemy, the end result is a much nicer ORM.

In fact, one of the things in common among the ORMs that have left a bad taste in my mouth is that they all tried to abstract away SQL without leaking enough of it.

Re:Why SQLite Does Not Use Git by specialist on Wednesday April 11, 2018 @10:45AM (#16811556)
I have a different thesis:

Picking the ideal interface to abstract is critically important (and very hard).

In the case of ORMs, available solutions abstract the schema (tables, rows, fields), the objects, or use templates. My solution abstracted JDBC/ODBC. The only leak in my abstraction was missing metadata, which I was able to plug (with much effort!).

My notions for interfaces, modularity, abstractions are mostly informed by the book "Design Rules: The Power of Modularity". http://a.co/hXOGJq1

Re:Why SQLite Does Not Use Git by jimmy1 on Tuesday April 10, 2018 @11:34PM (#16807827)
This might sound a little out of touch, but am I the only one who doesn't think git is that hard? It is a collection of named pointers and a directed acyclic graph. The internals aren't really important once you have that concept down.
Re:Why SQLite Does Not Use Git by banku_brougham on Wednesday April 11, 2018 @12:33AM (#16808054)
But what about the deal breaker in the article: a way to follow the decendants of a commit.
Re:Why SQLite Does Not Use Git by pdfernhout on Wednesday April 11, 2018 @01:18AM (#16808263)
Took a few seconds with a search engine on "git descendants of a commit": https://stackoverflow.com/questions/27960605/find-all-the-di...

That said, I do feel some "porcelain" git commands are poorly named and operate inconsistently -- compared to the plumbing of the acyclic graph concepts which is good but limited.

Re:Why SQLite Does Not Use Git by chipotle_coyote on Wednesday April 11, 2018 @02:47AM (#16808645)
So, in git, to show descendants of a commit, you use

    git rev-list --all --parents | grep "^.\{40\}.*<PARENT_SHA1>.*" | awk '{print $1}'
whereas in fossil, you use

    fossil timeline after <COMMIT>
I mean, one of these looks just a little more straightforward than the other, doesn't it?

Also, a cursory test in a local git repo just now showed that command seems to print out only immediate descendants--i.e., unless that commit is the start of a branch, it's only going to tell you the single commit that comes immediately after it, not the timeline of activity that fossil will--and all it gives you is the hash of those commit(s), with no other information.

I use git myself, not fossil, but if this is something you really want in your workflow, fossil is a pretty clear win.

Re:Why SQLite Does Not Use Git by dbt00 on Wednesday April 11, 2018 @03:19AM (#16808785)
I mean, sure. He really wanted this feature in fossil, gave it a first class command line ui, and its super easy.

How many other ways of looking at commits or trees are there, that are hard in git but impossible in fossil because the author didn’t feel like it?

Re:Why SQLite Does Not Use Git by alain_gilbert on Wednesday April 11, 2018 @03:59AM (#16808960)
I don't know why they have the need to retrieve the hash of the descendant commit, but usually what I'm doing is: I use a decent visual tool and just follow the branch (sourcetree).

You could alternatively use:

    git log --graph
Re:Why SQLite Does Not Use Git by glandium on Wednesday April 11, 2018 @04:41AM (#16809170)

  git log <COMMIT>..
Re:Why SQLite Does Not Use Git by usr1106 on Thursday April 12, 2018 @03:29AM (#16818725)
`git log` stays in the current branch unless you give it the `--all` option. But when you give it the `--all` option the limitation by `<COMMIT>..` does no longer work. So not a solution.
Re:Why SQLite Does Not Use Git by glandium on Thursday April 12, 2018 @06:22PM (#16825479)

  git log --all --ancestry-path ^<COMMIT>
Re:Why SQLite Does Not Use Git by e12e on Wednesday April 11, 2018 @02:04AM (#16808448)
You mean you didn't just read git's easy-to-follow, well-structured man pages or built-in help? /s

Half the time, when I know what I want, I both keep forgetting git flags and sub-commands - and struggle to find them in the man pages.

Like the fine:

git diff --name-only # i list only the files that are changed. But I'm not --list-files.

Re:Why SQLite Does Not Use Git by OJFord on Wednesday April 11, 2018 @02:16AM (#16808505)
Diff lists files without --name-only though, so the flag specifies you want _only_ the filenames of those with a diff.
Re:Why SQLite Does Not Use Git by e12e on Wednesday April 11, 2018 @12:22PM (#16812679)
True, but it's inconsistent with eg grep.
Re:Why SQLite Does Not Use Git by yawaramin on Saturday April 14, 2018 @02:52PM (#16838810)
Getting only the changed filenames is a fairly specialised operation. Often in normal use you can get away with a more generic operation that comes close to what you need, but is way more common, e.g.

    git diff --stat
Re:Why SQLite Does Not Use Git by mabbo on Wednesday April 11, 2018 @09:27AM (#16810845)
If you're new to tech or you've got a different mental model of how version control works, getting across the gap to git is a challenge.

My current team are mostly controls engineers, working on PLCs. But the software we're now working with has its configurations tracked in git. These aren't dumb people, they're quite talented, but their education wasn't in CS, and "directed acyclic graph" is not a thing they have a mental model for.

Re:Why SQLite Does Not Use Git by kadenshep on Wednesday April 11, 2018 @12:54AM (#16808148)
No you're definitely not the only one. Git is one of the simplest and dumbest tools developers have at our disposal. People's inability to conceptualize a pretty straight forward graph is something no amount of shiny UI can ever fix.

I don't understand HN's hardon for hating Git.

Re:Why SQLite Does Not Use Git by carussell on Wednesday April 11, 2018 @01:02AM (#16808196)
Sure, and a piece table is a simple way to represent a file's contents. But if anyone wrote a shell or a text editor that required you to directly interact with the piece table to edit a file—instead of something sane—then they'd rightfully be called out on it. It wouldn't matter how much you argued about how simple the piece table is to understand, and it wouldn't matter how right you were about how simple the piece table is to understand. It's the wrong level of abstraction to expose in the UI.
Re:Why SQLite Does Not Use Git by kadenshep on Wednesday April 11, 2018 @01:11AM (#16808237)
The only thing Git can really fix is changing it's command flags to be consistent across aliases/internal commands. That's about it. The whole point of an SCM is that graph that you want to move away from. People have asserted your claim many times but can't ever give specific things to fix about the "abstraction."

There are about 5/6 fundamental operations you do in git/hg. If that's too much then again, there's not an abstraction that is going to help you out.

Re:Why SQLite Does Not Use Git by carussell on Wednesday April 11, 2018 @01:27AM (#16808301)
See, you're trying to foist a position on me that isn't mine—that I'm scared of the essential necessities of source control. And you act as if source control were invented with Git. Neither of these are true.

> git/hg

Mercurial was a great solution to the same problem that Git set out to tackle, virtually free of Git's foibles. The tradeoff was a few minor foibles of its own, but a much better tool. It's a fucking shame that Git managed to suck all the air out of the room, and we're left with a far, far worse industry standard.

Re:Why SQLite Does Not Use Git by Grue3 on Wednesday April 11, 2018 @04:19AM (#16809060)
>Mercurial was a great solution to the same problem that Git set out to tackle, virtually free of Git's foibles.

No, Mercurial's design is fundamentally inferior to Git, and practically the entire history of Mercurial development is trying to catch up to what Git did right from the start. For example having ridiculous "permanent" branches -> somebody makes "bookmarks" plugin to imitate Git's lightweight branches -> now there are two ways to branch, which is confusing. No way to stash -> somebody writes a shelve plugin -> need to enable plugin for this basic functionality instead of being proper part of VCS. Editing local history is hard -> Mercurial Queues plugin -> it's still hard -> now I think they have something like "phases". In Git all of this was easy from the start.

Another simple thing. How to get the commit id of the current revision. Let's search stack overflow:

https://stackoverflow.com/questions/2485651/print-current-me...

The top answer is `hg id -i`.

    $ hg id -i
    adc56745e928
The problem is, this answer is wrong! This simple command can execute for hours on a large enough repository, and requires write privileges to the repository! Moreover, it returns only a part of the hash. There's literally no option to display the full hash.

The "correct" answer is `hg parent --template '{node}'`. Except `hg parent` is apparently deprecated, so the actual correct way is some `hg log` invocation with a lot of arguments.

Re:Why SQLite Does Not Use Git by baud147258 on Wednesday April 11, 2018 @05:29AM (#16809380)
I would not call "hg log -r tip" a lot of arguments.

Also, on the git/hg debate, I feel I've had problems (like the stash your modification and redownload everything) more often with git that hg. I mean perhaps it tells something about my capability to understand a directed acyclic graph, but hg seems less brittle when I'm using it.

Re:Why SQLite Does Not Use Git by renox on Wednesday April 11, 2018 @08:27AM (#16810379)
I disagree with some of your comments, is git stash really essential or unneeded complexity? That's debatable, I never use it personally.

What I don't like in git is the loss of history associated with squashing commits, I would prefer having a 'summary' that would keep the full history but by default would ne used like a single commit.

Re:Why SQLite Does Not Use Git by WorldMaker on Wednesday April 11, 2018 @12:02PM (#16812478)
In git you can use merge commits as your "summary" and `--first-parent` or other DAG depth flags to `git log` (et al) to see only summaries first. From the command line you can easily add that to key aliases and not worry about. I think that if GitHub had a better way to surface that in their UI (ie, default to `--first-parent` and have accordions or something to dive deeper), there would be a lot less squashing in git life. (Certainly, I don't believe in branch squashing.)

The DAG is already powerful enough to handle both the complicated details and the top-level summaries, it's just dumb that the UIs don't default to smarter displays.

(I find git stash essential given that `git add --interactive` is a painful UX compared to darcs and git doesn't have anything near darcs' smarts for merges when pulling/merging branches. Obviously, your mileage will vary.)

Re:Why SQLite Does Not Use Git by kadenshep on Wednesday April 11, 2018 @01:48AM (#16808375)
>you're trying to foist a position on me that isn't mine

I just said you can't give specifics on what to change, because there isn't much too change.

>And you act as if source control were invented with Git

No I'm not?

>and we're left with a far, far worse industry standard.

Yeah, we definitely should have gone with the system that can't do partial checkouts correctly or even roll things back. Branching name conflicts across remote repositories and bookmark fun! Git won for a reason, because it's good and sane at what it does.

Re:Why SQLite Does Not Use Git by pjmlp on Wednesday April 11, 2018 @02:23AM (#16808529)
That reason was called Linus and Linux kernel development.

The master can do no wrong.

Re:Why SQLite Does Not Use Git by AstralStorm on Wednesday April 11, 2018 @03:59AM (#16808956)
No, the reason is mercurial sucked at performance with many commits at the time, and was extra slow when merging.

Lacked a few dubious features such as merging multiple branches at the same time too.

It has improved but git is still noticeably more efficient with large repositories. (Almost straight comparison is any operation on Firefox repository vs its git port.)

Re:Why SQLite Does Not Use Git by pjmlp on Wednesday April 11, 2018 @04:31AM (#16809126)
Mercurial has always been better than Git on Windows.

Those dubious features are so relevant to daily work that I didn't even knew they existed.

Re:Why SQLite Does Not Use Git by AstralStorm on Wednesday April 11, 2018 @05:30AM (#16809383)
Git main target is Linux. Obviously. Performance on the truly secondary platform was not relevant and it is mostly caused by slow lstat call.

Instead Mercurial uses additional cache file which instead is slower on Linux with big repos. But happens to be faster in Windows.

And the octopus merge is used by kernel maintainers sometimes if not quite a lot. That feature is impossible to add in Mercurial as it does not allow more than two commit parents.

Re:Why SQLite Does Not Use Git by pjmlp on Wednesday April 11, 2018 @08:02AM (#16810233)
Which reinforces the position that git should have stayed a Linux kernel specific DVCS, as the Bitkeeper replacement it is, instead of forcing its use cases on the rest of us.
Re:Why SQLite Does Not Use Git by kadenshep on Wednesday April 11, 2018 @08:49AM (#16810554)
>Which reinforces the position that git should have stayed a Linux kernel specific DVCS

No it doesn't? People use octopus merges all the time, every single day.

Re:Why SQLite Does Not Use Git by pjmlp on Wednesday April 11, 2018 @09:24AM (#16810819)
Well, I only get blank stares when I mention octopus merges around here.
Re:Why SQLite Does Not Use Git by btschaegg on Thursday April 12, 2018 @01:58AM (#16818382)
...as I get stares (okay, mostly of fear) if I point out that we need a branch in my workplace. What you can/can't do (sanely) with your tool shapes how you think about its problem space.

To emphasize that even more: Try to explain the concept of an ML-style sum type (i.e. a discriminated union in F#) to someone who only knows languages with C++-based type systems. You'll have a hard time to even explain why this is a good idea, because they will try to map it to the features they know (i.e. enums and/or inheritance hierarchies), and fail to get the upsides.

Re:Why SQLite Does Not Use Git by pjmlp on Thursday April 12, 2018 @07:49AM (#16819857)
Easy, is is called std::variant, available since C++17.
Re:Why SQLite Does Not Use Git by btschaegg on Thursday April 12, 2018 @11:37AM (#16822037)
Yeah, I guess. Except that std::variant is basically a glorified C union with all the drawbacks that entails.
Re:Why SQLite Does Not Use Git by yawaramin on Saturday April 14, 2018 @02:59PM (#16838846)
But git didn't force its use on anybody, lol. If you need a scapegoat, try GitHub!
Re:Why SQLite Does Not Use Git by eesmith on Wednesday April 11, 2018 @03:37AM (#16808864)
You wrote: People have asserted your claim many times but can't ever give specific things to fix about the "abstraction."

That seems like you made an assertion as well. I think there are counter-examples.

For example, the point of gitless is (quoting http://gitless.com/ ):

> Many people complain that Git is hard to use. We think the problem lies deeper than the user interface, in the concepts underlying Git. Gitless is an experiment to see what happens if you put a simple veneer on an app that changes the underlying concepts

Some commentary is at https://blog.acolyer.org/2016/10/24/whats-wrong-with-git-a-c... .

Many HN discussions as well, including https://news.ycombinator.com/item?id=6927485 .

Re:Why SQLite Does Not Use Git by chriswarbo on Wednesday April 11, 2018 @01:09PM (#16813226)
> The whole point of an SCM is that graph that you want to move away from.

I think that's an exaggeration. For example, Darcs and Pijul aren't based around a "graph of commits" like Git is, they use sets of inter-dependent patches instead. I'm sure there are other useful ways to model DVCS too.

Whilst this is mostly irrelevant for Git users, you mentioned Mercurial so I thought I'd chime in :)

> The only thing Git can really fix is changing it's command flags to be consistent across aliases/internal commands.

I mostly agree with this: Git is widespread enough that it should mostly be kept stable; anything too drastic should be done in a separate project, either an "overlay", or a separate (possibly Git-compatible) DVCS.

Re:Why SQLite Does Not Use Git by kadenshep on Thursday April 12, 2018 @08:21PM (#16826120)
>For example, Darcs and Pijul aren't based around a "graph of commits" like Git is, they use sets of inter-dependent patches instead.

I said graph, I didn't say which graph. Both systems still use graphs. And still a graph you have to understand how to edit with each tool. The abstraction is still the same, and if you have problems with Git, you're going to have problems with either of those tools as well. The abstraction is not the problem, it's the developers inability to conceptualize the model in their head.

Where is the exaggeration?

Re:Why SQLite Does Not Use Git by chriswarbo on Friday April 13, 2018 @07:53AM (#16829068)
> I said graph, I didn't say which graph

You said "that graph" which, in context, I took to mean the git graph.

> Both systems still use graphs

True

> The abstraction is still the same

Not at all, since those graphs mean different things. Each makes some things easier and some things harder. For example, time is easy in git ("what did this look like last week?"). Changes are easy in Darcs ("does this conflict with that?"). Both tools allow the same sorts of things, but some are more natural than others. I think it's easy enough to use either as long as we think in its terms; learning to think in those terms may be hard. For git in particular, I think the CLI terminology doesn't help with that (e.g. "checkout").

> if you have problems with Git, you're going to have problems with either of those tools as well

Not necessarily. As a simple example, some git operations "replay" a sequence of commits (e.g. cherrypicking). I've often had sequences which introduce something then later remove it (bugs, workarounds, stubs, etc.). If there's a merge conflict during the "replay", I'll have to spend time manually reintroducing those useless changes, just so i can resume the "replay" which will remove them again.

From what I understand, in Darcs such changes would "cancel out" and not appear in the diff that we end up applying.

> Where is the exaggeration?

The idea that "uses a graph" implies "equally hard to use". The underlying datastructure != the abstraction; the semantics is much more important.

For example, the forward/back buttons of a browser can be implemented as a linked list; blockchains are also linked lists, but that doesn't mean that they're both the same abstraction, or that understanding each takes the same level of knowledge/experience/etc.

Re:Why SQLite Does Not Use Git by kadenshep on Saturday April 14, 2018 @01:37AM (#16836065)
>The idea that "uses a graph" implies "equally hard to use".

What I'm getting at is that if you don't understand what the graph entails, and what you need to do the graph, any system is going to be "hard to use." This idea that things should immediately make sense without understanding what you need to do or even what you're asking the system to do, is just silly.

I've never seen someone who understands git, darcs, mercurial, pijul, etc go "I totally understand how this data is being stored but it's just so hard to use!" I don't think that can be the case, because any of the graphs those applications choose to use have some shared cross section of operations:

* add

* remove

* merge

* reorder

* push

* pull

I see people confused about the above, because they don't understand what they're really asking the system to do. I don't think any abstraction is ever going to solve that.

Git does have a problem with its command line (or at least how consistent and ambiguous it can sometimes be), but you really should get past it after a week or two of using it. The rest is on you. If you know what you want/need to do getting past the CLI isn't hard. People struggle with the former and so they think the latter is what's stopping them.

Re:Why SQLite Does Not Use Git by sctb on Wednesday April 11, 2018 @02:12PM (#16813816)
Could you please remove the thorniness and condescension for your posts? It breaks the guidelines and makes discussions worse.

https://news.ycombinator.com/newsguidelines.html

Re:Why SQLite Does Not Use Git by kadenshep on Wednesday April 11, 2018 @02:22PM (#16813903)
Can you tell the other guy to not post false and disingenuous statements? Because I'm pretty sure that is what degrades discussions, not any tone I choose to exhibit. I highly encourage you to read the thread thoroughly. If I switched my position on git we wouldn't be having this discussion, as evidenced elsewhere in the thread where people are taking a notably blunter tone than I am just with the side with popular support on this forum.

I posted a bald statement. He replied directly with snide remarks and fallacies. Look at the timestamps and edits. I have every right to be annoyed and make it known that I am annoyed in my posts when the community refused to consistently adhere to guidelines.

Enforce guidelines that keep discussions rational, not because people don't want to be accosted in public for their misleading, emotionally bloated statements.

Re:Why SQLite Does Not Use Git by sctb on Wednesday April 11, 2018 @02:34PM (#16814039)
It doesn't matter what you're replying to. The guidelines always apply, so please follow them.
Re:Why SQLite Does Not Use Git by kadenshep on Wednesday April 11, 2018 @03:19PM (#16814535)
>The guidelines always apply

They are currently not being applied. Is it fair for me to point out how inconsistently the posts are being treated?

https://news.ycombinator.com/newsguidelines.html:

>Don't say things you wouldn't say face-to-face. Don't be snarky.

"Every day humans make me again realize that I love my dogs, and respect my dogs, more than humans. There are exceptions but they are few and far between." [2]

>Please respond to the strongest plausible interpretation of what someone says, not a weaker one that's easier to criticize.

"Which sort of doesn't matter since everyone thinks GitHub is source management." [1]

>Please don't post shallow dismissals

"You all lost out on "the most sane and powerful" as a result." [1]

"Calling it a sane and powerful source control tool is just not supported by the facts, calling "the most ..." is laughable." [1]

"Calling Git sane just makes it clear that you haven't used a sane source management system." [1]

"Lots of people are too busy/whatever to know what they are missing, maybe that's you. It's not me" [3]

>When disagreeing, please reply to the argument instead of calling names. "That is idiotic; 1 + 1 is 2, not 3" can be shortened to "1 + 1 is 2, not 3."

"Arguing with some random dude who thinks he knows more than me is not really fun." [3]

"Dude, troll much?" [4]

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

[2] https://news.ycombinator.com/item?id=16807652

[3] https://news.ycombinator.com/item?id=16806877

[4] https://news.ycombinator.com/item?id=16807763

At least I had the decency to correct dishonest statements with vanilla citations in my posts, and they still got ignored.

Re:Why SQLite Does Not Use Git by dang on Wednesday April 11, 2018 @04:52PM (#16815489)
Some of the things you quoted there are admittedly borderline, but you went much further across the nastiness line. Could you please just not do that? It isn't necessary, and it weakens whatever substantive points you have.
Re:Why SQLite Does Not Use Git by kadenshep on Wednesday April 11, 2018 @07:44PM (#16816825)
>borderline, but you went much further across the nastiness line.

I didn't insinuate that people are worth less than pets that I bought and own (who can't even choose who to be dependent on) because they don't agree with my perspectives over a piece of software. In what context would this be an acceptable statement to make face to face or in a public setting and you go "well, you know, it's kind of okay to say!"

I'm exceedingly interested in where I crossed that line in a considerable manner because that's one distant line to cross. Next time someone says something I perceive to be incorrect, or they get on my nerves for continually disagreeing with me, I'll be sure to tell them my dog is worth more than them since that's actively being allowed and has a precedent of moderator support.

And for the record, my tone is probably "abrasive" in this post because the above actions and outright blind eye towards outright lies and uncalled for statements is aggravating. I have a feeling you're not doing anything just because of who he is, and not because what he is saying is warranted or even accurate (it's definitely not, as I demonstrated across several different posts).

I've archived this thread so people are free to review my actions and moderator actions at a later date: https://web.archive.org/web/20180411062201/https://news.ycom...

I've said my piece.

Re:Why SQLite Does Not Use Git by iliaznk on Tuesday April 10, 2018 @11:35PM (#16807830)
Exactly, it was no longer mysterious for me after I had to prepare a written branching procedure for our team starting from how to branch off, commit, rebase to doing resets and working with reflog. While doing that I've thoroughly read the official docs, examined lots of examples, created a local repo with a couple of text files to test various commands. An then it became so clear and simple! Especially the reflog – so powerful!

So, my advice is to try to write some instructions for yourself for all the common cases you might run into during your work. It will not only help you realise what you actually need from git, but also will serve as a good cheat-sheet.

Re:Why SQLite Does Not Use Git by mikez302 on Tuesday April 10, 2018 @11:43PM (#16807861)
This looks like a good chair lift: http://gitless.com/
Re:Why SQLite Does Not Use Git by sammygutierrez on Tuesday April 10, 2018 @10:10PM (#16807506)
Git Pro's chapter on git internals does a good job of explaining some of the things going on under the hood.

https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Po...

Re:Why SQLite Does Not Use Git by zwischenzug on Wednesday April 11, 2018 @06:02AM (#16809562)
I wrote a book that tries to :)

https://leanpub.com/learngitthehardway

I start with simple examples and work up from there. It's based on training I've conducted at various companies, and avoids talk of Merkle trees or DAG.

Re:Why SQLite Does Not Use Git by TomK32 on Wednesday April 11, 2018 @02:50AM (#16808657)
Like `git help`? I has everything important grouped nicely and hints you to even more subcommands.