Jestem wykładowcą piszącym problemy z kodowaniem dla studentów. To, co chcę zrobić, to dać uczniom kod z kodami zastępczymi dla funkcji, które studenci mają wykonać. Dam studentom dostęp do prywatnego repozytorium github, aby to sklonować.
Jednak chcę też wersję bazy kodu wraz z przykładowymi rozwiązaniami. Oczywiście nie chcę, aby uczniowie mieli dostęp do rozwiązania (do czasu zakończenia zadania).
Myślałem o oddziałach, ale AFAIK, nie mogę zachować jednego oddziału w tajemnicy.
Może mógłbym rozwidlić projekt na inne prywatne repozytorium, ale nie jestem pewien, jak mogę zachować projekty w snyc (oprócz pliku zawierającego rozwiązanie).
Czy istnieje przepływ pracy w tej sytuacji?
Odpowiedzi:
Co może być całkiem wykonalne:
Więc twoja struktura katalogów składa się z 2 sklonowanych repozytoriów git:
Umieszczasz znaczniki wokół „prywatnego” kodu w komentarzach dla twojego języka, na przykład javascript poniżej. Znaczniki wskazują, gdzie zaczyna się i kończy prywatny kod.
Następnie wykonaj prosty skrypt na komputerze lokalnym:
Będzie: pobierał wszystkie twoje pliki i kopiował zawartość do / student (nadpisywanie) bez zaznaczonych prywatnych części kodu. Jeśli chcesz, możesz wstawić puste wiersze, ale może to podpowiedzieć, jakiego rodzaju rozwiązania oczekujesz.
Jest to przykładowy kod, który nie został przetestowany, więc prawdopodobnie będziesz musiał przeprowadzić debugowanie.
Teraz jedyne, co musisz zrobić, to zatwierdzić i wrzucić repozytorium ucznia, gdy jesteś zadowolony z wyników. Można to zrobić jednym kliknięciem podczas korzystania z klienta GitHub (dzięki czemu można dokonać szybkiego przeglądu wizualnego) lub po prostu zrobić to ręcznie w wierszu polecenia.
Repozytorium studenckie jest tylko repozytorium wyjściowym, więc zawsze będzie aktualne, dla studentów jasne jest, co się zmieniło, patrząc na zatwierdzenia (ponieważ pokazują tylko zmiany) i jest łatwe w obsłudze.
Kolejnym krokiem byłoby utworzenie haka zatwierdzającego git, który automatycznie uruchamia twój skrypt.
Edytuj: Zobacz, czy dokonałeś edycji swojego postu:
Podejrzewam, że jest jasne, ale musi być kompletne: wystarczy usunąć tagi wokół ukończonego ćwiczenia opublikuje odpowiedź w taki sam sposób, jak w przypadku normalnych aktualizacji ćwiczeń.
źródło
Mógłbyś
Oto jak zaimplementowałbym ten przepływ pracy:
assignments
hostowane na GitHub. Dodaj kod płyty głównej dla zadań. Np. Do każdego zadania wprowadza się nowy podkatalog zawierający kod płyty głównej zadania.assignments-solved
na GitHub. Sklonujassignments
repozytorium na swoim komputerze i wypchnij je doassignments-solved
repozytorium (zasadniczo rozwidlaj własne repozytorium jako kopię prywatną):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
repozytorium jako zdalne doassignments
repozytorium:cd assignments # change to the assignments repo on your machine git remote add solutions https://github.com/[user]/assignments-solved
assignments-solved
repozytorium. Upewnij się, że każde zatwierdzenie zawiera tylko zmiany z jednego przypisania.solved
gałąź wassignments
repozytorium, aby oryginalne przypisania nie uległy zmianie:cd assignments # change to the assignments repo on your machine git branch -b solutions git push -u origin
assignments
, pobierzsolved
pilota icherry-pick
zatwierdzenia zawierające rozwiązania.cd assignments # change to the assignments repo on your machine git checkout solved git fetch solutions git cherry-pick [commithash]
Gdzie[commithash]
zawiera zatwierdzenie twojego rozwiązania.Możliwe jest również zaimplementowanie przepływu pracy poprzez wdrożenie każdego zadania w osobnej gałęzi
assignments-solved
repozytorium, a następnie utworzenie żądania ściągania wassignments
repozytorium. Ale nie jestem pewien, czy to zadziała w GitHub, ponieważassignments-solved
repo nie jest prawdziwym widelcem.źródło
Mogę tylko zaproponować Ci narzędzie do obsługi
.gitignore
i szyfrowania plików w twoim repozytorium. Przepływ pracy jest nieco trudny w użyciu, ale sprawia, że zaszyfrowane odpowiedniki plików są dostępne w kopii roboczej wraz z innymi nie-tajnymi plikami, co pozwala na śledzenie ich przez git jak zwykle.Aby utworzyć tajny plik o
a.txt
typie plikusshare -a a.txt
. Narzędzie do tworzenia plikua.txt
i pliku dodanego do.gitignore
. Następnie tworzy zaszyfrowany odpowiednik „bazy danych”a.txt.sshare
poprzez dodanie.sshare
rozszerzenia do nazwy pliku.Następnie możesz wypełnić
a.txt
tekst. Aby zapisać swój stan tuż przedgit commit
typemsshare -s a.txt
, narzędzie wyświetli monit o podanie hasła do zaszyfrowania nowego stanu plikua.txt
. Następnie użycie tego hasła dodaje zaszyfrowaną różnicę między poprzednim a bieżącym stanem plikua.txt
na końcua.txt.sshare
pliku.Po pobraniu / ściągnięciu repozytorium z zaszyfrowanymi plikami powinieneś uruchomić
sshare
narzędzie dla każdego pliku za pomocą-l
klawisza („load”). W takim przypadku narzędzie odszyfrowuje*.sshare
pliki do plików tekstowych nieśledzonych przez git w kopii roboczej.Możesz użyć różnych haseł dla każdego tajnego pliku.
Narzędzie pozwala na śledzenie zmian git skutecznie ( diff z
.sshare
plików jest po prostu jednym wierszu).źródło