GIt et GitHub – expériences et résultats

Suite à la conférence de Nicolas, voici quelques expériences avec Git et plus particulièrement GitHub.

On va respectivement:

  • Mettre un répertoire existant dans Git;
  • Utiliser l’application Desktop;
  • Travailler avec 2 PCs sur un répertoire partagé;
  • Synchroniser deux PCs avec git-gui, et modifier et re-synchroniser les répertoires

Répertoire existant ->GIT

Le but est de déposer un code existant de son PC sur GitHub, de manière à pouvoir le maintenir. Et surtout de déjouer quelques pièges, car devant la complexité de GitHub, on titube (désolé, je n’ai pas pu me retenir).

Exemple: le contenu du répertoire “main_lpc” (c’est du code Arduino). Aller dans le répertoire :

C:\Programs\Git>cd c:\Users\Masur\OneDrive\Documents\Arduino\Soft\main_lpc

Initialiser:
c:\Users\Masur\OneDrive\Documents\Arduino\Soft\main_lpc>git init

Initialized empty Git repository in c:/Users/Masur/OneDrive/Documents/Arduino/Soft/main_lpc/.git/

Ici, attention à résister à la tentation à donner le nom de répertoire “lpc_main”, qui serait créé. Pousser tous les fichiers:

c:\Users\Masur\OneDrive\Documents\Arduino\Soft\main_lpc>git add .

warning: LF will be replaced by CRLF in const_def.h.
The file will have its original line endings in your working directory.

Cet avertissement vaut pour tous les fichiers *.ino, *.h ou texte
Pousser les fichiers dans le répertoire Git local:

c:\Users\Masur\OneDrive\Documents\Arduino\Soft\main_lpc>git commit -m “version du 26.07.2015”

[master (root-commit) f1a0ba2] version du 26.07.2015
9 files changed, 806 insertions(+)
create mode 100644 const_def.h  … ect pour les 9 fichiers.

Ensuite, toutes les commandes git remote échouent. Via le WEB, création du dépôt distant (GitHub):

https://microclub.ch/wp-content/uploads/2017/11/word-image-13.png

Essai avec l’appli Desktop, pour pousser les fichiers sur GitHub. Choix du répertoire, renseigné dans les deux champs: repository et local :

https://microclub.ch/wp-content/uploads/2017/11/word-image-14.png

Mauvaise idée… un sous répertoire du même nom est créé!

https://microclub.ch/wp-content/uploads/2017/11/word-image-15.png

Delete du répertoire …/main_lpc/main_lpc

Sélection avec Desktop, puis Publish (but, pousser les fichiers sur GIT-HUB)

https://microclub.ch/wp-content/uploads/2017/11/word-image-16.png

Le dépôt précédemment créé par le WEB gêne.

Solution : delete du dépôt sur GitHub, puis recommencer l’opération « Publish », qui réussit.

Piège du répertoire partagé

Vous avez peut-être remarqué que j’utilise OneDrive pour stocker mes fichiers. Ceci me prémuni contre une panne de HDD et me permet de partager le code sur plusieurs PC. Par contre, si les répertoires ne sont pas strictement identiques entre les 2 PCs, impossible d’utiliser Git sur le second! On obtient:

~\Documents\Arduino\Soft\Blink\blink2 [master ≡ +0 ~0 -1 ~]> git push
To https://github.com/ymasur/blink2
! [rejected] master -> master (fetch first)
error: failed to push some refs to ‘https://github.com/ymasur/blink2’
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes

Dommage…

Synchro de GitHub, de PC1 et de PC2

Situation: on développe sur le  PC1, mais on aimerait poursuivre sur PC2, comme si 2 utilisateurs travaillent à tour de rôle. Ici, on utilise Git-Gui.exe, que l’on peut lancer depuis la ligne de commande par: git-gui.

Le code – en l’occurrence blink2 Arduino – est déjà déposé sur GitHub.

Git-gui (sur PC2)

Etape 1: Clone. Le répertoire local ne doit pas préexister. Charger localement depuis GitHub :

https://microclub.ch/wp-content/uploads/2017/11/word-image-17.png

Ajout et modification de fichier

Le fichier toto.txt (complètement bidon) est ajouté. Rescan :

https://microclub.ch/wp-content/uploads/2017/11/word-image-18.png

Pour la bonne forme, je modifie le commentaire de blink2.ino. Une fois les modifs terminées, cliquer le fichier pour le passer à Staged…

Puis [Commit] pour enregistrer localement la(les) différence(s)

Nouvelle version sur GitHub

La modif est seulement locale. On la met sur GitHub avec [Push] :

https://microclub.ch/wp-content/uploads/2017/11/word-image-19.png

Vérification sur GitHub, via le WEB :

https://microclub.ch/wp-content/uploads/2017/11/word-image-20.png

Le fichier toto.txt est bien ajouté; et blink2.ino touché.

Modif avec un répertoire cloné sur PC1

Contrôle des changements

Repository -> Visualize master’s history

https://microclub.ch/wp-content/uploads/2017/11/word-image-21.png

Modifications par PC1

Delete de toto.txt ; modif de blink2.ino (on remodifie le commentaire)

https://microclub.ch/wp-content/uploads/2017/11/word-image-22.png

Commit et push de cette version :

https://microclub.ch/wp-content/uploads/2017/11/word-image-23.png

Synchro sur PC2

Obtenir une réplication correcte (sans tout cloner)

Pour mémoire, on a supprimé le fichier toto.txt. Etape 1, synchro du dépôt local de PC2: git fetch

https://microclub.ch/wp-content/uploads/2017/11/word-image-24.png

Etape 2: synchro répertoire de travail : git merge

https://microclub.ch/wp-content/uploads/2017/11/word-image-25.png

Le répertoire local est à jour sur le PC2.

Yves Masur (11/2017)

 

Router Internet en NAT avec un PC

Besoin

La configuration est la suivante : vous avez un PC portable (ou pas…) qui est connecté en Wi-Fi à Internet, et vous voulez router l’internet sur sa prise LAN sur laquelle peuvent être connectés différents hardwares, mais qui n’ont, eux, pas de Wi-Fi. Ou une connexion Wi-Fi est obtenue avec un code, et vous avez besoin de la partager.  Les différentes possibilités de partage sont décrites sur ce blog : https://anwaarullah.wordpress.com/2013/08/12/sharing-Wi-Fi-internet-connection-with-raspberry-pi-through-lanethernet-headless-mode/

Le matériel minimum suivant est requis :

  • Un routeur Wi-Fi, connecté sur l’Internet
  • PC avec 2 connexions LAN : Wi-Fi et RJ45 ; l’OS Win10 (Win7 aussi testé)
  • Un câble LAN croisé (rouge)
  • Un « device » à connecter, par exemple un RaspBerry Pi 2

Bien entendu, le « device » peut être autre : Arduino, second PC, etc.

Bref, un schéma est plus simple pour l’expliquer.


Le PC est connecté sur le routeur internet par son Wi-Fi, et le RaspBerry Pi par un câble croisé (câble rouge) à la prise LAN du PC. Bien entendu, un petit switch qui s’occupe du croisement automatiquement irait très bien aussi.

Partager la connexion

Il y a 3 options (ou peut être plus) pour établir la liaison :

  • Le Network Translation Adress, ou NAT
  • Le pont – transparence de connexion
  • Le partage de la connexion

Activer le NAT

On va utiliser la première, car vu du routeur Wi-Fi, seule l’adresse du PC est distribuée. Les autres options demandent au routeur Wi-Fi de distribuer en DHCP une adresse supplémentaire pour le RaspBerry.

Le NAT s’occupe de modifier les paquets IP pour changer l’adresse de la carte A en adresses de la carte B. C’est utilisé pour créer des sous-réseaux, et grouper une série de machines avec une seule adresse sur l’Internet. Voir : https://fr.wikipedia.org/wiki/Network_address_translation

Réglage des cartes LAN

Partage du WI-FI

  • Clic Droit sur icone Windows de la barre des tâche-> Connexions réseau
  • Clic droit sur le Wi-Fi -> Propriétés
  • Onglet « partage »
  • Cocher « Autoriser… » et décocher la seconde option si besoin

Si vous avez plus d’une carte, il faut choisir laquelle sera utilisée pour ce partage:

Après quelques secondes, la carte Ethernet obtient la configuration suivante, à vérifier en ligne de commande par ipconfig :

Ou encore en ouvrant la carte Ethernet et en lisant ses propriétés IPV4. Au départ, les champs sont vides : ils sont remplis par le partage de connexion. La carte prend l’adresse 192.168.137.1/24. L’adresse de la passerelle reste vide, ainsi que les DNS.

Contrôle de la connexion NAT

  • Connecter le RaspBerry sur le LAN du PC, à savoir la carte Ethernet
  • L’enclencher, pour qu’il prenne une adresse IP

Si le Raspberry était déjà allumé, il aura pris une adresse bidon, genre 169.x.y.z et un masque réseau 255.0.0.0. On peut redémarrer les services réseau avec les commandes Linux:

sudo ifdown -a

sudo ifup -a

  • Vérifier l’adresse prise par : ifconfig et la noter pour la suite
  • Vérifier l’accès à Internet avec : ping ch.ch (ou autre site répondant au ping)

Limites de la connexion NAT avec Win10

L’adressage du sous réseau ne peut pas être choisi ; c’est Windows qui décide. Selon les essais, l’adresse de base est toujours 192.168.137.1, avec un réseau de classe C, à savoir 253 adresses à disposition, ce qui suffit amplement.

Avec un laptop qui se met en veille… le partage disparait ! La carte Ethernet (du PC donc) reprend une adresse du genre : 169.254.245.127, et un masque 255.255.0.0. Remettre la coche du partage sur la carte Wi-Fi relance la fonction NAT ; et si cela n’a pas duré trop longtemps, le « device » connecté aura gardé son adresse et reprend sa liaison. On peut bien sûr tester avec la commande ping ch.ch pour en vérifier la fonctionnalité.

Yves Masur (4/2017)