Saya seorang dosen menulis masalah coding untuk mahasiswa. Yang ingin saya lakukan adalah memberi siswa kode boilerplate dengan placeholder untuk fungsi yang harus diselesaikan siswa. Saya akan memberikan siswa akses ke repo github pribadi untuk mengkloning ini.
Namun, saya juga menginginkan versi basis kode, lengkap dengan solusi sampel. Jelas saya tidak ingin siswa memiliki akses ke solusi (sampai tugas selesai).
Saya sudah memikirkan cabang, tapi AFAIK, saya tidak bisa merahasiakan satu cabang.
Mungkin saya bisa memotong proyek ke repo pribadi lain, tetapi saya tidak yakin bagaimana saya bisa menyimpan proyek di snyc (terlepas dari file yang berisi solusinya).
Apakah ada alur kerja untuk situasi ini?
Jawaban:
Apa yang bisa dilakukan:
Jadi struktur direktori Anda adalah 2 klon git repo:
Anda menaruh spidol di sekitar kode "pribadi" dalam komentar untuk bahasa Anda, contoh javascript di bawah ini. Penanda menunjukkan di mana kode pribadi mulai dan berakhir.
Kemudian buat skrip sederhana di mesin lokal Anda:
Ini akan: mengambil semua file Anda dan menyalin konten ke / siswa (menimpa) tanpa bagian kode yang ditandai pribadi. Jika mau, Anda dapat memasukkan baris kosong di sana tetapi itu mungkin memberikan petunjuk tentang solusi apa yang Anda harapkan.
Ini adalah kode contoh yang belum diuji, jadi kemungkinan Anda harus melakukan debugging.
Sekarang yang harus Anda lakukan adalah berkomitmen dan mendorong repositori siswa ketika Anda senang dengan hasilnya. Itu dapat dilakukan dalam satu klik saat menggunakan klien GitHub (sehingga Anda dapat melakukan tinjauan visual cepat) atau hanya melakukannya secara manual pada baris perintah.
Repo siswa adalah repositori keluaran saja sehingga akan selalu tetap terkini, jelas bagi siswa apa yang diubah dengan melihat komit (karena mereka hanya menunjukkan perubahan) dan mudah ditangani.
Satu langkah lebih jauh adalah membuat git commit-hook yang menjalankan skrip Anda secara otomatis.
Sunting: Lihat Anda melakukan pengeditan pada posting Anda:
Saya menduga itu jelas tetapi harus lengkap: Hanya menghapus tag di sekitar latihan selesai akan mempublikasikan jawabannya dengan cara yang sama seperti yang Anda lakukan untuk pembaruan normal untuk latihan.
sumber
Anda bisa
Beginilah cara saya mengimplementasikan alur kerja ini:
assignments
host di GitHub. Tambahkan kode boilerplate untuk tugas. Misalnya untuk setiap tugas Anda memperkenalkan sub-direktori baru yang berisi kode boilerplate dari tugas tersebut.assignments-solved
di GitHub. Kloningassignments
repo pada mesin Anda, dan dorong keassignments-solved
repo (pada dasarnya garpu repositori Anda sendiri sebagai salinan pribadi):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
repo sebagai jarak jauh keassignments
repo:cd assignments # change to the assignments repo on your machine git remote add solutions https://github.com/[user]/assignments-solved
assignments-solved
repositori. Pastikan setiap komit hanya berisi perubahan dari satu tugas.solved
cabang diassignments
repo, sehingga tugas asli tidak diubah:cd assignments # change to the assignments repo on your machine git branch -b solutions git push -u origin
assignments
, ambilsolved
remote dancherry-pick
komit yang berisi solusi.cd assignments # change to the assignments repo on your machine git checkout solved git fetch solutions git cherry-pick [commithash]
Di mana[commithash]
berisi komit dari solusi Anda.Anda mungkin juga dapat menerapkan alur kerja dengan menerapkan setiap tugas di cabang terpisah dari
assignments-solved
repo dan kemudian membuat permintaan tarik diassignments
repo. Tetapi saya tidak yakin apakah ini akan berhasil di GitHub, karenaassignments-solved
repo itu bukan fork nyata .sumber
Saya hanya bisa mengusulkan Anda sebuah utilitas yang ditujukan untuk
.gitignore
-ing dan mengenkripsi file dalam repositori Anda. Workflow agak sulit digunakan, tetapi itu membuat rekan-rekan terenkripsi file Anda tersedia di copy pekerjaan bersama dengan file non-rahasia lainnya, yang memungkinkan untuk melacak mereka dengan git seperti biasa.Untuk membuat file rahasia dengan
a.txt
tipe nama filesshare -a a.txt
. Utilitas membuat filea.txt
dan file ditambahkan ke.gitignore
. Kemudian ia membuat mitra "database" terenkripsia.txt.sshare
dengan menambahkan.sshare
ekstensi ke nama file.Kemudian Anda dapat mengisi
a.txt
dengan beberapa teks. Untuk menyimpan kondisinya tepat sebelumgit commit
mengetiksshare -s a.txt
, maka utilitas meminta Anda untuk kata sandi untuk mengenkripsi keadaan file yang barua.txt
. Kemudian menggunakan kata sandi ini menambahkan perbedaan terenkripsi antara status file sebelumnya dan saat inia.txt
ke akhira.txt.sshare
file.Setelah mengambil / menarik repositori dengan file terenkripsi, Anda harus menjalankan
sshare
utilitas untuk setiap file menggunakan kunci-l
("load"). Dalam hal ini utilitas mendekripsi*.sshare
file ke file teks yang tidak dilacak oleh git dalam copy pekerjaan.Anda dapat menggunakan kata sandi yang berbeda untuk setiap file rahasia.
Utilitas memungkinkan git untuk melacak perubahan efisien ( diff dari
.sshare
file hanya satu baris).sumber