Git Magic
www-cs-students.stanford.edu
www-cs-students.stanford.edu
See for example the section on branches - it tells you to run certain commands (checkout -b) without telling you what's happening in the background. So while you kind-of get a feel for the command in the context it's being explained, you wouldn't know how to apply it to your context, unless your workflow and context is the same.
On the other hand, if you look at how branching is dealt with in the "official" book (https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-N...), it tells you very clearly what each command is doing in the background so you know exactly what's happening. Once you understand that, you know git.
I guess this is why it is called A Usage-First Guide to Git. You can always dig deeper, but in most cases people just starting out with git want to get things done without their heads exploding first.
Git is by far the simplest SCC system I've used because it is so easy to understand the data model. It lets me intuit the existence of commands because I know the kind of data model manipulation I want to apply and all I need to do is find the right incantation.
The "see it in action and delve into more details later" approach might not be the way you see the best practitioners developing their skillset, and starting at the theoretical basics and building from there might be the more academically rigorous approach, but it can be effective approach to directing learning.
If I was learning Java, I'd want to get cracking on developing a "Hello World" application before trying to understand the JVM.
From the tutorial:
We have created a Git repository that tracks one text file containing a certain message. Now type:
$ git checkout -b boss # nothing seems to change after this
$ echo "My boss is smarter than me" > myfile.txt
$ git commit -a -m "Another commit"
It looks like we’ve just overwritten our file and committed it. But it’s an illusion. Type:
$ git checkout master # switch to original version of the file
and hey presto! The text file is restored.
I also found Git much easier to understand with a GUI client so you can easily see the state of the repo. GitX is a good one (on Mac).
https://github.com/ryanrodemoyer/git-evangelism
I like Vim, but it's incredibly intimidating and frustrating that you get presented with Vim if all you want to do is experiment with merging. I'm going to stop myself here. I could go on a long rant about the awful system defaults.
I have a series of screencasts planned, some recorded, that follow through Git Evangelism so that you, the reader, can use Git confidently and successfully while avoiding the bizarre error states that plague new and seasoned users alike.
In addition, I have created a non-traditional in-person workshop event that helps new users build up their understanding of the Git data model and we go in detail on how that differs from a centralized source control system (ie. TFS VC).
Git Evangelism is in some ways heavily influenced by the thinking forced by centralized version control systems. At my current job, we are moving away from Team Foundation Server Version Control (TFSVC/TFVC) and to Git hosted by TFS. There is much in that document that is specifically geared towards Windows/TFS background although I have planned to make non-Windows specific updates (personally, I'm a Mac user).
The problem with most getting started guides for Git, is that they continue to put the reader in a position to fail rather than a position to succeed. Git has all kind of "gotchas" that guides skip over. A typical guide leads you through staging and committing and reverting but rarely does the guide explain the nuances such as difference between "git add ." and "git commit -a" or the value in using a tool like GitLab (besides that it's hipsterish) or what is a hard reset (hint, there's multiple meanings so it depends how it is used).
If you need to explain git to someone who has the option of not using it or isn't sold on the whole idea in the first place, this is the absolute best place to start.
The data model is very simple and clean (and most of git's benefits flow directly from the model).
The UI is awful... confusing and inconsistent.
The engineering is brilliant: informative error messages and hints; fast; great features (e.g. a better diff, with --color-words; logical argument parsing). The only significant things missing are deliberate design choices inherent in the data model. e.g.:
not storing renames explicitly (which BitKeeper did), so you can't easily search for changes in a file that was renamed/moved. It could be simulated with out-of-band info (like tags), but isn't.
[1]: https://magit.vc/
https://learngitbranching.js.org/
I've known git for years but anything more than push, pull, clone, merge, commit, and add I didn't really touch. This webapp definitely helped expand my git knowledge
Anyone wanting the latest should get this from GitHub and build it. [1] If you're not familiar with technology and someone pointed you to this to learn Git (like in the case of publishing), this step in itself could be a barrier.
Truly a great resource, thanks!
"[U]sing systems that scale poorly for tiny projects is like using Roman numerals for calculations involving small numbers."
For eg, if there is some quick project you need to do, and people in your team have been using say CVS, and there is not much wiggle room in the deadline, getting your team to use Git may not be the most smartest choice - I think that is what most people mean there when they talk about ‘tiny’ projects.
I will say that even if you are not truly starting from scratch, migrating to git has advantages more often, but I am wary of trivialising the people who think there is a cost associated to ( move to )a distributed system like git.
Convert simplified Chinese to traditional Chinese : `cconv -f UTF8-CN -t UTF8-TW`
Does this work? If so, how? My understanding is that there are certain simplified characters that map from multiple traditional characters.