4 ms·
Git has many problems. (1) Many git commands have many variants that do different, sometimes very different things. (2) There are many different ways, includi
by NumberSix 13y ago
Git has many problems.
(1) Many git commands have many variants that do different, sometimes very different things.
(2) There are many different ways, including variants of many different base commands, to do very similar, but not identical things. These are not aliases for the same action, but rather commands with similar, overlapping, but still different effects. For example, should I do a "git reset", "git revert", "git checkout", or more complicated acrobatics with branches, merges, rebasing etc. just to discard some work that I don't want?
(3) One of the many adverse consequences of this is that if you Google how to do many things in Git, you will often find several conflicting answers. Unless you already know a lot about Git, in which case you don't need to Google how to do something in Git, this is very unhelpful.
(4) Git uses cryptic 40 character hexadecimal SHA-1 codes to identify commits rather than a sequential numbering system. This means for example that one cannot tell automatically from two SHA-1 codes which commit or file came before or after the other.
(5) Git's branching scheme makes it difficult to set up a traditional test/development/production system where a developer can easily checkout the production code for the system except for their sub-system AND the development version of one or more other sub-systems.
(6) Git's branching system tends to result in work being scattered across dozens of private branches belonging to different developers or teams making integration difficult.
(7) Git user interfaces fail to hide the low level, complicated command line interface from users. Something usually goes wrong that requires reverting to the command line to sort out what happened and fix it.
(8) It is difficult to attach human readable names such as "release candidate 1" to git commits. There are "tags" but by default they are not pushed to remote repositories. It is possible to set up repositories to block a push with human readable tags; the remote git user lacks permission to push a commit with the tags.
(9) Git's extreme complexity means it is used in very different ways at different companies and organizations. Different companies and organizations often add further systems on as wrappers around Git, e.g. the Gerrit code review system. For example, some Git users essentially never use rebase while others have a process that makes heavy use of rebase.
(10) Git enthusiasts usually respond to criticisms such as this by proceeding to explain or attempt to explain some complicated set of acrobatics in Git, often involving several cryptic variants of several commands, that may solve the problem but is impractical to remember and reuse or document.
(11) Git uses many different names for the same concept or component of Git such as index and staging area. This is confusing even after several months of using Git.
- Crito 13y ago1) True. This is a mild annoyance. Particularly I think that the -b flag of checkout should be removed and instead checkout functionality should be added to git-branch. 2) I don't see the problem. reset, revert, and commit each do different things... 3) This hasn't been my experience. When in doubt, go with the top SO answer I guess? 4) Absolutely not a problem; this is a feature. Sequential numbering is not a powerful enough concept to fit what is possible in git. Just for starters it begins to break down when you realize that relativity of simultaneity kicks in with DVC. 5) What? How? I do that all the time... 6) If your team is refusing to work with each other, that is an organizational failing. You've got some problems there that are not related to git. 7) Wait, what UI are you normally using? 8) I suppose I can see this would be annoying if you are frequently pushing very large numbers of tags. Though the second complaint does not make sense to me; why would you configure your repo to reject pushed tags if you want to push tags? If you want to do that, then don't do that. 9) "That's a feature."™ 10) Zero cryptic commands above. I aim to please. 11) Eh, such is language. I wouldn't be opposed to tightening up the docs, but I don't believe anybody really has serious issues with this.