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 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.