O que poderia ser bastante factível:
- Crie 2 repositórios: aluno e professor.
- Clone-os na sua máquina (pode ser feito com o cliente Github)
- Você trabalha apenas com professor , nunca toque em aluno.
Portanto, sua estrutura de diretórios é composta por 2 repositórios git clonados:
- / student (com uma pasta .git)
- / teacher (com uma pasta .git)
Você coloca marcadores em torno do código "privado" nos comentários para o seu idioma, exemplo javascript abaixo. Os marcadores indicam onde o código privado inicia e termina.
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
Em seguida, faça um script simples em sua 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);
});
Ele irá: pegar todos os seus arquivos e copiar o conteúdo para / student (sobrescrevendo) sem as partes marcadas particulares do código. Se você quiser, pode inserir linhas vazias lá, mas isso pode dar uma dica sobre que tipo de solução você espera.
É um exemplo de código não testado, portanto é provável que você precise fazer alguma depuração.
Agora, a única coisa que você precisa fazer é confirmar e enviar o repositório do aluno quando estiver satisfeito com a saída. Isso pode ser feito com um clique ao usar o cliente GitHub (para que você possa fazer uma revisão visual rápida) ou apenas manualmente na linha de comando.
O repositório de alunos é apenas um repositório de saída, para que ele fique sempre atualizado, é claro para os alunos o que mudou observando os commits (porque eles apenas mostram alterações) e é simples de manusear.
Um passo adiante seria criar um gancho de confirmação do git que executa automaticamente seu script.
Editar: veja que você fez uma edição em sua postagem:
Obviamente, não quero que os alunos tenham acesso à solução (até que a tarefa termine).
Suspeito que esteja claro, mas deve estar completo: basta remover as tags em torno do exercício final e publicará a resposta da mesma maneira que faria nas atualizações normais dos exercícios.