I have a fairly substantial Python project that I have developed as an educational endeavor. The version of the code that shall be given to students has exercises throughout, in the form of code that I have deleted and replaced with an exception. To be specific:
def mk_eq_term(i): # raise ExerciseError("BitBlaster::bitblast_EQ_Core") return PL.And(val,PL.Iff(le.bits[i],re.bits[i]))
The last line is the real code; the second line is what shall be in the code given to students, once un-commented. I am not an expert on version control (in fact, at present, I do not use revision control), but my reading on the subject indicates that this use case is suboptimal. It seems like I will have to maintain two separate branches, and that any change I make against the "production" version will need to be reconciled against the "educational" version, even though I do not expect or intend to make changes to the codebase that will modify the exercise solutions.
What is the best solution for maintaining something like this?