Cosa potrebbe essere abbastanza fattibile:
- Crea 2 repository: studente e insegnante.
- Clona sul tuo computer (può essere fatto con il client Github)
- Tu lavori solo nell'insegnante , non toccare mai lo studente.
Quindi la struttura della directory è 2 repo git clonato:
- / studente (con una cartella .git)
- / insegnante (con una cartella .git)
Metti dei marcatori attorno al codice "privato" nei commenti per la tua lingua, ad esempio javascript di seguito. I marcatori indicano dove inizia e finisce il codice privato.
function sum(a, b) {
// -----------------------START
return a + b; // so this is what you expect from the student
// -----------------------END
}
console.log(sum(1,1)); // I expect 2 as a result of your homework
Quindi crea un semplice script sul tuo computer locale:
files.forEach((fileContent, fileName) => {
let newFileContent = '';
let public = true;
fileContent.forEach((line) => {
switch(line) {
case '// -----------------------START':
public = false;
break;
case '// -----------------------END':
public = true;
break;
default:
if(public) {
newFileContent = newFileContent + line + "\n";
}
}
});
writeFile('../student/' + fileName, newFileContent);
});
Sarà: prendi tutti i tuoi file e copia i contenuti su / student (sovrascrittura) senza le parti contrassegnate private del codice. Se vuoi, puoi inserire delle linee vuote ma potrebbe dare un suggerimento sul tipo di soluzione che ti aspetti.
È un codice di esempio non testato, quindi è probabile che tu debba fare un po 'di debug.
Ora la sola cosa che devi fare è commettere e inserire nel repository degli studenti quando sei soddisfatto dell'output. Ciò può essere fatto con un clic quando si utilizza il client GitHub (in modo da poter eseguire una rapida revisione visiva) o semplicemente farlo manualmente sulla riga di comando.
Il repository per studenti è un repository di output solo per essere sempre aggiornato, agli studenti è chiaro cosa è cambiato guardando i commit (perché mostrano solo cambiamenti) ed è semplice da gestire.
Un ulteriore passo sarebbe quello di creare un git-hook-hook che esegue automaticamente lo script.
Modifica: vedi che hai apportato una modifica al tuo post:
Obviously I don't want the students to have access to the solution
(until the assignment is over).
Ho il sospetto che sia chiaro ma completo: basta rimuovere i tag attorno all'esercizio finito e la risposta verrà pubblicata nello stesso modo in cui si farebbe per i normali aggiornamenti degli esercizi.