Learn Git in the Browser
try.github.io
try.github.io
http://pcottle.github.io/learnGitBranching/?demo
I found the try.github.io tutorial very underwhelming -- it emulates enough of git to just fall into the uncanny valley. I also prefer visual learning -- hence I made the above!
People who spend less then 5 hours a week coding probably don't need git and I think it's stupid that people replace SVN everywhere with git. Git's power is the power user and the shell. I can only suggest to use GUI tools in that case. They don't allow you to do anything but its harder to break things as well. The problem here is not git though. At least not in my mind. The problem is that many people who don't know git very well try to apply it to use cases which are not git's strength.
In any case your concerns are valid. If I disagree at all it's with the path to solution.
It's when things don't go as planned it's easy to feel trapped in a corner. e.g. did a git pull that causes a merge, how to undo that step and do a git pull --rebase instead. How to dig yourself out of doing a git merge in the wrong branch. How to revert the 4th last commit only etc.
There's http://hginit.com. Given your comment about "I didn't need a tuturial for Subversion", though, maybe you'll find that inadequate, too. As someone who tried using SVN before ever touching hg or git or its forebears, I found SVN baffling. To me, the DVCSes make sense. HgInit's "Subversion Re-education" page says:
> Mercurial separates the act of committing new code from the act of inflicting it on everybody else.
The fact that this isn't the case in SVN is mystifying to me.
I still struggle with git. In fact, I don't use it, largely because I still don't know how to use it. Note how I said that "the DVCSes make sense". I say that, because I can read "Understanding Git Conceptually" <http://www.sbf5.com/~cduan/technical/git/>--which a number of HN commenters have posted before--and I get it. The problem is not that I don't understand the concepts backing git. It's that I don't understand how these concepts map onto git's infuriatingly obtuse UI.
So use Mercurial. Because,
a) it's better (read: nicer to use), and b) when you use Mercurial, it comes with the benefit that you're helping inoculate the dev world against a DVCS monoculture.
If it helps, know this: I write as someone whose use case is largely the one you outline. I mostly find myself working alone, on a side project of mine where I'm the only committer.
# Crystallize your changes in a revision marked with your
# commit comment:
hg commit
That's it, pretty much. Occasionally you'll need to do an hg addremove to make sure Mercurial isn't ignoring any new files you've introduced (hg add and hg remove if you want to do things manually), and an hg mv whenever you need to move things around.Everything ramps up pretty sensibly and steadily from there, so that you're really only spending the mindspace to pay for the features you're really using.
For example, if you have a public-facing repo:
hg push # read as "publish", if it helps.
Do this, occasionally preceded by an hg out (when you find that you want to see what you'll be pushing), and you're good to go.... aaaaand HN is busted, and won't update the post when I try to edit that to fix the link.
That's http://www.sbf5.com/~cduan/technical/git/ for convenience.
That said . should be specified per manpages:
> If no <pathspec> is given, the current version of Git defaults to "."; in other words, update all files in the current directory and its subdirectories. This default will change in a future version of Git, hence the form without <pathspec> should not be used.
> You can also type `git add -A .` where the dot stands for the current directory, so everything in and beneath it is added. The `-A` ensures even file deletions are included.
new file mode 100644
index 0000000..cfbc74a
And you have all of these symbols that show up in the diff like "+[m" before a new line (why not just +?). I imagine there are good reasons for all of this, but I also feel like some of this should be hidden behind a --verbose flag or something.
Try if calling git diff --no-color, if this helps then something is broken on your setup. Another way i could see that happening is if you have color set to 'always' and then use some app that wraps git's command line output.
diff --git a/octocat.txt b/octocat.txt
index 7d8d808..e725ef6 100644
--- a/octocat.txt
+++ b/octocat.txt
@@ -1 +1 @@
-A Tale of Two Octocats
+[mA Tale of Two Octocats and an Octodog diff --git a/octocat.txt b/octocat.txt
index 7d8d808..e725ef6 100644
--- a/octocat.txt
+++ b/octocat.txt
@@ -1 +1 @@
-A Tale of Two Octocats
+A Tale of Two Octocats and an OctodogI feel like I was just doing what I was told rather than learning. Is this more for individuals with SCM experience or beginners?
Our advice box is something for people who want to learn more, it's not essential enough to be below the command before the output.
To summarize, this is not a load problem, it looks like a display bug. We'll look into it but I can't promise this will work on your iPad anytime soon, sorry.
Thanks a lot for the feedback. :-)
Does anybody have a good tutorial for "Code Version Control for Dummies (while using Git)"?