It's encouraging to see these skills start to make their way in earlier in computing education. I'm a college professor and teach (among other things) our Software Engineering class so this subject is near and dear to my heart. To answer your questions one by one:
When does revision control rise to the level of a "needed understanding" for students?
From what I observe, it becomes most essential once students are working on non-trivial projects. That is, once projects are collaborative OR last for more than a couple weeks OR intend to be actual software with real users, then maintaining versions of the source code becomes more and more valuable. With the combination of more than one of those factors, it becomes more essential.
What are essential skills with revision control tools?
Essential to a professional or to a beginning programmer? To put it broadly, college students should learn to be able to efficiently share code across a team and maintain its versions over time. That means being comfortable working with remote repositories and resolving merge conflicts as well.
What are best practices (or good sources for learning about them)?
That is a big question that could have its own long answer. However, since your students will be working in teams, one of the worst habits I see in students is when they want their code to be perfect and "done" before sharing it with anyone else. This often comes from a place of either perfectionism or a lack of confidence. When students wait too long to try to merge their work with others', the differences are often very difficult to resolve. Get students to practice making targeted, small changes and sharing those revisions early and often.
What tools to teach? I'm comfortable with Git and GitHub, and they are widely used, but are they good teaching tools?
Yes, they work well and students tend to appreciate gaining exposure to them because they are so common in industry. GitHub is steadily improving in how they support educational use. Students can get free accounts and GitHub Classroom is helpful at some unique classroom needs (such as batch downloading all project submissions, or giving students "skeleton" code but keeping each student's fork private to just the individual student and the instructor).
Command line vs. GUI vs. IDE integrated interface?
Use what works with the rest of your class. I wouldn't change your environment just for the sake of Git. Several popular IDEs now integrate Git (and remote hosts like GitHub), but if you're not already using one that supports it, I recommend GitKraken -- a free, cross-platform GUI application -- if you want a consistent, easy interface for students.
Personally, I just use command line (and my students do too, but that doesn't necessarily mean it is appropriate for all classes/students).
If you're a college CS teacher, what do you want your incoming students to know?
Honestly, most students don't come in with any previous experience. Even in my (upper-level) Software Engineering class, I have to work with the assumption that some students will have never seen git before my class. In that respect, anything will be an improvement.
However, one request I make is try to avoid students getting in the habit of automatically staging all changed files (using git commit -a
or git add .
) all the time. It is a habit that is hard to break and makes for poor version documentation and ugly messes of unrelated changes being lumped together.
I also highly recommend using js.org's Learn Git Branching interactive tutorial, which is conveniently broken into small modules so you can assign the ones you think are most appropriate for your students. In Software Engineering, I require students to complete all the modules, but in introductory programming classes, they usually just learn some very basics (init, clone, pull, push, status, add, commit).