On 11/10/2016 06:07 AM, Nick Sabalausky wrote: > On 11/08/2016 02:11 PM, Antonio Corbi wrote: >> >> Maybe this one is useful for you: >> >> http://eagain.net/articles/git-for-computer-scientists/ > On 11/08/2016 03:01 PM, H. S. Teoh via Digitalmars-d wrote: >> Nothing immediately comes to mind, but thanks to Dr. Google, I found >> this page that's sorta helpful: >> >> http://ericsink.com/vcbe/html/directed_acyclic_graphs.html >> >> And perhaps these: >> >> http://eagain.net/articles/git-for-computer-scientists/ >> http://marklodato.github.io/visual-git-guide/index-en.html >> > > Ok, so it looks like each node in the DAG is a commit. I'll definitely > have to read further. Thanks, both. > > Although I have my doubts it would explain all the issues I've hit upon > with git's CLI. For example: I don't see why annotated tags aren't the > default. Or why non-annotated ones even exist at all. When I made > <https://github.com/Abscissa/gen-package-version>, I noticed that it'll > *only* work if the version tags are "annotated" tags. Because otherwise > "git describe" doesn't retrieve the tag. Doesn't even matter one bit > *what* the tag's message is, just that it exists. Why? Who knows! It's git!
Studying git object model in more details actually explains that. Annotated tag is a first class git object (like commit), while plain tag is simply a reference to existing object (like branch). From usability PoV difference can be negligible but impact on git internals is huge. The fact that the default is non-annotated tag is still just plain bad decision though :) > Its things like that. I'd be surprised if that has much to do with git's > nature as a "dumb" DAG tool. It's just the general good-design principle > of "The thing you *want to* or *should* do or *expect* 99% of the time > should be the DEFAULT, not the obscure incantation". I think it is related, but is not necessary consequence. My understanding is that for a long time command line design was given zero thoughts on its own - it was directly exposing whatever git does internally with no usability considerations. Which is why it is so awkward to use unless you really do know internal object model in great details.
signature.asc
Description: OpenPGP digital signature
