Slide 1

Slide 1 text

Git ʙ Découverte Session 1 / 4 Matti Schneider @matti_sg Les éléments soulignés dans les notes signifient qu'il faut passer à l'étape suivante de l'animation interne à la slide (soit la page suivante dans le PDF).

Slide 2

Slide 2 text

2

Slide 3

Slide 3 text

• Matti Schneider (mattischneider.fr) 2

Slide 4

Slide 4 text

• Matti Schneider (mattischneider.fr) • fin d’études chez Eurogiciel 2

Slide 5

Slide 5 text

• Matti Schneider (mattischneider.fr) • fin d’études chez Eurogiciel • Git – ഁ 2

Slide 6

Slide 6 text

• Matti Schneider (mattischneider.fr) • fin d’études chez Eurogiciel • Git – ഁ • deux ans d’expérience (plus deux avec Bazaar) 2

Slide 7

Slide 7 text

• Matti Schneider (mattischneider.fr) • fin d’études chez Eurogiciel • Git – ഁ • deux ans d’expérience (plus deux avec Bazaar) • intégrateur sur plusieurs dépôts publics • github.com/MattiSG 2

Slide 8

Slide 8 text

• Matti Schneider (mattischneider.fr) • fin d’études chez Eurogiciel • Git – ഁ • deux ans d’expérience (plus deux avec Bazaar) • intégrateur sur plusieurs dépôts publics • github.com/MattiSG • nombreuses formations informelles 2

Slide 9

Slide 9 text

Objectifs 3 Pour ce qui est des avantages, je comparerai majoritairement à SVN. Pour les experts ClearCase, je ne serai pas capable de faire des comparaisons pertinentes, puisque je n'ai jamais pu l'utiliser directement. Plusieurs comparatifs détaillés existent sur Internet, et gardez toutes vos questions et remarques pour la fin de la présentation :)

Slide 10

Slide 10 text

Objectifs 1. Savoir ce qu’est Git. 3 Pour ce qui est des avantages, je comparerai majoritairement à SVN. Pour les experts ClearCase, je ne serai pas capable de faire des comparaisons pertinentes, puisque je n'ai jamais pu l'utiliser directement. Plusieurs comparatifs détaillés existent sur Internet, et gardez toutes vos questions et remarques pour la fin de la présentation :)

Slide 11

Slide 11 text

Objectifs 1. Savoir ce qu’est Git. 2. Ses avantages. 3 Pour ce qui est des avantages, je comparerai majoritairement à SVN. Pour les experts ClearCase, je ne serai pas capable de faire des comparaisons pertinentes, puisque je n'ai jamais pu l'utiliser directement. Plusieurs comparatifs détaillés existent sur Internet, et gardez toutes vos questions et remarques pour la fin de la présentation :)

Slide 12

Slide 12 text

Objectifs 1. Savoir ce qu’est Git. 2. Ses avantages. 3. Pouvoir débuter. 3 Pour ce qui est des avantages, je comparerai majoritairement à SVN. Pour les experts ClearCase, je ne serai pas capable de faire des comparaisons pertinentes, puisque je n'ai jamais pu l'utiliser directement. Plusieurs comparatifs détaillés existent sur Internet, et gardez toutes vos questions et remarques pour la fin de la présentation :)

Slide 13

Slide 13 text

Version Control System 4 Un VCS, en français “gestionnaire de versions”, est un outil qui a deux fonctions principales. Vous avez obligatoirement déjà utilisé un VCS, très probablement SVN, ou encore ClearCase. Systématiquement, l’un des objectifs est de collaborer entre plusieurs éditeurs. Cela est rendu possible par l’autre objectif, celui de conserver la totalité de l’historique des états dans lequel un ensemble de fichiers se trouve. Prenons l’exemple d’un fichier. On lui applique des modifications, et on aboutit à une nouvelle révision de son état. Si l’on étend cela à plusieurs fichiers, on obtient le point de vue du VCS : un commit est un ensemble de fichiers ayant chacun atteint une révision spécifique, et l’ensemble des modifications appliquées à des fichiers d’un commit à l’autre est un diff, soit l’ensemble des différences entre deux commits.

Slide 14

Slide 14 text

Version Control System • gestionnaire de versions • CVS, SVN, ClearCase, Mercurial, Bazaar, Dropbox… 4 Un VCS, en français “gestionnaire de versions”, est un outil qui a deux fonctions principales. Vous avez obligatoirement déjà utilisé un VCS, très probablement SVN, ou encore ClearCase. Systématiquement, l’un des objectifs est de collaborer entre plusieurs éditeurs. Cela est rendu possible par l’autre objectif, celui de conserver la totalité de l’historique des états dans lequel un ensemble de fichiers se trouve. Prenons l’exemple d’un fichier. On lui applique des modifications, et on aboutit à une nouvelle révision de son état. Si l’on étend cela à plusieurs fichiers, on obtient le point de vue du VCS : un commit est un ensemble de fichiers ayant chacun atteint une révision spécifique, et l’ensemble des modifications appliquées à des fichiers d’un commit à l’autre est un diff, soit l’ensemble des différences entre deux commits.

Slide 15

Slide 15 text

Version Control System • gestionnaire de versions • CVS, SVN, ClearCase, Mercurial, Bazaar, Dropbox… • collaborer 4 Un VCS, en français “gestionnaire de versions”, est un outil qui a deux fonctions principales. Vous avez obligatoirement déjà utilisé un VCS, très probablement SVN, ou encore ClearCase. Systématiquement, l’un des objectifs est de collaborer entre plusieurs éditeurs. Cela est rendu possible par l’autre objectif, celui de conserver la totalité de l’historique des états dans lequel un ensemble de fichiers se trouve. Prenons l’exemple d’un fichier. On lui applique des modifications, et on aboutit à une nouvelle révision de son état. Si l’on étend cela à plusieurs fichiers, on obtient le point de vue du VCS : un commit est un ensemble de fichiers ayant chacun atteint une révision spécifique, et l’ensemble des modifications appliquées à des fichiers d’un commit à l’autre est un diff, soit l’ensemble des différences entre deux commits.

Slide 16

Slide 16 text

Version Control System • gestionnaire de versions • CVS, SVN, ClearCase, Mercurial, Bazaar, Dropbox… • collaborer • sauvegarder l’historique 4 Un VCS, en français “gestionnaire de versions”, est un outil qui a deux fonctions principales. Vous avez obligatoirement déjà utilisé un VCS, très probablement SVN, ou encore ClearCase. Systématiquement, l’un des objectifs est de collaborer entre plusieurs éditeurs. Cela est rendu possible par l’autre objectif, celui de conserver la totalité de l’historique des états dans lequel un ensemble de fichiers se trouve. Prenons l’exemple d’un fichier. On lui applique des modifications, et on aboutit à une nouvelle révision de son état. Si l’on étend cela à plusieurs fichiers, on obtient le point de vue du VCS : un commit est un ensemble de fichiers ayant chacun atteint une révision spécifique, et l’ensemble des modifications appliquées à des fichiers d’un commit à l’autre est un diff, soit l’ensemble des différences entre deux commits.

Slide 17

Slide 17 text

Version Control System • gestionnaire de versions • CVS, SVN, ClearCase, Mercurial, Bazaar, Dropbox… • collaborer • sauvegarder l’historique 4

Slide 18

Slide 18 text

Version Control System • gestionnaire de versions • CVS, SVN, ClearCase, Mercurial, Bazaar, Dropbox… • collaborer • sauvegarder l’historique 4

Slide 19

Slide 19 text

Version Control System • gestionnaire de versions • CVS, SVN, ClearCase, Mercurial, Bazaar, Dropbox… • collaborer • sauvegarder l’historique 4 Un VCS, en français “gestionnaire de versions”, est un outil qui a deux fonctions principales. Vous avez obligatoirement déjà utilisé un VCS, très probablement SVN, ou encore ClearCase. Systématiquement, l’un des objectifs est de collaborer entre plusieurs éditeurs. Cela est rendu possible par l’autre objectif, celui de conserver la totalité de l’historique des états dans lequel un ensemble de fichiers se trouve. Prenons l’exemple d’un fichier. On lui applique des modifications, et on aboutit à une nouvelle révision de son état. Si l’on étend cela à plusieurs fichiers, on obtient le point de vue du VCS : un commit est un ensemble de fichiers ayant chacun atteint une révision spécifique, et l’ensemble des modifications appliquées à des fichiers d’un commit à l’autre est un diff, soit l’ensemble des différences entre deux commits.

Slide 20

Slide 20 text

Version Control System • gestionnaire de versions • CVS, SVN, ClearCase, Mercurial, Bazaar, Dropbox… • collaborer • sauvegarder l’historique 4 +++ - - - Un VCS, en français “gestionnaire de versions”, est un outil qui a deux fonctions principales. Vous avez obligatoirement déjà utilisé un VCS, très probablement SVN, ou encore ClearCase. Systématiquement, l’un des objectifs est de collaborer entre plusieurs éditeurs. Cela est rendu possible par l’autre objectif, celui de conserver la totalité de l’historique des états dans lequel un ensemble de fichiers se trouve. Prenons l’exemple d’un fichier. On lui applique des modifications, et on aboutit à une nouvelle révision de son état. Si l’on étend cela à plusieurs fichiers, on obtient le point de vue du VCS : un commit est un ensemble de fichiers ayant chacun atteint une révision spécifique, et l’ensemble des modifications appliquées à des fichiers d’un commit à l’autre est un diff, soit l’ensemble des différences entre deux commits.

Slide 21

Slide 21 text

Version Control System • gestionnaire de versions • CVS, SVN, ClearCase, Mercurial, Bazaar, Dropbox… • collaborer • sauvegarder l’historique 4 +++ - - - Un VCS, en français “gestionnaire de versions”, est un outil qui a deux fonctions principales. Vous avez obligatoirement déjà utilisé un VCS, très probablement SVN, ou encore ClearCase. Systématiquement, l’un des objectifs est de collaborer entre plusieurs éditeurs. Cela est rendu possible par l’autre objectif, celui de conserver la totalité de l’historique des états dans lequel un ensemble de fichiers se trouve. Prenons l’exemple d’un fichier. On lui applique des modifications, et on aboutit à une nouvelle révision de son état. Si l’on étend cela à plusieurs fichiers, on obtient le point de vue du VCS : un commit est un ensemble de fichiers ayant chacun atteint une révision spécifique, et l’ensemble des modifications appliquées à des fichiers d’un commit à l’autre est un diff, soit l’ensemble des différences entre deux commits.

Slide 22

Slide 22 text

Branches 5 L’historique est donc un ensemble ordonné de révisions. Voici la vision de cet historique dont vous avez certainement l’habitude. Néanmoins, dans la pratique du développement, il est quasi-systématique que plusieurs modifications soient effectuées en parallèle : l’une pour ajouter une nouvelle fonctionnalité, l’autre pour corriger un bug… L’historique n’est donc pas linéaire. Au contraire, il s’agit d’un graphe. On parle de branche pour chaque ensemble de commits parallèles, et de merge lorsqu’un ensemble de commits est appliqué à une autre branche. Si vous avez l’habitude de SVN, vous avez certainement peur. SVN gère extrêmement mal les branches et, à cause de cela, le concept même de branche semble lourd, complexe, et risqué. Git rend leur utilisation tellement simple et rapide que les branches sont utilisées plusieurs fois par jour. Sous SVN, la création d’une branche est en réalité la création d’une copie (une “cheap copy”, certes, mais une copie néanmoins) du répertoire complet, ce qui aboutit généralement à avoir deux dossiers à la racine de tout dépôt : “trunk” et “branches”, qui contient toutes les branches utilisées. Le tout est versionné sur le même historique linéaire, et la différence entre les branches est donc dans le contenu du commit et non dans son emplacement dans le dépôt. Sous Git, les branches sont réellement un ensemble de commits différents appliqués aux mêmes fichiers. Le passage d’une branche à l’autre se fait en place, c’est-à-dire que les fichiers sont directement modifiés, au lieu d’avoir plusieurs répertoires contenant des versions différentes. Vous n’avez donc pas à reconfigurer votre environnement de travail (IDE, ligne de commande…) pour changer de branche. Les conflits sont également bien mieux gérés sous Git. Git ne se repose pas sur les chemins des fichiers pour déterminer les modifications. Ainsi, les refactors sont beaucoup mieux suivis que sous SVN, où tout renommage doit être explicité, par exemple.

Slide 23

Slide 23 text

Branches • historique 5 L’historique est donc un ensemble ordonné de révisions. Voici la vision de cet historique dont vous avez certainement l’habitude. Néanmoins, dans la pratique du développement, il est quasi-systématique que plusieurs modifications soient effectuées en parallèle : l’une pour ajouter une nouvelle fonctionnalité, l’autre pour corriger un bug… L’historique n’est donc pas linéaire. Au contraire, il s’agit d’un graphe. On parle de branche pour chaque ensemble de commits parallèles, et de merge lorsqu’un ensemble de commits est appliqué à une autre branche. Si vous avez l’habitude de SVN, vous avez certainement peur. SVN gère extrêmement mal les branches et, à cause de cela, le concept même de branche semble lourd, complexe, et risqué. Git rend leur utilisation tellement simple et rapide que les branches sont utilisées plusieurs fois par jour. Sous SVN, la création d’une branche est en réalité la création d’une copie (une “cheap copy”, certes, mais une copie néanmoins) du répertoire complet, ce qui aboutit généralement à avoir deux dossiers à la racine de tout dépôt : “trunk” et “branches”, qui contient toutes les branches utilisées. Le tout est versionné sur le même historique linéaire, et la différence entre les branches est donc dans le contenu du commit et non dans son emplacement dans le dépôt. Sous Git, les branches sont réellement un ensemble de commits différents appliqués aux mêmes fichiers. Le passage d’une branche à l’autre se fait en place, c’est-à-dire que les fichiers sont directement modifiés, au lieu d’avoir plusieurs répertoires contenant des versions différentes. Vous n’avez donc pas à reconfigurer votre environnement de travail (IDE, ligne de commande…) pour changer de branche. Les conflits sont également bien mieux gérés sous Git. Git ne se repose pas sur les chemins des fichiers pour déterminer les modifications. Ainsi, les refactors sont beaucoup mieux suivis que sous SVN, où tout renommage doit être explicité, par exemple.

Slide 24

Slide 24 text

Branches • historique 5 L’historique est donc un ensemble ordonné de révisions. Voici la vision de cet historique dont vous avez certainement l’habitude. Néanmoins, dans la pratique du développement, il est quasi-systématique que plusieurs modifications soient effectuées en parallèle : l’une pour ajouter une nouvelle fonctionnalité, l’autre pour corriger un bug… L’historique n’est donc pas linéaire. Au contraire, il s’agit d’un graphe. On parle de branche pour chaque ensemble de commits parallèles, et de merge lorsqu’un ensemble de commits est appliqué à une autre branche. Si vous avez l’habitude de SVN, vous avez certainement peur. SVN gère extrêmement mal les branches et, à cause de cela, le concept même de branche semble lourd, complexe, et risqué. Git rend leur utilisation tellement simple et rapide que les branches sont utilisées plusieurs fois par jour. Sous SVN, la création d’une branche est en réalité la création d’une copie (une “cheap copy”, certes, mais une copie néanmoins) du répertoire complet, ce qui aboutit généralement à avoir deux dossiers à la racine de tout dépôt : “trunk” et “branches”, qui contient toutes les branches utilisées. Le tout est versionné sur le même historique linéaire, et la différence entre les branches est donc dans le contenu du commit et non dans son emplacement dans le dépôt. Sous Git, les branches sont réellement un ensemble de commits différents appliqués aux mêmes fichiers. Le passage d’une branche à l’autre se fait en place, c’est-à-dire que les fichiers sont directement modifiés, au lieu d’avoir plusieurs répertoires contenant des versions différentes. Vous n’avez donc pas à reconfigurer votre environnement de travail (IDE, ligne de commande…) pour changer de branche. Les conflits sont également bien mieux gérés sous Git. Git ne se repose pas sur les chemins des fichiers pour déterminer les modifications. Ainsi, les refactors sont beaucoup mieux suivis que sous SVN, où tout renommage doit être explicité, par exemple.

Slide 25

Slide 25 text

Branches • historique • non-linéaire • graphe orienté acyclique 5 L’historique est donc un ensemble ordonné de révisions. Voici la vision de cet historique dont vous avez certainement l’habitude. Néanmoins, dans la pratique du développement, il est quasi-systématique que plusieurs modifications soient effectuées en parallèle : l’une pour ajouter une nouvelle fonctionnalité, l’autre pour corriger un bug… L’historique n’est donc pas linéaire. Au contraire, il s’agit d’un graphe. On parle de branche pour chaque ensemble de commits parallèles, et de merge lorsqu’un ensemble de commits est appliqué à une autre branche. Si vous avez l’habitude de SVN, vous avez certainement peur. SVN gère extrêmement mal les branches et, à cause de cela, le concept même de branche semble lourd, complexe, et risqué. Git rend leur utilisation tellement simple et rapide que les branches sont utilisées plusieurs fois par jour. Sous SVN, la création d’une branche est en réalité la création d’une copie (une “cheap copy”, certes, mais une copie néanmoins) du répertoire complet, ce qui aboutit généralement à avoir deux dossiers à la racine de tout dépôt : “trunk” et “branches”, qui contient toutes les branches utilisées. Le tout est versionné sur le même historique linéaire, et la différence entre les branches est donc dans le contenu du commit et non dans son emplacement dans le dépôt. Sous Git, les branches sont réellement un ensemble de commits différents appliqués aux mêmes fichiers. Le passage d’une branche à l’autre se fait en place, c’est-à-dire que les fichiers sont directement modifiés, au lieu d’avoir plusieurs répertoires contenant des versions différentes. Vous n’avez donc pas à reconfigurer votre environnement de travail (IDE, ligne de commande…) pour changer de branche. Les conflits sont également bien mieux gérés sous Git. Git ne se repose pas sur les chemins des fichiers pour déterminer les modifications. Ainsi, les refactors sont beaucoup mieux suivis que sous SVN, où tout renommage doit être explicité, par exemple.

Slide 26

Slide 26 text

Branches • historique • non-linéaire • graphe orienté acyclique 5 branche branche intégration (merge) L’historique est donc un ensemble ordonné de révisions. Voici la vision de cet historique dont vous avez certainement l’habitude. Néanmoins, dans la pratique du développement, il est quasi-systématique que plusieurs modifications soient effectuées en parallèle : l’une pour ajouter une nouvelle fonctionnalité, l’autre pour corriger un bug… L’historique n’est donc pas linéaire. Au contraire, il s’agit d’un graphe. On parle de branche pour chaque ensemble de commits parallèles, et de merge lorsqu’un ensemble de commits est appliqué à une autre branche. Si vous avez l’habitude de SVN, vous avez certainement peur. SVN gère extrêmement mal les branches et, à cause de cela, le concept même de branche semble lourd, complexe, et risqué. Git rend leur utilisation tellement simple et rapide que les branches sont utilisées plusieurs fois par jour. Sous SVN, la création d’une branche est en réalité la création d’une copie (une “cheap copy”, certes, mais une copie néanmoins) du répertoire complet, ce qui aboutit généralement à avoir deux dossiers à la racine de tout dépôt : “trunk” et “branches”, qui contient toutes les branches utilisées. Le tout est versionné sur le même historique linéaire, et la différence entre les branches est donc dans le contenu du commit et non dans son emplacement dans le dépôt. Sous Git, les branches sont réellement un ensemble de commits différents appliqués aux mêmes fichiers. Le passage d’une branche à l’autre se fait en place, c’est-à-dire que les fichiers sont directement modifiés, au lieu d’avoir plusieurs répertoires contenant des versions différentes. Vous n’avez donc pas à reconfigurer votre environnement de travail (IDE, ligne de commande…) pour changer de branche. Les conflits sont également bien mieux gérés sous Git. Git ne se repose pas sur les chemins des fichiers pour déterminer les modifications. Ainsi, les refactors sont beaucoup mieux suivis que sous SVN, où tout renommage doit être explicité, par exemple.

Slide 27

Slide 27 text

Branches • historique • non-linéaire • graphe orienté acyclique • très simple avec Git 5 branche branche intégration (merge) L’historique est donc un ensemble ordonné de révisions. Voici la vision de cet historique dont vous avez certainement l’habitude. Néanmoins, dans la pratique du développement, il est quasi-systématique que plusieurs modifications soient effectuées en parallèle : l’une pour ajouter une nouvelle fonctionnalité, l’autre pour corriger un bug… L’historique n’est donc pas linéaire. Au contraire, il s’agit d’un graphe. On parle de branche pour chaque ensemble de commits parallèles, et de merge lorsqu’un ensemble de commits est appliqué à une autre branche. Si vous avez l’habitude de SVN, vous avez certainement peur. SVN gère extrêmement mal les branches et, à cause de cela, le concept même de branche semble lourd, complexe, et risqué. Git rend leur utilisation tellement simple et rapide que les branches sont utilisées plusieurs fois par jour. Sous SVN, la création d’une branche est en réalité la création d’une copie (une “cheap copy”, certes, mais une copie néanmoins) du répertoire complet, ce qui aboutit généralement à avoir deux dossiers à la racine de tout dépôt : “trunk” et “branches”, qui contient toutes les branches utilisées. Le tout est versionné sur le même historique linéaire, et la différence entre les branches est donc dans le contenu du commit et non dans son emplacement dans le dépôt. Sous Git, les branches sont réellement un ensemble de commits différents appliqués aux mêmes fichiers. Le passage d’une branche à l’autre se fait en place, c’est-à-dire que les fichiers sont directement modifiés, au lieu d’avoir plusieurs répertoires contenant des versions différentes. Vous n’avez donc pas à reconfigurer votre environnement de travail (IDE, ligne de commande…) pour changer de branche. Les conflits sont également bien mieux gérés sous Git. Git ne se repose pas sur les chemins des fichiers pour déterminer les modifications. Ainsi, les refactors sont beaucoup mieux suivis que sous SVN, où tout renommage doit être explicité, par exemple.

Slide 28

Slide 28 text

Branches • historique • non-linéaire • graphe orienté acyclique • très simple avec Git • changement “en place” 5 branche branche intégration (merge) L’historique est donc un ensemble ordonné de révisions. Voici la vision de cet historique dont vous avez certainement l’habitude. Néanmoins, dans la pratique du développement, il est quasi-systématique que plusieurs modifications soient effectuées en parallèle : l’une pour ajouter une nouvelle fonctionnalité, l’autre pour corriger un bug… L’historique n’est donc pas linéaire. Au contraire, il s’agit d’un graphe. On parle de branche pour chaque ensemble de commits parallèles, et de merge lorsqu’un ensemble de commits est appliqué à une autre branche. Si vous avez l’habitude de SVN, vous avez certainement peur. SVN gère extrêmement mal les branches et, à cause de cela, le concept même de branche semble lourd, complexe, et risqué. Git rend leur utilisation tellement simple et rapide que les branches sont utilisées plusieurs fois par jour. Sous SVN, la création d’une branche est en réalité la création d’une copie (une “cheap copy”, certes, mais une copie néanmoins) du répertoire complet, ce qui aboutit généralement à avoir deux dossiers à la racine de tout dépôt : “trunk” et “branches”, qui contient toutes les branches utilisées. Le tout est versionné sur le même historique linéaire, et la différence entre les branches est donc dans le contenu du commit et non dans son emplacement dans le dépôt. Sous Git, les branches sont réellement un ensemble de commits différents appliqués aux mêmes fichiers. Le passage d’une branche à l’autre se fait en place, c’est-à-dire que les fichiers sont directement modifiés, au lieu d’avoir plusieurs répertoires contenant des versions différentes. Vous n’avez donc pas à reconfigurer votre environnement de travail (IDE, ligne de commande…) pour changer de branche. Les conflits sont également bien mieux gérés sous Git. Git ne se repose pas sur les chemins des fichiers pour déterminer les modifications. Ainsi, les refactors sont beaucoup mieux suivis que sous SVN, où tout renommage doit être explicité, par exemple.

Slide 29

Slide 29 text

Branches • historique • non-linéaire • graphe orienté acyclique • très simple avec Git • changement “en place” • versionné par contenu et non par chemin 5 branche branche intégration (merge) L’historique est donc un ensemble ordonné de révisions. Voici la vision de cet historique dont vous avez certainement l’habitude. Néanmoins, dans la pratique du développement, il est quasi-systématique que plusieurs modifications soient effectuées en parallèle : l’une pour ajouter une nouvelle fonctionnalité, l’autre pour corriger un bug… L’historique n’est donc pas linéaire. Au contraire, il s’agit d’un graphe. On parle de branche pour chaque ensemble de commits parallèles, et de merge lorsqu’un ensemble de commits est appliqué à une autre branche. Si vous avez l’habitude de SVN, vous avez certainement peur. SVN gère extrêmement mal les branches et, à cause de cela, le concept même de branche semble lourd, complexe, et risqué. Git rend leur utilisation tellement simple et rapide que les branches sont utilisées plusieurs fois par jour. Sous SVN, la création d’une branche est en réalité la création d’une copie (une “cheap copy”, certes, mais une copie néanmoins) du répertoire complet, ce qui aboutit généralement à avoir deux dossiers à la racine de tout dépôt : “trunk” et “branches”, qui contient toutes les branches utilisées. Le tout est versionné sur le même historique linéaire, et la différence entre les branches est donc dans le contenu du commit et non dans son emplacement dans le dépôt. Sous Git, les branches sont réellement un ensemble de commits différents appliqués aux mêmes fichiers. Le passage d’une branche à l’autre se fait en place, c’est-à-dire que les fichiers sont directement modifiés, au lieu d’avoir plusieurs répertoires contenant des versions différentes. Vous n’avez donc pas à reconfigurer votre environnement de travail (IDE, ligne de commande…) pour changer de branche. Les conflits sont également bien mieux gérés sous Git. Git ne se repose pas sur les chemins des fichiers pour déterminer les modifications. Ainsi, les refactors sont beaucoup mieux suivis que sous SVN, où tout renommage doit être explicité, par exemple.

Slide 30

Slide 30 text

DVCS 6 Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 31

Slide 31 text

DVCS 6 Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 32

Slide 32 text

DVCS • distribué 6 Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 33

Slide 33 text

DVCS • distribué 6 Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 34

Slide 34 text

DVCS • distribué • historique complet sur chaque machine 6 Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 35

Slide 35 text

DVCS • distribué • historique complet sur chaque machine 6 dépôt (repositery) Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 36

Slide 36 text

DVCS • distribué • historique complet sur chaque machine • résilient 6 dépôt (repositery) Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 37

Slide 37 text

DVCS • distribué • historique complet sur chaque machine • résilient • rapide ! 6 dépôt (repositery) Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 38

Slide 38 text

DVCS • distribué • historique complet sur chaque machine • résilient • rapide ! • pair-à-pair 6 dépôt (repositery) Git est un DVCS, c’est-à-dire un système de gestion de versions distribué. Cela signifie que chaque machine travaillant sur un dépôt possède une copie complète de l’historique commun. Cette structure rend le processus beaucoup plus résilient : même en cas d’inaccessibilité complète (crash) ou temporaire (problèmes réseau) du serveur central, les données sont récupérables sur chacune des machines clientes. De même, les opérations sur l’historique sont bien plus rapides, puisqu’aucune opération ne nécessite d’accès réseau. Enfin, ce système offre une extrême liberté sur les processus organisationnels, puisqu’étant distribué, il permet de transmettre des modifications en pair à pair sans nécessairement passer par un serveur central.

Slide 39

Slide 39 text

Histoire 7 Linus Torvalds, créateur et développeur du noyau Linux. Le noyau Linux était versionné par BitKeeper, un logiciel propriétaire, depuis 2002. En 2005, BitKeeper a cessé d’offrir une version gratuite, et a refusé de fournir des licences commerciales aux développeurs de l’OSDL (Open Source Development Labs), dont Linus Torvalds. Aucun VCS existant ne répondait à ses exigences, en termes d’usabilité (“when in doubt, do exactly the opposite of CVS”) et de performance. Il commença donc à travailler à un nouveau système de gestion de versions, au départ spécifiquement pour le noyau Linux. Le projet fut rapidement repris et élargi pour devenir un VCS complet. Aujourd’hui, toute l’industrie adopte Git. Morale : don’t mess with Open-Source ;)

Slide 40

Slide 40 text

Histoire 7 Linus Torvalds, créateur et développeur du noyau Linux. Le noyau Linux était versionné par BitKeeper, un logiciel propriétaire, depuis 2002. En 2005, BitKeeper a cessé d’offrir une version gratuite, et a refusé de fournir des licences commerciales aux développeurs de l’OSDL (Open Source Development Labs), dont Linus Torvalds. Aucun VCS existant ne répondait à ses exigences, en termes d’usabilité (“when in doubt, do exactly the opposite of CVS”) et de performance. Il commença donc à travailler à un nouveau système de gestion de versions, au départ spécifiquement pour le noyau Linux. Le projet fut rapidement repris et élargi pour devenir un VCS complet. Aujourd’hui, toute l’industrie adopte Git. Morale : don’t mess with Open-Source ;)

Slide 41

Slide 41 text

Histoire 7 Linus Torvalds, créateur et développeur du noyau Linux. Le noyau Linux était versionné par BitKeeper, un logiciel propriétaire, depuis 2002. En 2005, BitKeeper a cessé d’offrir une version gratuite, et a refusé de fournir des licences commerciales aux développeurs de l’OSDL (Open Source Development Labs), dont Linus Torvalds. Aucun VCS existant ne répondait à ses exigences, en termes d’usabilité (“when in doubt, do exactly the opposite of CVS”) et de performance. Il commença donc à travailler à un nouveau système de gestion de versions, au départ spécifiquement pour le noyau Linux. Le projet fut rapidement repris et élargi pour devenir un VCS complet. Aujourd’hui, toute l’industrie adopte Git. Morale : don’t mess with Open-Source ;)

Slide 42

Slide 42 text

Installation 8 Il faut bien entendu installer Git. Il est écrit en C, n’a aucune dépendance spécifique, et est précompilé pour la quasi-totalité des plateformes et disponible sur tous les dépôts Linux. Pour simplifier l'utilisation, vous pouvez également installer un plugin pour votre IDE, le navigateur de fichiers de votre OS, etc. Je vous conseille très fortement l’utilisation d’une interface graphique. Il ne s’agit pas d’un simple bonus, mais d’un gain réel à l’usage : un support visuel à la gestion des branches et à l’ajout d’éléments aux commits devient vite extrêmement utile. Si vous n’avez pas de vue graphique, vous vous limiterez très vite à n’utiliser qu’un sous-ensemble des possibilités de Git.

Slide 43

Slide 43 text

Installation • exécutable (C) • git-scm.com 8 Il faut bien entendu installer Git. Il est écrit en C, n’a aucune dépendance spécifique, et est précompilé pour la quasi-totalité des plateformes et disponible sur tous les dépôts Linux. Pour simplifier l'utilisation, vous pouvez également installer un plugin pour votre IDE, le navigateur de fichiers de votre OS, etc. Je vous conseille très fortement l’utilisation d’une interface graphique. Il ne s’agit pas d’un simple bonus, mais d’un gain réel à l’usage : un support visuel à la gestion des branches et à l’ajout d’éléments aux commits devient vite extrêmement utile. Si vous n’avez pas de vue graphique, vous vous limiterez très vite à n’utiliser qu’un sous-ensemble des possibilités de Git.

Slide 44

Slide 44 text

Installation • exécutable (C) • git-scm.com • plugins • IDE, explorateur fichiers… 8 Il faut bien entendu installer Git. Il est écrit en C, n’a aucune dépendance spécifique, et est précompilé pour la quasi-totalité des plateformes et disponible sur tous les dépôts Linux. Pour simplifier l'utilisation, vous pouvez également installer un plugin pour votre IDE, le navigateur de fichiers de votre OS, etc. Je vous conseille très fortement l’utilisation d’une interface graphique. Il ne s’agit pas d’un simple bonus, mais d’un gain réel à l’usage : un support visuel à la gestion des branches et à l’ajout d’éléments aux commits devient vite extrêmement utile. Si vous n’avez pas de vue graphique, vous vous limiterez très vite à n’utiliser qu’un sous-ensemble des possibilités de Git.

Slide 45

Slide 45 text

Installation • exécutable (C) • git-scm.com • plugins • IDE, explorateur fichiers… • GUI • Windows : GitExtensions • OS X : GitX • Linux : GitG, Kgit, Cgit… 8 Il faut bien entendu installer Git. Il est écrit en C, n’a aucune dépendance spécifique, et est précompilé pour la quasi-totalité des plateformes et disponible sur tous les dépôts Linux. Pour simplifier l'utilisation, vous pouvez également installer un plugin pour votre IDE, le navigateur de fichiers de votre OS, etc. Je vous conseille très fortement l’utilisation d’une interface graphique. Il ne s’agit pas d’un simple bonus, mais d’un gain réel à l’usage : un support visuel à la gestion des branches et à l’ajout d’éléments aux commits devient vite extrêmement utile. Si vous n’avez pas de vue graphique, vous vous limiterez très vite à n’utiliser qu’un sous-ensemble des possibilités de Git.

Slide 46

Slide 46 text

Installation • exécutable (C) • git-scm.com • plugins • IDE, explorateur fichiers… • GUI • Windows : GitExtensions • OS X : GitX • Linux : GitG, Kgit, Cgit… 8 Il faut bien entendu installer Git. Il est écrit en C, n’a aucune dépendance spécifique, et est précompilé pour la quasi-totalité des plateformes et disponible sur tous les dépôts Linux. Pour simplifier l'utilisation, vous pouvez également installer un plugin pour votre IDE, le navigateur de fichiers de votre OS, etc. Je vous conseille très fortement l’utilisation d’une interface graphique. Il ne s’agit pas d’un simple bonus, mais d’un gain réel à l’usage : un support visuel à la gestion des branches et à l’ajout d’éléments aux commits devient vite extrêmement utile. Si vous n’avez pas de vue graphique, vous vous limiterez très vite à n’utiliser qu’un sous-ensemble des possibilités de Git.

Slide 47

Slide 47 text

Configuration 9 Git associera votre identité à chaque commit, il est donc vital pour la traçabilité du code que vous renseigniez correctement ces informations. Les fins de ligne sont différentes entre Windows et les autres OS. Pour éviter tout problème de compatibilité, Git peut convertir les fins de ligne à la volée. Sous Windows, on va donc demander de transformer en CRLF lors de la récupération des modifications, et de re-convertir en LF lors de l’envoi. Sous les autres OS, on demandera l’utilisation systématique de LF. Voir http://help.github.com/line-endings/ Toutes les informations de configuration stockées en “--global” sont enregistrées dans un fichier à la racine de votre répertoire utilisateur (~/.gitconfig). Enfin, la création d’une clé SSH sera rapidement nécessaire pour toute authentification avec Git. Il vous faudra donc en générer au moins une. Voir http://www.git-attitude.fr/2010/09/13/ comprendre-et-maitriser-les-cles-ssh/

Slide 48

Slide 48 text

Configuration • identification 9 Git associera votre identité à chaque commit, il est donc vital pour la traçabilité du code que vous renseigniez correctement ces informations. Les fins de ligne sont différentes entre Windows et les autres OS. Pour éviter tout problème de compatibilité, Git peut convertir les fins de ligne à la volée. Sous Windows, on va donc demander de transformer en CRLF lors de la récupération des modifications, et de re-convertir en LF lors de l’envoi. Sous les autres OS, on demandera l’utilisation systématique de LF. Voir http://help.github.com/line-endings/ Toutes les informations de configuration stockées en “--global” sont enregistrées dans un fichier à la racine de votre répertoire utilisateur (~/.gitconfig). Enfin, la création d’une clé SSH sera rapidement nécessaire pour toute authentification avec Git. Il vous faudra donc en générer au moins une. Voir http://www.git-attitude.fr/2010/09/13/ comprendre-et-maitriser-les-cles-ssh/

Slide 49

Slide 49 text

Configuration • identification git config --global user.name "Prénom Nom" git config --global user.email "[email protected]" 9 Git associera votre identité à chaque commit, il est donc vital pour la traçabilité du code que vous renseigniez correctement ces informations. Les fins de ligne sont différentes entre Windows et les autres OS. Pour éviter tout problème de compatibilité, Git peut convertir les fins de ligne à la volée. Sous Windows, on va donc demander de transformer en CRLF lors de la récupération des modifications, et de re-convertir en LF lors de l’envoi. Sous les autres OS, on demandera l’utilisation systématique de LF. Voir http://help.github.com/line-endings/ Toutes les informations de configuration stockées en “--global” sont enregistrées dans un fichier à la racine de votre répertoire utilisateur (~/.gitconfig). Enfin, la création d’une clé SSH sera rapidement nécessaire pour toute authentification avec Git. Il vous faudra donc en générer au moins une. Voir http://www.git-attitude.fr/2010/09/13/ comprendre-et-maitriser-les-cles-ssh/

Slide 50

Slide 50 text

Configuration • identification git config --global user.name "Prénom Nom" git config --global user.email "[email protected]" • fins de lignes • sous Windows git config --global core.autocrlf true • autres git config --global core.autocrlf input 9 Git associera votre identité à chaque commit, il est donc vital pour la traçabilité du code que vous renseigniez correctement ces informations. Les fins de ligne sont différentes entre Windows et les autres OS. Pour éviter tout problème de compatibilité, Git peut convertir les fins de ligne à la volée. Sous Windows, on va donc demander de transformer en CRLF lors de la récupération des modifications, et de re-convertir en LF lors de l’envoi. Sous les autres OS, on demandera l’utilisation systématique de LF. Voir http://help.github.com/line-endings/ Toutes les informations de configuration stockées en “--global” sont enregistrées dans un fichier à la racine de votre répertoire utilisateur (~/.gitconfig). Enfin, la création d’une clé SSH sera rapidement nécessaire pour toute authentification avec Git. Il vous faudra donc en générer au moins une. Voir http://www.git-attitude.fr/2010/09/13/ comprendre-et-maitriser-les-cles-ssh/

Slide 51

Slide 51 text

Configuration • identification git config --global user.name "Prénom Nom" git config --global user.email "[email protected]" • fins de lignes • sous Windows git config --global core.autocrlf true • autres git config --global core.autocrlf input • clé SSH • Putty sous Windows, ssh-keygen ailleurs 9 Git associera votre identité à chaque commit, il est donc vital pour la traçabilité du code que vous renseigniez correctement ces informations. Les fins de ligne sont différentes entre Windows et les autres OS. Pour éviter tout problème de compatibilité, Git peut convertir les fins de ligne à la volée. Sous Windows, on va donc demander de transformer en CRLF lors de la récupération des modifications, et de re-convertir en LF lors de l’envoi. Sous les autres OS, on demandera l’utilisation systématique de LF. Voir http://help.github.com/line-endings/ Toutes les informations de configuration stockées en “--global” sont enregistrées dans un fichier à la racine de votre répertoire utilisateur (~/.gitconfig). Enfin, la création d’une clé SSH sera rapidement nécessaire pour toute authentification avec Git. Il vous faudra donc en générer au moins une. Voir http://www.git-attitude.fr/2010/09/13/ comprendre-et-maitriser-les-cles-ssh/

Slide 52

Slide 52 text

Création d'un dépôt 10 La création d'un dépôt Git est très simple. Supposons que l'on veuille versionner un projet. La commande “git init” va créer un dossier invisible .git, qui contient la totalité du dépôt, c'est-à-dire toutes les branches et tout l'historique des révisions. Contrairement à SVN qui ajoute des dossiers invisibles .svn de manière récursive, seul ce dossier à la racine du dossier versionné est utilisé. Cela signifie donc que l'export d'une version spécifique est plus simple qu'avec SVN, qu'il faudrait nettoyer. Appliquons une modification dans ce dépôt tout neuf. Pour obtenir des informations sur les fichiers modifiés depuis le dernier commit, on utilise la commande “status”, comme dans la majorité des VCS. Git nous informe de la présence d'un fichier non connu, “untracked”. Comme vous le voyez, Git met immédiatement l'emphase sur la branche actuelle. Nous verrons plus loin comment gérer les branches.

Slide 53

Slide 53 text

Création d'un dépôt $ cd "Colors list" 10 Colors list La création d'un dépôt Git est très simple. Supposons que l'on veuille versionner un projet. La commande “git init” va créer un dossier invisible .git, qui contient la totalité du dépôt, c'est-à-dire toutes les branches et tout l'historique des révisions. Contrairement à SVN qui ajoute des dossiers invisibles .svn de manière récursive, seul ce dossier à la racine du dossier versionné est utilisé. Cela signifie donc que l'export d'une version spécifique est plus simple qu'avec SVN, qu'il faudrait nettoyer. Appliquons une modification dans ce dépôt tout neuf. Pour obtenir des informations sur les fichiers modifiés depuis le dernier commit, on utilise la commande “status”, comme dans la majorité des VCS. Git nous informe de la présence d'un fichier non connu, “untracked”. Comme vous le voyez, Git met immédiatement l'emphase sur la branche actuelle. Nous verrons plus loin comment gérer les branches.

Slide 54

Slide 54 text

Création d'un dépôt $ cd "Colors list" $ git init Initialized empty Git repository 10 Colors list config .git HEAD La création d'un dépôt Git est très simple. Supposons que l'on veuille versionner un projet. La commande “git init” va créer un dossier invisible .git, qui contient la totalité du dépôt, c'est-à-dire toutes les branches et tout l'historique des révisions. Contrairement à SVN qui ajoute des dossiers invisibles .svn de manière récursive, seul ce dossier à la racine du dossier versionné est utilisé. Cela signifie donc que l'export d'une version spécifique est plus simple qu'avec SVN, qu'il faudrait nettoyer. Appliquons une modification dans ce dépôt tout neuf. Pour obtenir des informations sur les fichiers modifiés depuis le dernier commit, on utilise la commande “status”, comme dans la majorité des VCS. Git nous informe de la présence d'un fichier non connu, “untracked”. Comme vous le voyez, Git met immédiatement l'emphase sur la branche actuelle. Nous verrons plus loin comment gérer les branches.

Slide 55

Slide 55 text

Création d'un dépôt $ cd "Colors list" $ git init Initialized empty Git repository $ echo 'red' > colors 10 Colors list config .git HEAD colors La création d'un dépôt Git est très simple. Supposons que l'on veuille versionner un projet. La commande “git init” va créer un dossier invisible .git, qui contient la totalité du dépôt, c'est-à-dire toutes les branches et tout l'historique des révisions. Contrairement à SVN qui ajoute des dossiers invisibles .svn de manière récursive, seul ce dossier à la racine du dossier versionné est utilisé. Cela signifie donc que l'export d'une version spécifique est plus simple qu'avec SVN, qu'il faudrait nettoyer. Appliquons une modification dans ce dépôt tout neuf. Pour obtenir des informations sur les fichiers modifiés depuis le dernier commit, on utilise la commande “status”, comme dans la majorité des VCS. Git nous informe de la présence d'un fichier non connu, “untracked”. Comme vous le voyez, Git met immédiatement l'emphase sur la branche actuelle. Nous verrons plus loin comment gérer les branches.

Slide 56

Slide 56 text

Création d'un dépôt $ cd "Colors list" $ git init Initialized empty Git repository $ echo 'red' > colors $ git status 10 Colors list config .git HEAD colors La création d'un dépôt Git est très simple. Supposons que l'on veuille versionner un projet. La commande “git init” va créer un dossier invisible .git, qui contient la totalité du dépôt, c'est-à-dire toutes les branches et tout l'historique des révisions. Contrairement à SVN qui ajoute des dossiers invisibles .svn de manière récursive, seul ce dossier à la racine du dossier versionné est utilisé. Cela signifie donc que l'export d'une version spécifique est plus simple qu'avec SVN, qu'il faudrait nettoyer. Appliquons une modification dans ce dépôt tout neuf. Pour obtenir des informations sur les fichiers modifiés depuis le dernier commit, on utilise la commande “status”, comme dans la majorité des VCS. Git nous informe de la présence d'un fichier non connu, “untracked”. Comme vous le voyez, Git met immédiatement l'emphase sur la branche actuelle. Nous verrons plus loin comment gérer les branches.

Slide 57

Slide 57 text

Création d'un dépôt $ cd "Colors list" $ git init Initialized empty Git repository $ echo 'red' > colors $ git status # On branch master # # Initial commit # # Untracked files: # # colors nothing added to commit but untracked files present (use "git add" to track) 10 Colors list config .git HEAD colors La création d'un dépôt Git est très simple. Supposons que l'on veuille versionner un projet. La commande “git init” va créer un dossier invisible .git, qui contient la totalité du dépôt, c'est-à-dire toutes les branches et tout l'historique des révisions. Contrairement à SVN qui ajoute des dossiers invisibles .svn de manière récursive, seul ce dossier à la racine du dossier versionné est utilisé. Cela signifie donc que l'export d'une version spécifique est plus simple qu'avec SVN, qu'il faudrait nettoyer. Appliquons une modification dans ce dépôt tout neuf. Pour obtenir des informations sur les fichiers modifiés depuis le dernier commit, on utilise la commande “status”, comme dans la majorité des VCS. Git nous informe de la présence d'un fichier non connu, “untracked”. Comme vous le voyez, Git met immédiatement l'emphase sur la branche actuelle. Nous verrons plus loin comment gérer les branches.

Slide 58

Slide 58 text

Création d'un dépôt $ cd "Colors list" $ git init Initialized empty Git repository $ echo 'red' > colors $ git status # On branch master # # Initial commit # # Untracked files: # # colors nothing added to commit but untracked files present (use "git add" to track) 10 Colors list config .git HEAD colors La création d'un dépôt Git est très simple. Supposons que l'on veuille versionner un projet. La commande “git init” va créer un dossier invisible .git, qui contient la totalité du dépôt, c'est-à-dire toutes les branches et tout l'historique des révisions. Contrairement à SVN qui ajoute des dossiers invisibles .svn de manière récursive, seul ce dossier à la racine du dossier versionné est utilisé. Cela signifie donc que l'export d'une version spécifique est plus simple qu'avec SVN, qu'il faudrait nettoyer. Appliquons une modification dans ce dépôt tout neuf. Pour obtenir des informations sur les fichiers modifiés depuis le dernier commit, on utilise la commande “status”, comme dans la majorité des VCS. Git nous informe de la présence d'un fichier non connu, “untracked”. Comme vous le voyez, Git met immédiatement l'emphase sur la branche actuelle. Nous verrons plus loin comment gérer les branches.

Slide 59

Slide 59 text

Repositery Staging (index) Working directory Aire d'assemblage # Untracked files: # colors nothing added to commit but untracked files present (use "git add" to track) 11 Mon projet colors Voyons à présent comment versionner des fichiers et suivre leurs modifications. Dans la plupart des VCS, un fichier et soit enregistré, soit modifié. Git offre une position intermédiaire, l'“aire d'assemblage”, ou “staging area” (ou encore index). Pour commit des modifications, celles-ci doivent d'abord être ajoutées dans l'aire d'assemblage, avec la commande add. Si l'on demande à nouveau l'état du dépôt, Git nous informe que le fichier sera enregistré lors du commit. L'intérêt principal de cette étape est de permettre de faire des commits réellement atomiques, une bonne pratique reconnue : vous avez commencé à coder une fonctionnalité, et ce faisant avez découvert un bug, que vous avez corrigé… Au moment de commit, vous vous retrouvez avec un grand nombre de modifications peut-être indépendantes. Grâce à l'aire d'assemblage, vous pouvez effectuer plusieurs commits distincts en sélectionnant les fichiers correspondants un par un. Pour effectuer le commit à proprement parler, la commande est simplement commit, à laquelle on doit bien sûr fournir une description des modifications. Une fois exécutée, cette commande ajoutera effectivement la révision au dépôt. On notera que Git donne un récapitulatif du nombre de fichiers ajoutés au dépôt, qui n'est pas nécessairement le nombre de fichiers modifiés, donc, mais celui d'ajoutés à l'aire d'assemblage.

Slide 60

Slide 60 text

Repositery Staging (index) Working directory Aire d'assemblage # Untracked files: # colors nothing added to commit but untracked files present (use "git add" to track) $ git add colors 11 Mon projet colors Mon projet colors Voyons à présent comment versionner des fichiers et suivre leurs modifications. Dans la plupart des VCS, un fichier et soit enregistré, soit modifié. Git offre une position intermédiaire, l'“aire d'assemblage”, ou “staging area” (ou encore index). Pour commit des modifications, celles-ci doivent d'abord être ajoutées dans l'aire d'assemblage, avec la commande add. Si l'on demande à nouveau l'état du dépôt, Git nous informe que le fichier sera enregistré lors du commit. L'intérêt principal de cette étape est de permettre de faire des commits réellement atomiques, une bonne pratique reconnue : vous avez commencé à coder une fonctionnalité, et ce faisant avez découvert un bug, que vous avez corrigé… Au moment de commit, vous vous retrouvez avec un grand nombre de modifications peut-être indépendantes. Grâce à l'aire d'assemblage, vous pouvez effectuer plusieurs commits distincts en sélectionnant les fichiers correspondants un par un. Pour effectuer le commit à proprement parler, la commande est simplement commit, à laquelle on doit bien sûr fournir une description des modifications. Une fois exécutée, cette commande ajoutera effectivement la révision au dépôt. On notera que Git donne un récapitulatif du nombre de fichiers ajoutés au dépôt, qui n'est pas nécessairement le nombre de fichiers modifiés, donc, mais celui d'ajoutés à l'aire d'assemblage.

Slide 61

Slide 61 text

Repositery Staging (index) Working directory Aire d'assemblage # Untracked files: # colors nothing added to commit but untracked files present (use "git add" to track) $ git add colors $ git status # Changes to be committed: # new file: colors 11 Mon projet colors Mon projet colors Voyons à présent comment versionner des fichiers et suivre leurs modifications. Dans la plupart des VCS, un fichier et soit enregistré, soit modifié. Git offre une position intermédiaire, l'“aire d'assemblage”, ou “staging area” (ou encore index). Pour commit des modifications, celles-ci doivent d'abord être ajoutées dans l'aire d'assemblage, avec la commande add. Si l'on demande à nouveau l'état du dépôt, Git nous informe que le fichier sera enregistré lors du commit. L'intérêt principal de cette étape est de permettre de faire des commits réellement atomiques, une bonne pratique reconnue : vous avez commencé à coder une fonctionnalité, et ce faisant avez découvert un bug, que vous avez corrigé… Au moment de commit, vous vous retrouvez avec un grand nombre de modifications peut-être indépendantes. Grâce à l'aire d'assemblage, vous pouvez effectuer plusieurs commits distincts en sélectionnant les fichiers correspondants un par un. Pour effectuer le commit à proprement parler, la commande est simplement commit, à laquelle on doit bien sûr fournir une description des modifications. Une fois exécutée, cette commande ajoutera effectivement la révision au dépôt. On notera que Git donne un récapitulatif du nombre de fichiers ajoutés au dépôt, qui n'est pas nécessairement le nombre de fichiers modifiés, donc, mais celui d'ajoutés à l'aire d'assemblage.

Slide 62

Slide 62 text

Repositery Staging (index) Working directory Aire d'assemblage # Untracked files: # colors nothing added to commit but untracked files present (use "git add" to track) $ git add colors $ git status # Changes to be committed: # new file: colors $ git commit -m "Put red" 11 Mon projet colors Mon projet colors Voyons à présent comment versionner des fichiers et suivre leurs modifications. Dans la plupart des VCS, un fichier et soit enregistré, soit modifié. Git offre une position intermédiaire, l'“aire d'assemblage”, ou “staging area” (ou encore index). Pour commit des modifications, celles-ci doivent d'abord être ajoutées dans l'aire d'assemblage, avec la commande add. Si l'on demande à nouveau l'état du dépôt, Git nous informe que le fichier sera enregistré lors du commit. L'intérêt principal de cette étape est de permettre de faire des commits réellement atomiques, une bonne pratique reconnue : vous avez commencé à coder une fonctionnalité, et ce faisant avez découvert un bug, que vous avez corrigé… Au moment de commit, vous vous retrouvez avec un grand nombre de modifications peut-être indépendantes. Grâce à l'aire d'assemblage, vous pouvez effectuer plusieurs commits distincts en sélectionnant les fichiers correspondants un par un. Pour effectuer le commit à proprement parler, la commande est simplement commit, à laquelle on doit bien sûr fournir une description des modifications. Une fois exécutée, cette commande ajoutera effectivement la révision au dépôt. On notera que Git donne un récapitulatif du nombre de fichiers ajoutés au dépôt, qui n'est pas nécessairement le nombre de fichiers modifiés, donc, mais celui d'ajoutés à l'aire d'assemblage.

Slide 63

Slide 63 text

Repositery Staging (index) Working directory Aire d'assemblage # Untracked files: # colors nothing added to commit but untracked files present (use "git add" to track) $ git add colors $ git status # Changes to be committed: # new file: colors $ git commit -m "Put red" [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors 11 Mon projet colors Mon projet colors Mon projet colors Voyons à présent comment versionner des fichiers et suivre leurs modifications. Dans la plupart des VCS, un fichier et soit enregistré, soit modifié. Git offre une position intermédiaire, l'“aire d'assemblage”, ou “staging area” (ou encore index). Pour commit des modifications, celles-ci doivent d'abord être ajoutées dans l'aire d'assemblage, avec la commande add. Si l'on demande à nouveau l'état du dépôt, Git nous informe que le fichier sera enregistré lors du commit. L'intérêt principal de cette étape est de permettre de faire des commits réellement atomiques, une bonne pratique reconnue : vous avez commencé à coder une fonctionnalité, et ce faisant avez découvert un bug, que vous avez corrigé… Au moment de commit, vous vous retrouvez avec un grand nombre de modifications peut-être indépendantes. Grâce à l'aire d'assemblage, vous pouvez effectuer plusieurs commits distincts en sélectionnant les fichiers correspondants un par un. Pour effectuer le commit à proprement parler, la commande est simplement commit, à laquelle on doit bien sûr fournir une description des modifications. Une fois exécutée, cette commande ajoutera effectivement la révision au dépôt. On notera que Git donne un récapitulatif du nombre de fichiers ajoutés au dépôt, qui n'est pas nécessairement le nombre de fichiers modifiés, donc, mais celui d'ajoutés à l'aire d'assemblage.

Slide 64

Slide 64 text

Repositery Staging (index) Working directory Aire d'assemblage # Untracked files: # colors nothing added to commit but untracked files present (use "git add" to track) $ git add colors $ git status # Changes to be committed: # new file: colors $ git commit -m "Put red" [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors 11 Mon projet colors Mon projet colors Mon projet colors Voyons à présent comment versionner des fichiers et suivre leurs modifications. Dans la plupart des VCS, un fichier et soit enregistré, soit modifié. Git offre une position intermédiaire, l'“aire d'assemblage”, ou “staging area” (ou encore index). Pour commit des modifications, celles-ci doivent d'abord être ajoutées dans l'aire d'assemblage, avec la commande add. Si l'on demande à nouveau l'état du dépôt, Git nous informe que le fichier sera enregistré lors du commit. L'intérêt principal de cette étape est de permettre de faire des commits réellement atomiques, une bonne pratique reconnue : vous avez commencé à coder une fonctionnalité, et ce faisant avez découvert un bug, que vous avez corrigé… Au moment de commit, vous vous retrouvez avec un grand nombre de modifications peut-être indépendantes. Grâce à l'aire d'assemblage, vous pouvez effectuer plusieurs commits distincts en sélectionnant les fichiers correspondants un par un. Pour effectuer le commit à proprement parler, la commande est simplement commit, à laquelle on doit bien sûr fournir une description des modifications. Une fois exécutée, cette commande ajoutera effectivement la révision au dépôt. On notera que Git donne un récapitulatif du nombre de fichiers ajoutés au dépôt, qui n'est pas nécessairement le nombre de fichiers modifiés, donc, mais celui d'ajoutés à l'aire d'assemblage.

Slide 65

Slide 65 text

Repositery Staging (index) Working directory Aire d'assemblage # Untracked files: # colors nothing added to commit but untracked files present (use "git add" to track) $ git add colors $ git status # Changes to be committed: # new file: colors $ git commit -m "Put red" [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors 11 Mon projet colors Mon projet colors Mon projet colors Voyons à présent comment versionner des fichiers et suivre leurs modifications. Dans la plupart des VCS, un fichier et soit enregistré, soit modifié. Git offre une position intermédiaire, l'“aire d'assemblage”, ou “staging area” (ou encore index). Pour commit des modifications, celles-ci doivent d'abord être ajoutées dans l'aire d'assemblage, avec la commande add. Si l'on demande à nouveau l'état du dépôt, Git nous informe que le fichier sera enregistré lors du commit. L'intérêt principal de cette étape est de permettre de faire des commits réellement atomiques, une bonne pratique reconnue : vous avez commencé à coder une fonctionnalité, et ce faisant avez découvert un bug, que vous avez corrigé… Au moment de commit, vous vous retrouvez avec un grand nombre de modifications peut-être indépendantes. Grâce à l'aire d'assemblage, vous pouvez effectuer plusieurs commits distincts en sélectionnant les fichiers correspondants un par un. Pour effectuer le commit à proprement parler, la commande est simplement commit, à laquelle on doit bien sûr fournir une description des modifications. Une fois exécutée, cette commande ajoutera effectivement la révision au dépôt. On notera que Git donne un récapitulatif du nombre de fichiers ajoutés au dépôt, qui n'est pas nécessairement le nombre de fichiers modifiés, donc, mais celui d'ajoutés à l'aire d'assemblage.

Slide 66

Slide 66 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors 12 Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 67

Slide 67 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors $ git log commit bdeddb367771d0fd3aa5d96e3bd186311 Author: Matti Schneider Date: Thu Apr 19 10:18:56 2012 Put red 12 Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 68

Slide 68 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors $ git log commit bdeddb367771d0fd3aa5d96e3bd186311 Author: Matti Schneider Date: Thu Apr 19 10:18:56 2012 Put red 12 Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 69

Slide 69 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors $ git log commit bdeddb367771d0fd3aa5d96e3bd186311 Author: Matti Schneider Date: Thu Apr 19 10:18:56 2012 Put red 12 Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 70

Slide 70 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors $ git log commit bdeddb367771d0fd3aa5d96e3bd186311 Author: Matti Schneider Date: Thu Apr 19 10:18:56 2012 Put red 12 bdeddb367771d0fd3 aa5d96e3bdd186311 Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 71

Slide 71 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors $ git log commit bdeddb367771d0fd3aa5d96e3bd186311 Author: Matti Schneider Date: Thu Apr 19 10:18:56 2012 Put red $ echo "green" >> colors $ git commit -a -m "Added green" 12 bdeddb367771d0fd3 aa5d96e3bdd186311 Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 72

Slide 72 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors $ git log commit bdeddb367771d0fd3aa5d96e3bd186311 Author: Matti Schneider Date: Thu Apr 19 10:18:56 2012 Put red $ echo "green" >> colors $ git commit -a -m "Added green" 12 bdeddb367771d0fd3 aa5d96e3bdd186311 8a6846e6fd4509d8b 37883498e4aaa0eb6 +++ - - - Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 73

Slide 73 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors $ git log commit bdeddb367771d0fd3aa5d96e3bd186311 Author: Matti Schneider Date: Thu Apr 19 10:18:56 2012 Put red $ echo "green" >> colors $ git commit -a -m "Added green" 12 bdeddb367771d0fd3 aa5d96e3bdd186311 8a6846e6fd4509d8b 37883498e4aaa0eb6 +++ - - - Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 74

Slide 74 text

SHA [master (root-commit) bdeddb3] Put red 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 colors $ git log commit bdeddb367771d0fd3aa5d96e3bd186311 Author: Matti Schneider Date: Thu Apr 19 10:18:56 2012 Put red $ echo "green" >> colors $ git commit -a -m "Added green" 12 bdeddb367771d0fd3 aa5d96e3bdd186311 8a6846e6fd4509d8b 37883498e4aaa0eb6 +++ - - - Pour obtenir l'historique des précédents commits, on utilise la commande log. Un commit est donc décrit par son auteur (identifié par son nom et email, d'où l'importance de l'enregistrer correctement), sa date d'application, son message de description… Et par une longue suite de chiffres et lettres. On peut d'ailleurs remarquer que cette valeur correspond à celle affichée lors du commit. Il s'agit de l'empreinte, ou somme de contrôle, SHA1 du commit. Git identifie de manière unique chaque commit par son empreinte SHA. Appliquons une nouvelle modification et un nouveau commit (on remarque au passage l'usage de l'option -a pour ajouter automatiquement tous les fichiers modifiés au commit). L'empreinte de ce nouveau commit est générée bien évidemment à partir des modifications appliquées, mais également de tout l'arbre des commits précédents. Ainsi, la corruption (accidentelle ou malveillante) d'un dépôt Git est pratiquement impossible, puisque la corruption d'une révision quelconque implique une incohérence immédiatement détectable par la cascade des sommes de contrôle.

Slide 75

Slide 75 text

Branches 13 Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 76

Slide 76 text

Branches 13 master Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 77

Slide 77 text

Branches $ git branch purple 13 purple master Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 78

Slide 78 text

Branches $ git branch purple $ git branch purple * master 13 purple master Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 79

Slide 79 text

Branches $ git branch purple $ git branch purple * master 13 purple master HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 80

Slide 80 text

Branches $ git branch purple $ git branch purple * master $ echo "green" >> colors 13 purple master HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 81

Slide 81 text

Branches $ git branch purple $ git branch purple * master $ echo "green" >> colors $ git commit -a -m "grn" 13 purple master HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 82

Slide 82 text

Branches $ git branch purple $ git branch purple * master $ echo "green" >> colors $ git commit -a -m "grn" $ git checkout purple Switched to branch 'purple' 13 purple master HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 83

Slide 83 text

Branches $ git branch purple $ git branch purple * master $ echo "green" >> colors $ git commit -a -m "grn" $ git checkout purple Switched to branch 'purple' $ echo "purple" >> colors 13 purple master HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 84

Slide 84 text

Branches $ git branch purple $ git branch purple * master $ echo "green" >> colors $ git commit -a -m "grn" $ git checkout purple Switched to branch 'purple' $ echo "purple" >> colors $ git commit -a -m "purp" 13 purple master HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 85

Slide 85 text

Branches $ git branch purple $ git branch purple * master $ echo "green" >> colors $ git commit -a -m "grn" $ git checkout purple Switched to branch 'purple' $ echo "purple" >> colors $ git commit -a -m "purp" [purple 65332d5] purp 13 purple master HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 86

Slide 86 text

Branches $ git branch purple $ git branch purple * master $ echo "green" >> colors $ git commit -a -m "grn" $ git checkout purple Switched to branch 'purple' $ echo "purple" >> colors $ git commit -a -m "purp" [purple 65332d5] purp 13 purple master colors colors “red blue purple” “red blue green” HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 87

Slide 87 text

Branches $ git branch purple $ git branch purple * master $ echo "green" >> colors $ git commit -a -m "grn" $ git checkout purple Switched to branch 'purple' $ echo "purple" >> colors $ git commit -a -m "purp" [purple 65332d5] purp 13 purple master colors colors “red blue purple” “red blue green” HEAD Nous allons à présent voir comment manipuler les branches. Git fournit toujours par défaut la branche master. Une branche est essentiellement un pointeur vers un commit spécifique. Pour créer une nouvelle branche, on utilise la commande branch. Nous avons ajouté ici la branche purple. Pour lister l'ensemble des branches existantes, on utilise branch sans argument. Git nous indique par l'astérisque la branche actuelle. Comment peut-il savoir quelle est la branche courante si elles pointent toutes deux vers le même commit ? En conservant un pointeur vers la branche actuelle, nommé HEAD. Voyons à présent comment les modifications sont gérées avec les branches. Si l'on modifie un fichier sur la branche courante, puis que l'on commit ces modifications, le pointeur de la branche courante est mis à jour vers le nouveau commit, mais pas celui des autres branches. Pour changer de branche, on utilise la commande checkout, qui va donc simplement mettre à jour le pointeur HEAD. Si l'on modifie à nouveau un fichier, et que l'on commit ces modifications sur une autre branche, c'est là qu'une divergence apparaît. On a en parallèle deux versions différentes du même fichier, au même chemin. Il faut bien comprendre que les modifications du contenu sont appliquées en place, il n'y a pas deux fichiers distincts, mais un seul qui est modifié au gré des checkouts.

Slide 88

Slide 88 text

“red blue purple” Intégration & conflits 14 purple master colors HEAD À présent, comment intégrer les modifications d'une branche à l'autre ? Tout d'abord, sélectionnons la branche de destination de l'intégration, généralement master. Pour intégrer, on utilisera la commande merge, suivie du nom de la branche à intégrer. Ici, on a fait deux modifications différentes au même endroit, et un conflit émerge donc. Les conflits sont rares avec Git, qui a des stratégies de fusion très puissantes. Ici, j'ai volontairement provoqué un conflit pour vous présenter la méthode de résolution, mais cela reste une situation exceptionnelle lors de l'intégration. C'est d'ailleurs cette facilité qui rend l'utilisation des branches aussi habituelle. Le contenu du fichier conflictuel est donc modifié pour comprendre les marqueurs standard de conflit : de part et d'autre des signes "===" se trouvent les différentes versions du même bloc, et c'est à nous de réécrire l'ensemble du bloc à partir de ces informations, avec un éditeur quelconque. Une fois le conflit résolu, la compilation effectuée et les tests passés, on peut valider l'intégration. L'intégration n'est en réalité qu'un commit un peu spécial, et la procédure est la même qu'un commit standard : marquer un conflit comme résolu consiste simplement à ajouter le fichier corrigé à l'aire d'assemblage, puis à valider la modification par un commit, qui mettra à jour la branche destinataire de l'intégration. Le message "Successful merge" est un grand classique d'une telle opération de résolution de conflits.

Slide 89

Slide 89 text

“red blue purple” green” Intégration & conflits $ git checkout master Switched to branch 'master' 14 purple master colors HEAD À présent, comment intégrer les modifications d'une branche à l'autre ? Tout d'abord, sélectionnons la branche de destination de l'intégration, généralement master. Pour intégrer, on utilisera la commande merge, suivie du nom de la branche à intégrer. Ici, on a fait deux modifications différentes au même endroit, et un conflit émerge donc. Les conflits sont rares avec Git, qui a des stratégies de fusion très puissantes. Ici, j'ai volontairement provoqué un conflit pour vous présenter la méthode de résolution, mais cela reste une situation exceptionnelle lors de l'intégration. C'est d'ailleurs cette facilité qui rend l'utilisation des branches aussi habituelle. Le contenu du fichier conflictuel est donc modifié pour comprendre les marqueurs standard de conflit : de part et d'autre des signes "===" se trouvent les différentes versions du même bloc, et c'est à nous de réécrire l'ensemble du bloc à partir de ces informations, avec un éditeur quelconque. Une fois le conflit résolu, la compilation effectuée et les tests passés, on peut valider l'intégration. L'intégration n'est en réalité qu'un commit un peu spécial, et la procédure est la même qu'un commit standard : marquer un conflit comme résolu consiste simplement à ajouter le fichier corrigé à l'aire d'assemblage, puis à valider la modification par un commit, qui mettra à jour la branche destinataire de l'intégration. Le message "Successful merge" est un grand classique d'une telle opération de résolution de conflits.

Slide 90

Slide 90 text

“red blue purple” green” Intégration & conflits $ git checkout master Switched to branch 'master' $ git merge purple 14 purple master colors HEAD À présent, comment intégrer les modifications d'une branche à l'autre ? Tout d'abord, sélectionnons la branche de destination de l'intégration, généralement master. Pour intégrer, on utilisera la commande merge, suivie du nom de la branche à intégrer. Ici, on a fait deux modifications différentes au même endroit, et un conflit émerge donc. Les conflits sont rares avec Git, qui a des stratégies de fusion très puissantes. Ici, j'ai volontairement provoqué un conflit pour vous présenter la méthode de résolution, mais cela reste une situation exceptionnelle lors de l'intégration. C'est d'ailleurs cette facilité qui rend l'utilisation des branches aussi habituelle. Le contenu du fichier conflictuel est donc modifié pour comprendre les marqueurs standard de conflit : de part et d'autre des signes "===" se trouvent les différentes versions du même bloc, et c'est à nous de réécrire l'ensemble du bloc à partir de ces informations, avec un éditeur quelconque. Une fois le conflit résolu, la compilation effectuée et les tests passés, on peut valider l'intégration. L'intégration n'est en réalité qu'un commit un peu spécial, et la procédure est la même qu'un commit standard : marquer un conflit comme résolu consiste simplement à ajouter le fichier corrigé à l'aire d'assemblage, puis à valider la modification par un commit, qui mettra à jour la branche destinataire de l'intégration. Le message "Successful merge" est un grand classique d'une telle opération de résolution de conflits.

Slide 91

Slide 91 text

“red blue purple” green” <<<<<<< HEAD green ======= purple >>>>>>> purple Intégration & conflits $ git checkout master Switched to branch 'master' $ git merge purple Auto-merging colors CONFLICT: Merge conflict in colors 14 purple master colors HEAD À présent, comment intégrer les modifications d'une branche à l'autre ? Tout d'abord, sélectionnons la branche de destination de l'intégration, généralement master. Pour intégrer, on utilisera la commande merge, suivie du nom de la branche à intégrer. Ici, on a fait deux modifications différentes au même endroit, et un conflit émerge donc. Les conflits sont rares avec Git, qui a des stratégies de fusion très puissantes. Ici, j'ai volontairement provoqué un conflit pour vous présenter la méthode de résolution, mais cela reste une situation exceptionnelle lors de l'intégration. C'est d'ailleurs cette facilité qui rend l'utilisation des branches aussi habituelle. Le contenu du fichier conflictuel est donc modifié pour comprendre les marqueurs standard de conflit : de part et d'autre des signes "===" se trouvent les différentes versions du même bloc, et c'est à nous de réécrire l'ensemble du bloc à partir de ces informations, avec un éditeur quelconque. Une fois le conflit résolu, la compilation effectuée et les tests passés, on peut valider l'intégration. L'intégration n'est en réalité qu'un commit un peu spécial, et la procédure est la même qu'un commit standard : marquer un conflit comme résolu consiste simplement à ajouter le fichier corrigé à l'aire d'assemblage, puis à valider la modification par un commit, qui mettra à jour la branche destinataire de l'intégration. Le message "Successful merge" est un grand classique d'une telle opération de résolution de conflits.

Slide 92

Slide 92 text

“red blue purple” green purple” Intégration & conflits $ git checkout master Switched to branch 'master' $ git merge purple Auto-merging colors CONFLICT: Merge conflict in colors # fix conflict 14 purple master colors HEAD À présent, comment intégrer les modifications d'une branche à l'autre ? Tout d'abord, sélectionnons la branche de destination de l'intégration, généralement master. Pour intégrer, on utilisera la commande merge, suivie du nom de la branche à intégrer. Ici, on a fait deux modifications différentes au même endroit, et un conflit émerge donc. Les conflits sont rares avec Git, qui a des stratégies de fusion très puissantes. Ici, j'ai volontairement provoqué un conflit pour vous présenter la méthode de résolution, mais cela reste une situation exceptionnelle lors de l'intégration. C'est d'ailleurs cette facilité qui rend l'utilisation des branches aussi habituelle. Le contenu du fichier conflictuel est donc modifié pour comprendre les marqueurs standard de conflit : de part et d'autre des signes "===" se trouvent les différentes versions du même bloc, et c'est à nous de réécrire l'ensemble du bloc à partir de ces informations, avec un éditeur quelconque. Une fois le conflit résolu, la compilation effectuée et les tests passés, on peut valider l'intégration. L'intégration n'est en réalité qu'un commit un peu spécial, et la procédure est la même qu'un commit standard : marquer un conflit comme résolu consiste simplement à ajouter le fichier corrigé à l'aire d'assemblage, puis à valider la modification par un commit, qui mettra à jour la branche destinataire de l'intégration. Le message "Successful merge" est un grand classique d'une telle opération de résolution de conflits.

Slide 93

Slide 93 text

“red blue purple” green purple” Intégration & conflits $ git checkout master Switched to branch 'master' $ git merge purple Auto-merging colors CONFLICT: Merge conflict in colors # fix conflict $ git add colors $ git commit -m "Successful merge" 14 purple master colors HEAD À présent, comment intégrer les modifications d'une branche à l'autre ? Tout d'abord, sélectionnons la branche de destination de l'intégration, généralement master. Pour intégrer, on utilisera la commande merge, suivie du nom de la branche à intégrer. Ici, on a fait deux modifications différentes au même endroit, et un conflit émerge donc. Les conflits sont rares avec Git, qui a des stratégies de fusion très puissantes. Ici, j'ai volontairement provoqué un conflit pour vous présenter la méthode de résolution, mais cela reste une situation exceptionnelle lors de l'intégration. C'est d'ailleurs cette facilité qui rend l'utilisation des branches aussi habituelle. Le contenu du fichier conflictuel est donc modifié pour comprendre les marqueurs standard de conflit : de part et d'autre des signes "===" se trouvent les différentes versions du même bloc, et c'est à nous de réécrire l'ensemble du bloc à partir de ces informations, avec un éditeur quelconque. Une fois le conflit résolu, la compilation effectuée et les tests passés, on peut valider l'intégration. L'intégration n'est en réalité qu'un commit un peu spécial, et la procédure est la même qu'un commit standard : marquer un conflit comme résolu consiste simplement à ajouter le fichier corrigé à l'aire d'assemblage, puis à valider la modification par un commit, qui mettra à jour la branche destinataire de l'intégration. Le message "Successful merge" est un grand classique d'une telle opération de résolution de conflits.

Slide 94

Slide 94 text

“red blue purple” green purple” Intégration & conflits $ git checkout master Switched to branch 'master' $ git merge purple Auto-merging colors CONFLICT: Merge conflict in colors # fix conflict $ git add colors $ git commit -m "Successful merge" [master 5fbe3d4] Successful merge 14 purple master colors HEAD À présent, comment intégrer les modifications d'une branche à l'autre ? Tout d'abord, sélectionnons la branche de destination de l'intégration, généralement master. Pour intégrer, on utilisera la commande merge, suivie du nom de la branche à intégrer. Ici, on a fait deux modifications différentes au même endroit, et un conflit émerge donc. Les conflits sont rares avec Git, qui a des stratégies de fusion très puissantes. Ici, j'ai volontairement provoqué un conflit pour vous présenter la méthode de résolution, mais cela reste une situation exceptionnelle lors de l'intégration. C'est d'ailleurs cette facilité qui rend l'utilisation des branches aussi habituelle. Le contenu du fichier conflictuel est donc modifié pour comprendre les marqueurs standard de conflit : de part et d'autre des signes "===" se trouvent les différentes versions du même bloc, et c'est à nous de réécrire l'ensemble du bloc à partir de ces informations, avec un éditeur quelconque. Une fois le conflit résolu, la compilation effectuée et les tests passés, on peut valider l'intégration. L'intégration n'est en réalité qu'un commit un peu spécial, et la procédure est la même qu'un commit standard : marquer un conflit comme résolu consiste simplement à ajouter le fichier corrigé à l'aire d'assemblage, puis à valider la modification par un commit, qui mettra à jour la branche destinataire de l'intégration. Le message "Successful merge" est un grand classique d'une telle opération de résolution de conflits.

Slide 95

Slide 95 text

Publication 15 origin local Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 96

Slide 96 text

Publication $ git clone URL/projet 15 origin local Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 97

Slide 97 text

Publication $ git clone URL/projet Cloning into projet… done. 15 origin local clone Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 98

Slide 98 text

Publication $ git clone URL/projet Cloning into projet… done. # code, add, commit 15 origin local clone Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 99

Slide 99 text

Publication $ git clone URL/projet Cloning into projet… done. # code, add, commit $ git push 15 origin local clone Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 100

Slide 100 text

Publication $ git clone URL/projet Cloning into projet… done. # code, add, commit $ git push Counting objects: 7, done. Total 4, reused 0 To user@repo:projet.git 36130..cd831 master -> master 15 origin local clone push Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 101

Slide 101 text

Publication $ git clone URL/projet Cloning into projet… done. # code, add, commit $ git push Counting objects: 7, done. Total 4, reused 0 To user@repo:projet.git 36130..cd831 master -> master 15 origin local clone push Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 102

Slide 102 text

Publication $ git clone URL/projet Cloning into projet… done. # code, add, commit $ git push Counting objects: 7, done. Total 4, reused 0 To user@repo:projet.git 36130..cd831 master -> master $ git pull 15 origin local clone push Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 103

Slide 103 text

Publication $ git clone URL/projet Cloning into projet… done. # code, add, commit $ git push Counting objects: 7, done. Total 4, reused 0 To user@repo:projet.git 36130..cd831 master -> master $ git pull Updating 36130..cd831 Fast forward colors | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) 15 origin local clone push pull Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 104

Slide 104 text

Publication $ git clone URL/projet Cloning into projet… done. # code, add, commit $ git push Counting objects: 7, done. Total 4, reused 0 To user@repo:projet.git 36130..cd831 master -> master $ git pull Updating 36130..cd831 Fast forward colors | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) 15 origin local clone push pull Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 105

Slide 105 text

Publication $ git clone URL/projet Cloning into projet… done. # code, add, commit $ git push Counting objects: 7, done. Total 4, reused 0 To user@repo:projet.git 36130..cd831 master -> master $ git pull Updating 36130..cd831 Fast forward colors | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) 15 origin local clone push pull Nous allons voir ici comment collaborer sur un dépôt distant partagé. Pour initialiser un dépôt local à partir d'un dépôt distant, on utilise la commande clone. L'URL d'origine peut utiliser de nombreux protocoles : SSH via le protocole git, HTTPS, HTTP, file… Une fois le dépôt récupéré, on peut le modifier en local (édition, git add, git commit). Pour partager ces modifications, il faut les envoyer sur le dépôt distant. Pour cela, on utilise la commande push. Cette commande va calculer la différence entre les dépôts local et distant, compresser les éléments à envoyer, puis les transmettre sur le réseau et mettre à jour le dépôt distant. Imaginons maintenant la situation inverse : un collaborateur a mis à jour le dépôt distant avec ses propres modifications, et on veut les rapatrier. Pour cela, on utilise la commande inverse de push, pull. Cette commande va télécharger les modifications, et les intégrer dans le graphe local, avec un merge comme on l'a vu précédemment. On voit encore une fois que Git insiste sur les branches, en listant tant la locale que la distante. On peut également lire la mention “Fast forward” ; cela signifie que l'intégration s'est déroulée sans conflit.

Slide 106

Slide 106 text

Apprentissage 16 En cas d'erreur, Git en explique très bien la raison et une solution éventuelle. En revanche, le vocabulaire employé ne vous sera pas toujours clair. Utilisez bien entendu vos amis Google et StackOverflow… Et faites attention avec les solutions alternatives proposées. Si vous n'êtes pas certain de son fonctionnement, ne tentez pas le diable : il s'agit souvent de moyens de forcer l'action, mais il y a généralement une très bonne raison pour qu'elle ait été refusée en premier lieu.

Slide 107

Slide 107 text

Apprentissage • utiliser la ligne de commande 16 En cas d'erreur, Git en explique très bien la raison et une solution éventuelle. En revanche, le vocabulaire employé ne vous sera pas toujours clair. Utilisez bien entendu vos amis Google et StackOverflow… Et faites attention avec les solutions alternatives proposées. Si vous n'êtes pas certain de son fonctionnement, ne tentez pas le diable : il s'agit souvent de moyens de forcer l'action, mais il y a généralement une très bonne raison pour qu'elle ait été refusée en premier lieu.

Slide 108

Slide 108 text

Apprentissage • utiliser la ligne de commande • puis passer au graphique (diff, chunks…) 16 En cas d'erreur, Git en explique très bien la raison et une solution éventuelle. En revanche, le vocabulaire employé ne vous sera pas toujours clair. Utilisez bien entendu vos amis Google et StackOverflow… Et faites attention avec les solutions alternatives proposées. Si vous n'êtes pas certain de son fonctionnement, ne tentez pas le diable : il s'agit souvent de moyens de forcer l'action, mais il y a généralement une très bonne raison pour qu'elle ait été refusée en premier lieu.

Slide 109

Slide 109 text

Apprentissage • utiliser la ligne de commande • puis passer au graphique (diff, chunks…) • lire les erreurs 16 En cas d'erreur, Git en explique très bien la raison et une solution éventuelle. En revanche, le vocabulaire employé ne vous sera pas toujours clair. Utilisez bien entendu vos amis Google et StackOverflow… Et faites attention avec les solutions alternatives proposées. Si vous n'êtes pas certain de son fonctionnement, ne tentez pas le diable : il s'agit souvent de moyens de forcer l'action, mais il y a généralement une très bonne raison pour qu'elle ait été refusée en premier lieu.

Slide 110

Slide 110 text

Apprentissage • utiliser la ligne de commande • puis passer au graphique (diff, chunks…) • lire les erreurs • ne rentrer les commandes proposées qu’en les comprenant 16 En cas d'erreur, Git en explique très bien la raison et une solution éventuelle. En revanche, le vocabulaire employé ne vous sera pas toujours clair. Utilisez bien entendu vos amis Google et StackOverflow… Et faites attention avec les solutions alternatives proposées. Si vous n'êtes pas certain de son fonctionnement, ne tentez pas le diable : il s'agit souvent de moyens de forcer l'action, mais il y a généralement une très bonne raison pour qu'elle ait été refusée en premier lieu.

Slide 111

Slide 111 text

Apprentissage • utiliser la ligne de commande • puis passer au graphique (diff, chunks…) • lire les erreurs • ne rentrer les commandes proposées qu’en les comprenant • git help 16 En cas d'erreur, Git en explique très bien la raison et une solution éventuelle. En revanche, le vocabulaire employé ne vous sera pas toujours clair. Utilisez bien entendu vos amis Google et StackOverflow… Et faites attention avec les solutions alternatives proposées. Si vous n'êtes pas certain de son fonctionnement, ne tentez pas le diable : il s'agit souvent de moyens de forcer l'action, mais il y a généralement une très bonne raison pour qu'elle ait été refusée en premier lieu.

Slide 112

Slide 112 text

Quelques arguments 17

Slide 113

Slide 113 text

Quelques arguments • .gitignore 17

Slide 114

Slide 114 text

Quelques arguments • .gitignore • performance 17

Slide 115

Slide 115 text

Quelques arguments • .gitignore • performance • communauté 17

Slide 116

Slide 116 text

Quelques arguments • .gitignore • performance • communauté • GitHub 17

Slide 117

Slide 117 text

Quelques arguments • .gitignore • performance • communauté • GitHub • libre 17

Slide 118

Slide 118 text

Quelques arguments • .gitignore • performance • communauté • GitHub • libre • destination de l'industrie 17

Slide 119

Slide 119 text

Prochaines sessions 1. Introduction 18

Slide 120

Slide 120 text

Prochaines sessions 1. Introduction 2. Stratégies 18

Slide 121

Slide 121 text

Prochaines sessions 1. Introduction 2. Stratégies 3. Usage intermédiaire 18

Slide 122

Slide 122 text

Prochaines sessions 1. Introduction 2. Stratégies 3. Usage intermédiaire 4. Usage avancé 18

Slide 123

Slide 123 text

Merci ! Des questions ? • Ressources • Panorama de Git • Tutorial : gitimmersion.com • Vidéos : gitcasts.com • Devenir un pro : progit.org • Pour les habitués de ClearCase • Pouquoi Git est meilleur que X • Taille et rapidité sur gros projet • Outils • Installeur Windows : code.google.com/p/gitextensions • GUI OS X : github.com/brotherbard/gitx • Images • Logo Git par Alex Bargi • Cible, Cerveau, Balance, Main, Shuffle, Médaille, Trophée CC-BY TheNounProject.com • Photos Linus Torvalds CC-BY-SA Wikimedia Commons • Dossier, doc, serveur, écran © Apple • Remerciements • GitHub • Scott Chacon • Antoine Büsch • Bart van Zon • Daniel Öberg • Eurogiciel 19 Panorama de Git : http://xenon.stanford.edu/~blynn/gitmagic/intl/fr/index.html Pour les habitués de ClearCase : http://speakerdeck.com/u/9seconds/p/wtf-is-git Pouquoi Git est meilleur que X : http://fr.whygitisbetterthanx.com Taille et rapidité d'un dépôt Git sur un très gros projet : http://www.blender.org/forum/viewtopic.php?t=22459