Я лектор, пишущий проблемы кодирования для студентов. Что я хочу сделать, так это дать учащимся шаблонный код с заполнителями для функций, которые студенты должны выполнять. Я дам студентам доступ к частному репозиторию Github, чтобы клонировать это.
Однако я также хочу версию кодовой базы, дополненную примерами решений. Очевидно, я не хочу, чтобы студенты имели доступ к решению (пока задание не закончено).
Я думал о филиалах, но AFAIK, я не могу держать один филиал частным.
Возможно, я мог бы преобразовать проект в другое частное хранилище, но не уверен, как сохранить проекты в snyc (кроме файла, в котором содержится решение).
Есть ли рабочий процесс для этой ситуации?
Ответы:
Что может быть вполне выполнимо:
Итак, ваша структура каталогов - это 2 клонированных репозитория git:
Вы ставите маркеры вокруг "частного" кода в комментариях к вашему языку, например, на javascript ниже. Маркеры указывают, где начинается и заканчивается закрытый код.
Затем создайте простой скрипт на своей локальной машине:
Он будет: принимать все ваши файлы и копировать содержимое в / student (перезаписывать) без закрытых помеченных частей кода. Если вы хотите, вы можете вставить туда пустые строки, но это может дать подсказку о том, какое решение вы ожидаете.
Это непроверенный пример кода, так что скорее всего вам придется отладить.
Теперь единственное, что вам нужно сделать, это зафиксировать и вставить репозиторий ученика, когда вы довольны результатом. Это можно сделать одним щелчком мыши при использовании клиента GitHub (так что вы можете сделать быстрый визуальный обзор) или просто сделать это вручную в командной строке.
Репозиторий для учащихся - это выходной репозиторий, поэтому он всегда будет оставаться в курсе, студентам будет ясно, что изменилось, если посмотреть на коммиты (потому что они только показывают изменения), и с ним просто работать.
Еще одним шагом будет создание git commit-hook, который автоматически запускает ваш скрипт.
Редактировать: увидеть, что вы сделали редактирование вашего сообщения:
Я подозреваю, что это понятно, но для завершения: просто удалите теги вокруг законченного упражнения, и публикация ответа будет точно такой же, как вы делали бы это для обычных обновлений упражнений.
источник
Ты мог
Вот как я бы реализовал этот рабочий процесс:
assignments
размещенный на GitHub. Добавьте стандартный шаблон для назначений. Например, для каждого назначения вы вводите новый подкаталог, содержащий шаблонный код назначения.assignments-solved
на GitHub. Клонируйте репозиторийassignments
на своем компьютере и перенесите его вassignments-solved
репозиторий (по сути, создайте собственный репозиторий как личную копию):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
репо как удаленное кassignments
репо:cd assignments # change to the assignments repo on your machine git remote add solutions https://github.com/[user]/assignments-solved
assignments-solved
хранилище. Убедитесь, что каждый коммит содержит только изменения из одного назначения.solved
ветку вassignments
репо, чтобы исходные назначения не были изменены:cd assignments # change to the assignments repo on your machine git branch -b solutions git push -u origin
assignments
, извлекитеsolved
пульт иcherry-pick
коммиты, содержащие решения.cd assignments # change to the assignments repo on your machine git checkout solved git fetch solutions git cherry-pick [commithash]
Где[commithash]
содержится фиксация вашего решения.Вы также можете реализовать рабочий процесс, внедрив каждое назначение в отдельную ветку
assignments-solved
репо, а затем создав пул-запрос вassignments
репо. Но я не уверен, что это сработает в GitHub, так какassignments-solved
репо не является настоящим форком.источник
Я просто могу предложить вам утилиту, предназначенную для
.gitignore
шифрования и шифрования файлов в вашем хранилище. Рабочий процесс немного сложен в использовании, но он делает зашифрованные копии ваших файлов доступными в рабочей копии вместе с другими несекретными файлами, что позволяет отслеживать их с помощью git как обычно.Создать секретный файл с
a.txt
типом имени файлаsshare -a a.txt
. Утилита создания файлаa.txt
и файл добавлен в.gitignore
. Затем он создает зашифрованный аналог «базы данных»a.txt.sshare
, добавляя.sshare
расширение к имени файла.Затем вы можете заполнить
a.txt
текст. Чтобы сохранить свое состояние прямо передgit commit
вводомsshare -s a.txt
, утилита предложит вам ввести пароль для шифрования нового состояния файлаa.txt
. Затем утилита, использующая этот пароль, добавляет зашифрованный diff между предыдущим и текущим состоянием файлаa.txt
в конецa.txt.sshare
файла.После извлечения / извлечения репозитория с зашифрованными файлами вы должны запустить
sshare
утилиту для каждого файла, используя-l
(«загрузить») ключ. В этом случае утилита расшифровывает*.sshare
файлы в текстовые файлы, не отслеживаемые git в рабочей копии.Вы можете использовать разные пароли для каждого секретного файла.
Утилита позволяет мерзавец для трека эффективно изменяет ( дифф из
.sshare
файлов просто одной линии).источник