I use to prepare my lecture using PowerPoint. It works quite well, except it is not version control friendly. This means that whenever I need to re-teach and modify the content of a course, I need to copy and paste all my slides before I can modify them. This results in a lot of redundant content accumulated in my folder over the years.
To solve this problem, I switch to Reveal.js for presentation so that I can version control my lecture slides. It does take a bit of work to convert all my previous slides into Reveal.js initially (BTW, I found a person who can help me to convert my slides with a fee, which saves me a lot of time. If you are interested, let me know). However, once that’s done, I can now use GIT to version control all my slides, which is super nice. Below is a screenshot of my current slides folder for CS3249: user interface development. Each lecture is now an html file which can be nicely version controlled and shared online if I want to.

To manage my slides from year to year, I create branches for different years. For example, below is a screenshot of how I manage my branches.

2016_s2 is a branch contains the slides for last year. 2017_s2 is the branch for this semester. I also create a 2017_s2_pre branch to place my pre-lecture slides. These slides contain partial information that allow the students to look at before or during the lecture, without the information I don’t want them to know before the lecture, such as in-class quizzes, etc.
The workflow of lecture modification is now the following:
- checkout the branch for final version (e.g., git checkout 2017_s2)
- work on the individual file (e.g., cs3249_week1_intro.html)
- commit the changes (e.g., git commit -am “bla”)
- check out the pre-lecture branch (e.g., git checkout 2017_s2_pre)
- merge the changes I made earlier on a particular lecture to the pre lecture branch (e.g., git checkout 2017_s2 Lecture/cs3249_week1_intro.html). (Note: this step is important since I don’t want to redo my changes again in this branch)
- remove or hide content I don’t want to share with the class before the lecture
- commit the changes for the pre-lecture branch
- done!