Using Git/GitHub for final projects

teaching
git

#1

I would love to hear any and all suggestions for teaching students how best to collaborate on final projects using Git/GitHub. I am fortunate to have a strong masters-level class that is excited about getting experience doing so, and so far has picked up working individually with Git/RStudio and GitHub.com with fewer problems than expected (knock on wood). To be clear, this is a question about how to teach students how to organize a project and maintain a productive workflow with Git/GitHub, not how to teach Git commands. I’ve done some online searches and have not found what I’m looking for.

I am interested in all aspects of the collaboration:

  • Are organizations the way to go for shared work?

  • Should one student take more of a leadership role or should all students have the same authority to make changes to the repo (either formally or informally)?

  • What are best practices for avoiding conflicts, communicating, etc. etc.?

I should mention that this semester I am not requiring that they use Git/GitHub since frankly I fear some of them getting into messes that jam up their final projects beyond repair. The hope is that I’ll get enough kinks out doing this on a trial basis that I will be able to require it in the future.

Many thanks,
Joyce


#2

I am currently teaching a course for which the students submit all of their projects using github as well as collaborate with one another.

For the collaboration part, I found it worked really well for one student in each group to make a repo and to add the others as collaborators so that they each have equal authority over the repo. I wanted to simulate the most likely collaboration situation they would encounter in the wild rather than using an organization or any other high level setup.

In terms of reducing conflicts etc it’s just a matter of the students making sure that they know to pull frequently and utilize github issues for discussion…


#3

I organize my class in a GitHub organization that we use all throughout the semester. We use one repo per assignment (project, homework, etc.) per student (or team, if team based assignment). You could create an organization and create as many repos as there are teams in your class. One benefit of this is that you can then apply for academic private repositories (which GitHub generously approves). This way the project repositories will be private, which is useful for FERPA (if you’re in the US) as well as for keeping student work private from others in the class (assuming you don’t want them sharing work across teams).

I do it such that all have write access to the repo (but none have admin access). I think it might be risky to give that role to one student because what if they’re being unresponsive? I can imagine it could create team dynamic issues. That being said, if you want to make sure all contribute to the work, assigning roles (not GitHub roles, but roles in general) can be helpful.

Tough question! When you say conflicts do you mean merge conflicts or personal conflicts? If former, that’s easier :wink: I like going through a merge conflict demo in class, where we actually cause merge conflicts for students and take our time to resolve it. These are the instructions I used this semester, and it worked well: http://www2.stat.duke.edu/courses/Fall17/sta112.01/slides/05-deck.html#1. That being said, students tend to find their own ways of avoiding them, which mostly consists of working physically together or texting each other to say “hey, I’m working on this file, don’t touch it”. I don’t discourage this, it’s still communication after all. It’s just important to make sure they know how to resolve it should a merge conflict occur. For communication in my course we use Slack throughout the semester, but I think it’s a neat idea to have them use issues and use that to track their progress. I’ll be encouraging that more for our final project.

For the future courses where you require git for the final project, my suggestion would be to require it for the entire semester. It takes time to develop a good git workflow, and in my opinion, the final project might be too stressful a time to add this layer on. But regardless of when you introduce it, I think it’s essential to carve out some class time to teach them the basics of what they need to do in git before letting them loose with an assignment.

Lastly, unless using the Terminal is a learning goal of your course, I strongly recommend working with the RStudio git interface only for students. It’s my experience that it works beautifully 95% of what the students need to do (and the visual diff is oh so nice!) and in the 5% of the time where they manage to get so stuck that they’d need the command line, they ask me for help anyway so we sit down and figure it out together.


#4

GitHub actually has a built-in education platform called GitHub Classroom, which allows you to do stuff like set assignments that are handled as repos (and I think you can set up starter repos to be forked by students too). It can be used with either free or paid accounts for no additional accounts, and the Student Pack allows you unlimited private repos for use with organisations like these (although the first time I applied for it, it took a month or so to go through). Maybe start with that :smile:


#5

Thank you… these are all super helpful suggestions. On the communication question, is there really nothing better than setting up a Slack channel to say “I’m working on this file.”? If not, it sure seems to me that a sophisticated collaboration tool should have an option for something like >git mark myfile "working on lines 100-150", which would add a tag with my username and this message to the file. It would remain in effect until I remove or change it. (Even bathrooms have “occupied” / “vacant” tags!)


#6

GitHub has the Issues feature to handle task organization. Students would list what needs to be added, fixed, or enhanced. Then they can assign issues so they know who’s working on what.