Com pujar un projecte al GitHub (i un cub de Rubik amb Python)

Aprofitant que el meu fill ha redescobert el cub de Rubik, he decidit “fer-me’n” un amb Python. El resultat han estat alguns fitxers de codi font i un  parell de bitmaps xbm.

El meu cub de Rubik és funcional però ja se m’estan acudint idees per afegir. Es molt probable, doncs, que el faci evolucionar en el futur. És una bona idea pujar-lo al GitHub.

Una recepta senzilla, doncs, com pujar un projecte al GitHub:

Si no tinc el git, el primer pas és instal·lar-lo. Estic fent servir una Lubuntu 14.04, o sigui que:

albert@atenea:~/workspace/python/rubik$ sudo apt-get install git
[sudo] password for albert: 
S'està llegint la llista de paquets… Fet 
S'està construint l'arbre de dependències       
S'està llegint la informació de l'estat… Fet
S'instaŀlaran els següents paquets extres:
  git-man liberror-perl
Paquets suggerits:
  git-daemon-run git-daemon-sysvinit git-doc git-el git-email git-gui gitk
  gitweb git-arch git-bzr git-cvs git-mediawiki git-svn
S'instaŀlaran els paquets NOUS següents:
  git git-man liberror-perl
0 actualitzats, 3 nous a instaŀlar, 0 a suprimir i 2 no actualitzats.
S'ha d'obtenir 2837 kB d'arxius.
Després d'aquesta operació s'empraran 21,7 MB d'espai en disc addicional.
Voleu continuar? [S/n] s
Bai:1 http://es.archive.ubuntu.com/ubuntu/ trusty/main liberror-perl all 0.17-1.1 [21,1 kB]
Bai:2 http://es.archive.ubuntu.com/ubuntu/ trusty/main git-man all 1:1.9.1-1 [698 kB]
Bai:3 http://es.archive.ubuntu.com/ubuntu/ trusty/main git i386 1:1.9.1-1 [2117 kB]
S'ha baixat 2837 kB en 4s (623 kB/s)
S'està seleccionant el paquet liberror-perl prèviament no seleccionat.
(S'està llegint la base de dades… hi ha 259295 fitxers i directoris instaŀlats actualment.)
S'està preparant per a desempaquetar …/liberror-perl_0.17-1.1_all.deb…
S'està desempaquetant liberror-perl (0.17-1.1)…
S'està seleccionant el paquet git-man prèviament no seleccionat.
S'està preparant per a desempaquetar …/git-man_1%3a1.9.1-1_all.deb…
S'està desempaquetant git-man (1:1.9.1-1)…
S'està seleccionant el paquet git prèviament no seleccionat.
S'està preparant per a desempaquetar …/git_1%3a1.9.1-1_i386.deb…
S'està desempaquetant git (1:1.9.1-1)…
S'estan processant els activadors per a man-db (2.6.7.1-1ubuntu1)…
S'està configurant liberror-perl (0.17-1.1)…
S'està configurant git-man (1:1.9.1-1)…
S'està configurant git (1:1.9.1-1)…
albert@atenea:~/workspace/python/rubik$ 

Ja tinc git.

El codi:

albert@atenea:~/workspace/python/rubik$ ls -al
total 52
drwxrwxr-x 3 albert albert  4096 nov 30 10:57 .
drwxrwxr-x 9 albert albert  4096 nov 30 10:57 ..
drwxrwxr-x 2 albert albert  4096 nov 28 20:46 images
-rwxrwxr-x 1 albert albert   157 nov 29 17:30 main.py
-rw-rw-r-- 1 albert albert  1520 nov 30 10:28 rubik_archiver.py
-rw-rw-r-- 1 albert albert  2287 nov 30 10:26 rubik_controller.py
-rw-rw-r-- 1 albert albert 16153 nov 30 01:20 rubik_model.py
-rw-r--r-- 1 albert albert  8219 nov 30 01:32 rubik_view.py
albert@atenea:~/workspace/python/rubik$ 

Som-hi, primer de tot (segueixo les instruccions de l’ajuda del GitHub)

1 – Accedeixo al GitHub
accedir-github

2 – Creo el nou repositori al GitHub
create-repo-1

Molta atenció! com que vull pujar un repositori, NO cal que inicialitzi res. O sigui: NO cal crear ni un readme, ni un gitignore, ni cal dir-li que posi una llicència, ni res de res.
create-repo-2a

I un cop ja he creat el repositori (fent click al botó) em diu quines són les instruccions per pujar el meu projecte al GitHub a “… or push an existing repository” from the command line”.

create-repo-3a

3 – Però abans, és clar, he d’inicialitzar el meu repositori git local

albert@atenea:~/workspace/python/rubik$ git init
Initialized empty Git repository in /home/albert/workspace/python/rubik/.git/

4 – Afegeixo els fitxers

albert@atenea:~/workspace/python/rubik$ git add .
albert@atenea:~/workspace/python/rubik$ git commit -m "First commit"

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'albert@atenea.(none)')

Què ha passat? que tot just he instal·lat el git i, per tant, no hi ha informació sobre l’usuari. Segueixo les instruccions. Com que no vull establir una identitat global, no tinc en compte el paràmetre –global.

albert@atenea:~/workspace/python/rubik$ git config user.email "stsoftlliure@gmail.com"
albert@atenea:~/workspace/python/rubik$ git config user.name "abaranguer"

5 – Ara sí, faig el commit al repositori local

albert@atenea:~/workspace/python/rubik$ git commit -m "First commit"
[master (root-commit) 0ec34a8] First commit
 7 files changed, 779 insertions(+)
 create mode 100644 images/arrow_down.xbm
 create mode 100644 images/arrow_right.xbm
 create mode 100755 main.py
 create mode 100644 rubik_archiver.py
 create mode 100644 rubik_controller.py
 create mode 100644 rubik_model.py
 create mode 100644 rubik_view.py
albert@atenea:~/workspace/python/rubik$

6 – I pujo el repositori local al GitHub. Recupero les instruccions de la pantalla

albert@atenea:~/workspace/python/rubik$ git remote add origin https://github.com/abaranguer/rubikcube.git
albert@atenea:~/workspace/python/rubik$ git push -u origin master
Username for 'https://github.com': abaranguer
Password for 'https://abaranguer@github.com': 
Counting objects: 10, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 5.74 KiB | 0 bytes/s, done.
Total 10 (delta 0), reused 0 (delta 0)
To https://github.com/abaranguer/rubikcube.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
albert@atenea:~/workspace/python/rubik$ 

Ja tinc el meu repositori al GitHub:

fresh-repo

I fins aquí la recepta del GitHub.

Per cert, que el cub de Rubik em funciona força bé. És una aplicació senzilla feta amb Tkinter sobre Python 2.7. Com a coses destacables, si li voleu fer un cop d’ull al codi, dir que:
– està fet seguint el patró model-vista-controlador.
– us de lambda als botons de moviment.
– botons amb bitmap X (xbm).

Com a possibles millores que es podrien afegir (si algú s’anima, el github ja sabeu on és):
– Afegir una pantalla d’Ajuda.
– Afegir una pantalla d’About.
– Possibilitat de carregar més d’un cub. Ara el cub es carrega i es desa automàticament. Es podria desar el cub amb diferents noms, i després triar quin cub carregar.
– Desar una llista dels moviments realitzats i tenir botons de “desfer moviment” i “tornar a fer moviment” per moure’s per la llista.
– Afegir els botons de moviments oposats als actuals

Per nota:

– Canviar la interfase gràfica a OpenGL
– afegir un solucionador

El voleu veure en acció?