Eu sou um professor escrevendo problemas de codificação para os alunos. O que eu quero fazer é fornecer aos alunos o código padrão com espaços reservados para as funções que os alunos devem concluir. Darei aos alunos acesso a um repositório privado do github para clonar isso.
No entanto, também quero uma versão da base de código, completa com soluções de amostra. Obviamente, não quero que os alunos tenham acesso à solução (até que a tarefa termine).
Eu pensei em ramificações, mas AFAIK, não posso manter uma ramificação privada.
Talvez eu possa dividir o projeto em outro repositório particular, mas não tenho certeza de como manter os projetos em snyc (além do arquivo que contém a solução).
Existe um fluxo de trabalho para esta situação?
Respostas:
O que poderia ser bastante factível:
Portanto, sua estrutura de diretórios é composta por 2 repositórios git clonados:
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.
Em seguida, faça um script simples em sua máquina local:
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:
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.
fonte
Você poderia
É assim que eu implementaria esse fluxo de trabalho:
assignments
hospedado no GitHub. Adicione o código padrão para as atribuições. Por exemplo, para cada tarefa, você introduz um novo subdiretório que contém o código padrão da tarefa.assignments-solved
no GitHub. Clone o repositórioassignments
em sua máquina e envie-o para oassignments-solved
repositório (essencialmente bifurque seu próprio repositório como uma cópia privada):git clone https://github.com/[user]/assignments assignments-solved cd assignments-solved git remote set-url origin https://github.com/[user]/assignments-solved git push origin master git push --all
assignments-solved
repositório como remoto aoassignments
repositório:cd assignments # change to the assignments repo on your machine git remote add solutions https://github.com/[user]/assignments-solved
assignments-solved
repositório. Verifique se cada confirmação contém apenas alterações de uma atribuição.solved
ramificação noassignments
repositório, para que as atribuições originais não sejam alteradas:cd assignments # change to the assignments repo on your machine git branch -b solutions git push -u origin
assignments
, busque osolved
controle remoto echerry-pick
as confirmações que contêm as soluções.cd assignments # change to the assignments repo on your machine git checkout solved git fetch solutions git cherry-pick [commithash]
Onde[commithash]
contém o commit da sua solução.Você também pode implementar o fluxo de trabalho implementando cada atribuição em uma ramificação separada do
assignments-solved
repositório e, em seguida, criando uma solicitação deassignments
recebimento no repositório. Mas não tenho certeza se isso funcionará no GitHub, pois oassignments-solved
repositório não é um verdadeiro fork.fonte
Apenas posso propor a você um utilitário destinado a criar
.gitignore
e criptografar arquivos em seu repositório. O fluxo de trabalho é um pouco difícil de usar, mas disponibiliza as cópias criptografadas de seus arquivos na cópia de trabalho junto com outros arquivos não secretos, o que permite rastreá-los pelo git, como de costume.Para criar um arquivo secreto com o
a.txt
tipo de nome de arquivosshare -a a.txt
. Utilitário criar arquivoa.txt
e arquivo adicionado a.gitignore
. Em seguida, ele cria uma contraparte criptografada do "banco de dados"a.txt.sshare
adicionando.sshare
extensão ao nome do arquivo.Então você pode preencher
a.txt
com algum texto. Para salvar seu estado imediatamente antes dogit commit
tiposshare -s a.txt
, o utilitário solicita uma senha para criptografar o novo estado do arquivoa.txt
. Em seguida, o utilitário usando essa senha adiciona diferenças criptografadas entre o estado anterior e o atual do arquivoa.txt
no final doa.txt.sshare
arquivo.Após buscar / puxar o repositório com arquivos criptografados, você deve executar o
sshare
utilitário para cada arquivo usando a chave-l
("load"). Nesse caso, o utilitário descriptografa*.sshare
arquivos para arquivos de texto não rastreados pelo git na cópia de trabalho.Você pode usar senhas diferentes para cada arquivo secreto.
O utilitário permite que o git rastreie as alterações com eficiência (a diferença de
.sshare
arquivos é simplesmente uma linha).fonte