Live data from Hacker News

Git is too hard

changelog.com

71–80 of 821 posts

Re: Git is too hard

#71
Yes I agree there are issues with git, and this may be a great solution!

But the github cli tool being pushed on github as the defacto user interface feels like internet explorer all over again.

And this media flurry at the same time as the switch on github away from ssl links is disheartening, frightening, and just another example of Microsoft's fingerprints on this product and our ecosystem.

Combined with the recent DMCA takedown fiasco... I cannot wait until if or when web 3.0 decentralization makes these problems non issues.

Re: Git is too hard

#72
post #4

Git is one of those technologies where it's super important to get a good grasp of how to internals work. Once you got that, it get easier to answer git questions for others or yourself, and to read the documentation or man pages, as you know what is happening. With how software devs use git, it's 100% worth it to read a good book on it.

> Git is one of those technologies where it's super important to get a good grasp of how to internals work.

In my opinion relying too much on user understanding implementation is a mark of bad design. I don't care about more advanced functionalities of git, on daily basis I have very simple workflow that I want to "just work". Sure I can spend few days studying git internals, but it feels unnecessary. Especially given that in the past I've worked with simpler proprietary tools that "just work" (though did not have equivalent of "power" features).

On the other hand I think git is like bash - has some serious warts but it's good enough to be used widely; and unlikely to be replaced by anything else at this point.

Re: Git is too hard

#73
post #54
post #6

I don't agree at all. Git is the simplest version control system I've ever used. The concept of merging, rebasing, cherry-picking, and resetting works so naturally that I'm basically going to expect this level of ease of use from any VCS I use going forward. That being said, I know there are some who have trouble with Git. But IMO it isn't because Git is hard, but because they don't have to truly understand Git to us…

Agreed - I started to use version control back with SCCS somewhen in the early nineties, and RCS, CVS, Subversion, ClearCase, some Microsoft horror with a name I can't recall, and a few others. My conclusion is exactly the same as yours: " Git is the simplest version control system I've ever used. " And it also improved my overview over what happens and has happened in the past - I can jump back in for stuff I haven'…

Oh wow, ClearCase. That's a blast from the past that I'd forgotten even existed. CC was the stuff of nightmares.

Re: Git is too hard

#74
post #6

I don't agree at all. Git is the simplest version control system I've ever used. The concept of merging, rebasing, cherry-picking, and resetting works so naturally that I'm basically going to expect this level of ease of use from any VCS I use going forward. That being said, I know there are some who have trouble with Git. But IMO it isn't because Git is hard, but because they don't have to truly understand Git to us…

Exactly.

I like to say that git is a "white box". You need to understand the internals to be able to use it.

Contrast this with "black boxes" where you don't have to or even can't understand what's going on.

Some would argue that software shouldn't be built that way, but I will respectfully disagree. It's not an end user facing consumer product, it's a tool for professionals. You wouldn't expect anyone to operate a table saw or a milling machine without some understanding of what's inside the machine.

I do agree that the git user interface is inconsistent and full of caveats. But as long as you understand it's just a directed acyclic graph of commits, you can dig yourself out of any hole you get into.

Re: Git is too hard

#75
post #39

Git is hard because it precisely models the complexities of concurrently modifying source code on multiple computers. It explicitly models all of the concepts and operations that are relevant in that domain - branching, merging, my local changes, the server that my local branch is kept in sync with, rewriting local history, rewriting public history. Can you shoot yourself in the foot? Absolutely, because this stuff r…

It would be great to have a GUI tool that allows you to do common tasks with a sort of Wizard interface with validation, precise human-understandable explanations, delayed execution (like GParted) and Undo functions. Personally, I don't use GUI tools for Git because they are either as complex as the command line version or I'm afraid they do something under the hood that is not what I intended. I'm not sure GUI tools for Git are programmed in a way that makes data loss impossible.

Some kind of troubleshooter GUI tool that covers 90% of all use cases would be great. I'd certainly be willing to pay for it.

Re: Git is too hard

#76
post #2

If you cannot explain it, you don't really understand it.

The ability to communicate is a separate skill from the ability to comprehend something.

Once you separate the two skills you get 4 classes of people (with gradations):

1. don't understand it, cannot explain it. 2. do understand it, cannot explain it well. 3. don't understand it well, can explain it well. 4. understand it well, explain it well.

Number 2 are good practitioners and not as good teachers. Number 3 are good teachers but not as good practitioners. Number 4 are good teachers and good practitioners.

Everyone wants to learn from a number 4, but they are more rare then the 3s and 2s. Between a 2 and a 3, you'd rather learn from a 3. If you don't need to learn, you'd probably rather work with a 2 than a 3. Basically, even if their mental model isn't perfect, they deliver explanations that can quickly lead others to at least be as good as them and possibly better quickly if you can see the mistakes in their mental models (their descriptions could potentially be 100% accurate without it reflecting their poor mental model).

Anyways, this observation leads to the standard cliche, "Those that can, do; those that cannot, teach."

Re: Git is too hard

#77
Git is simply one of the tools you must learn to master as a modern software developer. If you'd say "but source control is simply too hard!" you would probably be asked to leave the building on the first opportunity, and I'd say rightly so. A craftsman that doesn't master his tools is a shoddy worker. I don't see how that is different for software engineers.

Also, modeling your tools around "how people think" is the wrong approach. Tools should be modeled around the process flow, and people should be taught to think in terms of that same process. "How people think" should not be leading, the process requirements should be leading.

> I have some changes. I wanna share it with Jon and Johnny so they can tell me what they think. And then maybe they can add their ideas. And then we can have a merging of our ideas, and eventually test out if it works, and have it out there and ship it.

So, no. You don't "have some changes". You have a piece of software source code. That source code is worthless without running it (or shipping it). And once you start running it, people (including yourself) will start to rely on how it works right now. If you change how it works, you need to

a) be able to explain what changed from one version to the next

b) be able to revert to the previous version if the new one is problematic

The first rule of source control is that it's not about sharing: it's about auditing your changes. From there you can start to work out the details, about sharing the source code with others, about developing multiple features in parallel, about maintaining multiple versions off the same codebase, etc.

But in the basis, git (or any vcs) is not a sharing tool, it's an auditing tool. Sharing is secondary.

Re: Git is too hard

#78
post #35

Is it git that's too hard, or is it that version control is too hard? I suspect that it's the latter. That is, version control is difficult and git is a powerful tool that exposes that difficulty and the many (complex) ways to approach version control.

The whole point of software is to reduce or manage complexity. Git cli fails miserably at this.

Google's perforce with mercurial client has been the best VCS I've ever used and I now have a deep hatred of everything that isn't that system, especially git.

Re: Git is too hard

#79
post #16
post #6

I don't agree at all. Git is the simplest version control system I've ever used. The concept of merging, rebasing, cherry-picking, and resetting works so naturally that I'm basically going to expect this level of ease of use from any VCS I use going forward. That being said, I know there are some who have trouble with Git. But IMO it isn't because Git is hard, but because they don't have to truly understand Git to us…

The only concept that I can't put into my muscle memory is reverting changes for one file before commit. This is very easy in SVN but for some reason it's not intuitive git (at least for me), why there can't be something like `git revert filename`. Thankfully I have GitKraren that is helping me with things like that.

There is now (as of version 2.23.0), you can use:

git restore filename

Re: Git is too hard

#80
post #9

I don't think git is hard at all, it's lightweight and elegant, and quite frankly, extremely logical to understand.. Sure, the syntax can be hard to grasp at first, but that's a reasonable price to pay for brevity tbh.

It's important to distinguish the UX from the internals. I don't know the internals, so they may be elegant and extremely logical, but the UX is terrible.

Git's UX, like a famous programming language, was never designed in a strict sense. It's clearly been written to solve immediate requirement, one by one, without a vision (again, from a UX perspective).

Result: the horrible checkout command, which does a zillion different things, and I bet only few users know all of them. Same goes for reset.

I don't remember all the checkout forms, and I couldn't use git without aliases.

The porcelain interface is another one. Excerpt:

  This is my fault, to some degree.
  The "short-status" form is meant for human eyeballs, and was designed by Junio.
  Some people wanted a scriptable status output, too, so I slapped a "--porcelain"
  on the same format that turns off configurable features like relative pathnames
  and colorizing, and makes an implicit promise that we won't make further changes
  to the format.
  The idea was to prevent people from scripting around --short, because it was never
  intended to be stable.
  So yeah, while --porcelain by itself is stable and scriptable, it is perhaps not
  the most friendly to parsers. The "-z --porcelain" format is much more so, and I
  would recommend it to anyone scripting around "git status"
Note the "slap" here; it's not random.
Post reply on HN