Je suis un conférencier qui écrit des problèmes de codage pour les étudiants. Ce que je veux faire, c'est donner aux étudiants le code passe-partout avec des espaces réservés pour les fonctions que les étudiants doivent remplir. Je vais donner aux étudiants l'accès à un dépôt github privé pour cloner cela.
Cependant, je veux également une version de la base de code, avec des exemples de solutions. Évidemment, je ne veux pas que les étudiants aient accès à la solution (jusqu'à ce que le travail soit terminé).
J'ai pensé aux succursales, mais AFAIK, je ne peux pas garder une succursale privée.
Je pourrais peut-être bifurquer le projet dans un autre dépôt privé, mais je ne sais pas comment je pourrais conserver les projets dans snyc (à l'exception du fichier qui contient la solution).
Existe-t-il un workflow pour cette situation?
Réponses:
Ce qui pourrait être tout à fait faisable:
Donc, votre structure de répertoire est composée de 2 repo git clonés:
Vous mettez des marqueurs autour du code "privé" dans les commentaires de votre langue, exemple javascript ci-dessous. Les marqueurs indiquent où commence et se termine le code privé.
Faites ensuite un script simple sur votre machine locale:
Il: prendra tous vos fichiers et copiera le contenu dans / student (écrasement) sans les parties marquées privées du code. Si vous le souhaitez, vous pouvez y insérer des lignes vides, mais cela pourrait vous donner une idée du type de solution que vous attendez.
Il s'agit d'un exemple de code non testé, vous devrez donc probablement effectuer un débogage.
Maintenant, la seule chose que vous avez à faire est de valider et d'introduire le référentiel des étudiants lorsque vous êtes satisfait de la sortie. Cela peut être fait en un clic lors de l'utilisation du client GitHub (vous pouvez donc faire un examen visuel rapide) ou simplement le faire manuellement en ligne de commande.
Le repo des étudiants est uniquement un référentiel de sortie, il restera donc toujours à jour, il est clair pour les étudiants ce qui a changé en regardant les commits (car ils ne montrent que les changements) et c'est simple à gérer.
Une étape supplémentaire serait de créer un crochet de validation git qui exécute automatiquement votre script.
Modifier: voyez que vous avez modifié votre message:
Je suppose que c'est clair mais pour être complet: il suffit de supprimer les balises autour de l'exercice terminé pour publier la réponse de la même manière que pour les mises à jour normales des exercices.
la source
Vous pourriez
Voici comment j'implémenterais ce workflow:
assignments
hébergé sur GitHub. Ajoutez le code passe-partout pour les affectations. Par exemple, pour chaque affectation, vous introduisez un nouveau sous-répertoire contenant le code passe-partout de l'affectation.assignments-solved
sur GitHub. Clonez leassignments
référentiel sur votre machine et poussez-le vers leassignments-solved
référentiel (essentiellement créez votre propre référentiel en tant que copie privée):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
référentiel en tant que télécommande auassignments
référentiel:cd assignments # change to the assignments repo on your machine git remote add solutions https://github.com/[user]/assignments-solved
assignments-solved
référentiel. Assurez-vous que chaque validation ne contient que les modifications d'une affectation.solved
branche dans leassignments
référentiel, afin que les affectations d'origine ne soient pas modifiées:cd assignments # change to the assignments repo on your machine git branch -b solutions git push -u origin
assignments
, récupérez lasolved
télécommande etcherry-pick
les validations contenant les solutions.cd assignments # change to the assignments repo on your machine git checkout solved git fetch solutions git cherry-pick [commithash]
Où[commithash]
contient le commit de votre solution.Vous pouvez également implémenter le workflow en implémentant chaque affectation dans une branche distincte du
assignments-solved
référentiel, puis en créant une pull-request dans leassignments
référentiel. Mais je ne sais pas si cela fonctionnera dans GitHub, car leassignments-solved
dépôt n'est pas un vrai fork.la source
Je peux juste vous proposer un utilitaire destiné à
.gitignore
-ing et crypter des fichiers dans votre référentiel. Le flux de travail est légèrement difficile à utiliser, mais il rend les homologues chiffrés de vos fichiers disponibles sur la copie de travail avec d'autres fichiers non secrets, ce qui permet de les suivre par git comme d'habitude.Pour créer un fichier secret avec le
a.txt
type de nom de fichiersshare -a a.txt
. Utilitaire de création de fichiera.txt
et fichier ajouté à.gitignore
. Ensuite, il crée l'homologue "base de données" chiffréa.txt.sshare
en ajoutant une.sshare
extension au nom de fichier.Ensuite, vous pouvez remplir
a.txt
avec du texte. Pour enregistrer son état juste avant legit commit
typesshare -s a.txt
, l'utilitaire vous invite à saisir un mot de passe pour crypter le nouvel état du fichiera.txt
. Ensuite, l'utilisation de ce mot de passe ajoute un diff chiffré entre l'état précédent et l'état actuel du fichiera.txt
à la fin dua.txt.sshare
fichier.Après avoir récupéré / extrait le référentiel avec des fichiers chiffrés, vous devez exécuter l'
sshare
utilitaire pour chaque fichier à l'aide de la-l
clé ("load"). Dans ce cas, l'utilitaire décrypte les*.sshare
fichiers en fichiers texte non suivis par git dans la copie de travail.Vous pouvez utiliser des mots de passe différents pour chaque fichier secret.
L'utilitaire permet à git de suivre efficacement les modifications (la différence des
.sshare
fichiers est simplement une ligne).la source