Lo que podría ser bastante factible:
- Crear 2 repositorios: alumno y profesor.
- Clonarlos en su máquina (se puede hacer con el cliente Github)
- Trabajas solo en profesor , nunca tocas estudiante.
Entonces su estructura de directorio es 2 clones de repositorios de git:
- / estudiante (con una carpeta .git)
- / profesor (con una carpeta .git)
Pones marcadores alrededor del código "privado" en los comentarios para tu idioma, por ejemplo, javascript a continuación. Los marcadores indican dónde comienza y termina el código privado.
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
Luego haga un script simple en su máquina local:
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);
});
Tomará todos sus archivos y copiará el contenido a / student (sobrescritura) sin las partes privadas marcadas del código. Si lo desea, puede insertar líneas vacías allí, pero eso puede dar una pista sobre qué tipo de solución espera.
Es un código de ejemplo no probado, por lo que es probable que deba realizar alguna depuración.
Ahora lo único que tiene que hacer es comprometerse e ingresar al repositorio de estudiantes cuando esté satisfecho con el resultado. Eso se puede hacer con un solo clic cuando se usa el cliente GitHub (para que pueda hacer una revisión visual rápida) o simplemente hacerlo manualmente en la línea de comandos.
El repositorio de estudiantes es un repositorio de salida solo, por lo que siempre estará actualizado, para los estudiantes está claro qué ha cambiado al observar los commits (porque solo muestran cambios) y es fácil de manejar.
Un paso más allá sería crear un git commit-hook que ejecute automáticamente su script.
Editar: veo que has realizado una edición en tu publicación:
Obviamente no quiero que los estudiantes tengan acceso a la solución (hasta que termine la tarea).
Sospecho que está claro, pero para completar: simplemente elimine las etiquetas alrededor del ejercicio terminado y publicará la respuesta de la misma manera que lo haría para las actualizaciones normales de los ejercicios.