git est un logiciel de gestion de versions qui, contrairement à svn ou csv, est décentralisé. C’est un logiciel libre créé par Linus Torvalds, auteur du noyau Linux, et distribué selon les termes de la licence publique générale GNU version 2. En 2016, il s’agit du logiciel de gestion de versions le plus populaire qui est utilisé par plus de douze millions de personnes. (réf: https://fr.wikipedia.org/wiki/Git).
En gros, c’est une application qui permet de garder plusieurs versions d’un fichier ou d’un projet et au besoin, de revenir à une version précédente.
Git permet aussi de travailler sur des fonctionnalités additionnelles en parallèle au projet principal (branch) et de les réintégrer (merge) une fois qu’elles sont au point.
L’application ‘git’ est installée par défaut sur MacOS et disponible à partir d’une fenêtre ‘terminal’.
Sur Windows il faut l’installer: https://git-scm.com/download/win
Voici un exemple d’utilisation de git sous MacOS:
Voici un sommaire des commandes disponibles à partir de ‘terminal’:
[pdf-embedder url= »/xcode/wp-content/uploads/2017/03/github-git-cheat-sheet.pdf »]
Note: Heureusement pour nous, les fonctionnalités de base sont intégrées à même Xcode. Dans la plupart des cas, il ne sera pas nécessaire de recourir à l’application ‘terminal’.
Action.1.1 – Créer un nouveau projet iOS ‘single View’ nommé ‘git-premiers-pas’ et cocher l’option ‘create git repository on my Mac‘ à la fenêtre de création du projet:
Action.1.2 – Afficher le navigateur de contrôle de sources:
Action.1.3 – Vérifier l’état ‘git’ du projet via le terminal.
Action.1.4 – Modifier le fichier AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. print("application:didFinishLaunchingWithOptions") return true }
Note: Remarquez le ‘M’ qui est apparu à droite du nom du fichier:
Il nous indique que le fichier a été modifié depuis le dernier ‘commit’.
L’éditeur de version permet permet d’observer les modifications entre les ‘commits’:
Action.1.5 – Renseigner un nouveau commit:
Action.1.6 – Ajouter une ligne de code dans viewDidLoad et faire un commit:
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. print("ViewController:viewDidLoad") }
Les branches permettent de tester de nouvelles fonctionnalités à l’extérieur de la branche principale (master) et de les réintégrer lorsqu’elles sont au point.
Nous allons créer une nouvelle branche pour réaliser le design de l’application.
Action.2.1 – Créer une nouvelle branche ‘design’
Action – Compléter la création de la branche en cliquant sur le bouton ‘Create’
Note: Observer l’ajout de la nouvelle branche dans la fenêtre suivante. De plus, cette branche est devenue la branche courante. Si nous apportons des modifications au projet, ils n’affecteront pas la branche de départ (master).
Action.2.2 – Réaliser le design de départ:
Action.2.3 – Réaliser le commit:
Action: Tester l’application!
Action.2.4 – Retourner sur la branche ‘master’, l’option ‘checkout’
Action: Tester l’application!
Action.2.5 – Ajouter la méthode ‘afficher’ à la class ViewController, appeler dans viewDidLoad et réaliser un commit
func afficher(_ msg:String, fois:Int = 1) { for i in 0...fois { print(i, msg) } // for } // afficher
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. print("ViewController:viewDidLoad") afficher("Test", fois: 3) }
Note: Message du ‘commit’: Ajout de la méthode afficher()
Action – Tester l’application.
Nous allons maintenant fusionner la version ‘design’ dans la version ‘master’.
Comme résultat, la version ‘master’ va hériter de toutes les modifications apportées au UI.
Action.3.1 – Cliquer droit sur la branche « design » et sélectionner l’option ‘Merge « design » into « master »‘
Action – Observer les changements proposés
Action – Observer l’état du projet de la branche ‘master’. Le travail de design a été incorporé à la branche ‘master’.
Note: Il ne doit pas y avoir de ‘commits’ en suspends pour pouvoir réaliser la fusion.
—
Action.4.1 version ‘master‘ ajouter la ligne suivante, suivi du commit « Ajout de ‘je suis la ligne 15‘ »
Action.4.2 – Passer à la branche ‘design‘ et ajouter la ligne suivante , suivi du commit « Ajout de ‘je suis aussi la ligne 15‘ »
Action.4.3 – Fusionner ‘design’ dans master.
Résultat, fusion automatique impossible, il faut intervenir:
Choix 1:
Choix 2:
Choix 3:
Choix 4:
GitHub propose un service ‘git’ en nuage. Cela permet à plusieurs personnes, de lieux différents, de collaborer à un même projet.
Voici des exemples de projets disponibles sur GitHub:
swift
linux
atom
brackets
react
bootstrap
Alamofire
laravel
Nous allons maintenant envoyer notre projet sur gitHub.
Action 5.1 – Renseigner les paramètres de votre compte gitHub dans les préférences de Xcode:
Action.5.2 – Transférer le projet vers gitHub
Action – Vérifier l’état du compte sur gitHub:
Note: Il n’y a que la branche courante qui a été envoyée sur GitHub. Il faudra pousser (Push) les autres branches vers GitHub.
Action.5.3 – Changer de branche (checkout) et transférer la nouvelle branche courante (push)
Note: Remarquez qu’Xcode propose de créer la nouvelle branche sur le site distant.
Action – Vérifier l’état du projet sut GitHub. Entre autres, la liste des branches.
Action.5.4 – Modification d’un fichier du projet via gitHub
Nous allons ajouter un commentaire dans le fichier ViewController.swift en utilisant GitHub.
Action – Naviguer vers le fichier ‘ViewController.swift’
Action – Cliquer sur l’icône du crayon pour éditer le fichier
Action – Ajouter le commentaire de la ligne 7
Action – Descendre au bas de la page web d’édition et compléter le ‘commit’
Note: Le changement a été effectué dans la branche ‘design’
Note: Assurez-vous d’être sur la branche design.
Action.5.5 – Synchroniser une branche avec la version sur gitHub (pull)
Action – Observer les changements au fichier ViewController.swift
Extra: Introduction de 10 minutes à gitHub
Il est possible de déplacer la tête du projet à n’importe quel ‘commit’ du projet. Par contre, c’est une délicate opération qu’il n’est pas possible de réaliser à partir de Xcode.
Note: Pour prévenir une situation de déplacement de la tête – HEAD – vers l’arrière, il est une bonne pratique de développer des nouvelles fonctionnalités à l’application sur une branche secondaire et de fusionner lorsque les tests de contrôle qualité auront été réalisés.
Retournons voir l’historique des ‘commits’ de la branches ‘master’:
Action.6.1 – A) Au besoin, réaliser un ‘checkout‘ sur la branche ‘master‘.
$ git checkout master
B) Entrer les 2 commandes suivantes:
$ git log > gitlog.txt $ ls -l
Action.6.2 – Observer le contenu du fichier gitlog.txt
commit 5c6532f1d445d3e06ecd2dfc1c1896923d5a0b1e Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 14:52:55 2017 -0400 Ajout d'une autre ligne 15 suite au merge commit 5d32c805d06f190fc226e08b4dfb9618c9789f22 Merge: 7b68b44 c9d86f6 Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 14:37:04 2017 -0400 Merge branch 'design' commit c9d86f67587daa01bb0371d158b08097abb46a42 Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 14:32:54 2017 -0400 Ajout de 'Je suis aussi la ligne 15' commit 7b68b44be4fa2f21778c5e8fec02410f81574d9f Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 14:31:23 2017 -0400 Ajout de 'je suis la ligne 15' commit 19d25f7400670aa8c01d36c8faea7ae611e1d6ac Merge: 2d87e2b 5572efa Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 14:25:16 2017 -0400 Merge branch 'design' commit 2d87e2bc82636875c82da817c251c2a3bf1014b2 <------------------------ Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 14:24:08 2017 -0400 Ajout de la méthode afficher() <------------------------ commit 5572efa768c65553dce70d8d646ae1e355e86e28 Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 14:03:35 2017 -0400 Prototype du design commit c9c14277e279cb74de500ef4740212251a8a4ece Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 13:37:41 2017 -0400 Ajout d'une trace dans viewDidLoad commit dfb787b201bfe96532c36d96570a5a17920481b4 Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 13:25:11 2017 -0400 Ajout d'un message dans didFinishLaunching commit 6d9c4fc1fcfd84d163cf92e5c80f03d24a420d99 Author: Alain <alain@MacBook-Pro-de-Alain.local> Date: Sat Oct 14 12:37:17 2017 -0400 Initial Commit
Note: Votre fichier gitlog.txt sera probablement différent.
Action.6.3 – Identifier le SHA du commit ‘Ajout de la méthode afficher()‘
Note: Dans mon cas le SHA est « 2d87e2bc82636875c82da817c251c2a3bf1014b2 »
Attention: Il faut fermer le projet Xcode avant d’effectuer la prochaine opération.
Action.6.4 – Déplacer la tête (HEAD) de la branche master en utilisant le SHA identifié à l’étape précédente.
$ git reset --hard 2d87e2bc8 $ git log
Voila!
Note: Les commits qui suivaient SHA sont « 2d87e2bc82636875c82da817c251c2a3bf1014b2 » toujours disponibles. C’est pour cette raison que nous avons créé le fichier gitlog.txt, au cas ou il faudrait revenir vers l’avant.
Action.7.1 – Sélectionner l’option ‘Clone‘ du menu ‘Source Control‘
Action.7.2 – Sélectionner, dans la liste, le projet désiré.
Action.7.3 – Renseigner le dossier d’enregistrement
Action.7.4 – Travailler dans le projet local.
Note: Le projet cloné est lié au projet stocké sur GitHub. C-a-d, qu’il est possible de faire des ‘push’/’pull’.
De plus, vous avez seulement cloné la branche active de GitHub.
Il faudra faire un ‘checkout’ pour pouvoir travailler sur d’autres branches du projet.
1 – homebrew (gestionnaire de packages)
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
2 – git (devrait être déjà installé sur Mac OS)
3 – Git bash-completion (avec homebrew)
brew install git bash-completion
if [ -f `brew --prefix`/etc/bash_completion ]; then . `brew --prefix`/etc/bash_completion fi
4 – Afficher le nom de la branche git dans l’invite – dans le fichier .bash_profil, ajouter ceci à la fin:
#Afficher la branche de git dans l'invite PS1='[\W$(__git_ps1 " (%s)")]\$ '
5 – cocoapods (avec homebrew)
brew install cocoapods
cheatsheet1 – https://services.github.com/on-demand/downloads/fr/github-git-cheat-sheet.pdf
stackedit – https://stackedit.io
1- Intro: https://www.raywenderlich.com/51351/how-to-use-git-source-control-with-xcode-in-ios-7
2-Intermédiaire: https://www.raywenderlich.com/74258/git-tutorial-intermediate
defaults write com.apple.finder AppleShowAllFiles YES