Похоже на установку, которой Mercurial хорошо оснащен.Я хотел бы поддерживать простой базовый репозиторий с заданиями, где вы помечаете приращения.Вы можете сделать доступной только часть до текущего назначения, отправив только эти части в общедоступный репозиторий.Тогда все учащиеся могут его клонировать (разветвлять), а когда придет время для нового задания, просто скажите своим студентам вытащить и объединить изменения из следующего тега.
Таким образом, клон каждого студента по сути является ветвью,и изменения распространяются путем создания их на базе и последующего слияния.Если есть конфликты, студенты будут лучше подходить для их решения, так как они знают свой код и внесенные изменения.(Хотя они, возможно, не очень знакомы с управлением версиями и разрешением конфликтов, но я думаю, смысл в том, чтобы заставить их использовать Mercurial, чтобы научить их.) Я бы не стал толкать изменения в учениках.
Попытка визуального представления:
o -- o -- o [solution1] ------------------ o [solution2]
/ /
Base: o == o == o [assignment1] == o == o [assignment2] == o == o [assignment3]
|\ |\
Student 1: | o -- o -- o ------------o (merge) -- o
\ |
Student 2: o -- o -- o -- o ----- o (merge) -- o -- o
Я думаю, что решения должны быть ответвлениями от заданий, как это делают студенты.В конце концов, это, по сути, все решения, только у этого есть официальная печать одобрения.Другая причина отделения решений состоит в том, что в противном случае они могли бы серьезно конфликтовать с изменениями студентов.
Обратите внимание, что, поскольку изменения из филиалов студентов никогда не объединяются (это было бы невозможно),Шансы на конфликты увеличиваются с каждым назначением.Поэтому вам, вероятно, следует постараться, чтобы ваш код и код студента были как можно более модульными, это уменьшит вероятность конфликтов.