-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Contingut original de la wiki amb instruccions i descripció de les comandes: https://github.com/pcottle/learnGitBranching/wiki
Els nivells del simulador es configuren fent servir un fitxer JSON, es recomana generar-los des del mateix simulador:
build level
<preparar inici>
define start
<preparar el final>
define goal
define name
edit dialog
finish
- Un cop exportat el fitxer JSON, modificar l'idioma de
en_US
peres_ES
. - Preparar el fitxer del codi font, afegint el JSON generat al fitxer javascript. Exemple:
exports.level = {
"goalTreeString": "%7B%22branches%22%3A%7B%22main%22%3A [...]",
"solutionCommand": "git commit;git commit; [...]",
"startTree": "{\"branches\":{\"main\":{\"target\": [...]",
"name": {
"es_ES": "2024-2025 Grup"
},
"hint": {
"es_ES": ""
}
};
Important: el fitxer JSON que defineix el nivell conté la solució al mateix. Per a evitar que els alumnes puguin preparar-se la solució a l'examen abans de la data establerta:
3. Cal ofuscar el codi font, es recomana la següent eina lliure i gratuïta: https://obfuscator.io/
3.1. Cal modificar només aquests paràmetres de l'ofuscador:
3.2. Copiar el codi fon java a ofuscar, substituint el contingut d'algun examen ja existent dins la carpeta src\levels\exams
dins el servidor directament. NO PUJAR EL CODI D'UN EXAMEN AL REPOSITORI.
4. Actualitzar el servidor de producció (yarn gulp fastBuild
).
NOTA: resulta senzill desofuscar el codi generat (https://obf-io.deobfuscate.io/) i obtenir així la solució a l'exercici, però com que aquest repo és un fork de l'original, GitHub no permet marcar-lo com a privat. La idea és que el codi estigui obfuscat durant l'examen perquè no puguin obtenir la solució fent servir l'inspector d'objectes del navegador, tenint en compte que haurien de tenir l'accés a internet capat per a evitar l'ús d'eines de desofuscació. És per aquest motiu que es demana modificar directament el codi al servidor i no pujar-lo al repositori (el servidor ja té configurat git per a ignorar els canvis que es facin a la carpeta src\levels\exams
).
Finalment, compartir l'URL amb els alumnes fent servir el codi de l'examen (el codi sempre és exam_N_
, on N
és el codi numèric del nivell que assigna automàticament el simulador): http://git-sim/?locale=es_ES&level=exams1
.
Es faran servir d'exemples comandes amb incus
, però es pot fer servir lxc
indistintament.
incus launch images:ubuntu/24.04 git-sim
incus exec git-sim -- /bin/bash
apt install git nodejs npm apache2 nano openssh-server -y
npm install -g yarn gulp-cli
cd /var/www
rm -rf html
git clone https://github.com/ElPuig/learnGitBranching.git html
cd html
echo ".yarn" >> .git/info/exclude
echo "src/levels/exams" >> .git/info/exclude
git update-index --assume-unchanged src/levels/exams/*
yarn install
npx --yes browserslist@latest --update-db
yarn gulp fastBuild
A partir d'aquest punt, obrint un navegador dins l'amfitrió i apuntant a l'adreça IP del contenidor, s'hauria de poder accedir al simulador.
incus exec git-sim -- /bin/bash
sudo passwd root
sudo nano /etc/ssh/sshd_config
Modificar la línia PermitRootLogin
perquè quedi com PermitRootLogin yes
.
sudo systemctl restart ssh
Si es vol poder accedir via hostname en comptes de fer servir la IP del contenidor:
- Comprovar la IP del contenidor amb la comanda
incus list
. - Editar el fitxer de hosts amb la comanda
nano /etc/hosts
. - Afegir una línina del tipus
<ip_contenidor> <hostname>
. Per exemple:10.96.236.197 git-sim
. - Guardar el fitxer.
Si es vol que es pugui accedir al contenidor via SSH sense que demani password.
- Generar les claus, només si no s'ha fet mai:
ssh-keygen -t rsa
. - Copiar la clau pública al contenidor:
ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@git-sim
.
Perquè aparegui una pestanya "exàmens" s'ha fet el següent:
- src/js/intl: s'ha afegit una entrada per a traduir el nom de la pestanya (
exams-levels-tab
). - src/js/views: s'ha afegit una nova entrada a l'array
tabs
dins el mètodeinitialize
per als examens (exams
). - src/levels: s'ha afegit un nou atribut
exams
a la variableexports.levelSequences
. - src/levels/exams: s'ha creat la nova carpeta i s'han afegit nous nivells a dins.