# Git/Structure interne

* Principes
* Apprendre à travailler avec Git
** Avant de commencer : installation et configuration de Git
** Création de votre dépôt local
** Visualiser le contenu de votre dépôt local
** Premiers pas
** Gestion des branches
** Synchroniser le dépôt local avec le dépôt distant
* Fonctionnalités avancées
** Étiquetage (tags)
** Remise (stash)
** Recombinaison (rebase)
** Sous-modules et Super-projets
** Structure interne
** Pull-request
* Recettes
** Exclure des fichiers du dépôt
** Écrire des messages de commit
* Environnement
** Intégration dans les IDEs
** Améliorer sa productivité en configurant Git
** Git sous Linux
** Git sous Windows
** Forges
*** GitLab
*** GitHub
*** Bitbucket
* Git et Subversion (svn)
** Passer de Subversion à Git
** Travailler avec Git local et un dépôt Subversion distant
** Participer au développement de Wikimédia (Gerrit)
* Problèmes connus
* Ressources externes
* Principes
* Apprendre à travailler avec Git
** Avant de commencer : installation et configuration de Git
** Création de votre dépôt local
** Visualiser le contenu de votre dépôt local
** Premiers pas
** Gestion des branches
** Synchroniser le dépôt local avec le dépôt distant
* Fonctionnalités avancées
** Étiquetage (tags)
** Remise (stash)
** Recombinaison (rebase)
** Sous-modules et Super-projets
** Structure interne
** Pull-request
* Recettes
** Exclure des fichiers du dépôt
** Écrire des messages de commit
* Environnement
** Intégration dans les IDEs
** Améliorer sa productivité en configurant Git
** Git sous Linux
** Git sous Windows
** Forges
*** GitLab
*** GitHub
*** Bitbucket
* Git et Subversion (svn)
** Passer de Subversion à Git
** Travailler avec Git local et un dépôt Subversion distant
** Participer au développement de Wikimédia (Gerrit)
* Problèmes connus
* Ressources externes
[ Modifier le sommaire ]

## Structure de Git brute

Le schéma suivant représente un dépôt Git v1.5.2.5.

## Fichiers
### HEAD

HEAD indique le code actuellement vérifié. Généralement le point de la branche sur lequel on travaille.
Il est possible d'ajouter un état "HEAD détaché", en dehors de la branche locale. Dans ce cas la tête pointe sur une soumission et non sur une branche.

### config

Le fichier de configuration pour ce dépôt Git. Il peut contenir les paramètres permettant de gérer et stocker les données dans le dépôt local, les distants connus, et les informations sur les utilisateurs (local et autres).

### description

Utilisé par les outils du navigateur de dépôt, contient une description du projet, généralement inchangée dans les dépôts non partagés.

## Dossiers
### hooks

Contient les scripts à lancer quand des évènements particuliers surviennent dans le dépôt Git.
Ces points d'entrée sont utilisés par exemple pour lancer des tests avant chaque soumission, filtrer le contenu uploadé, et implémenter ce genre de personnalisations.

#### Exemple
### objects

Stocke les listes de répertoires, fichiers et soumission.
Il y a les objets non compressés des nombreux répertoires, et les "packs" d'objets compressés. Les premiers sont régulièrement collectés via git gc.

### refs

Contient les informations où les branches pointent. Inclut normalement des répertoires "heads" pour les branches locales, et "remotes" pour les copies des branches distantes. Toutes les branches ne figurent pas dans ces répertoires. Celles qui n'ont pas changé récemment sont listées dans le fichier .git/packed-refs.

## Fichiers Git hors dossier .git
### .gitkeep

Placé dans un dossier, il garantit qu'il sera commité même vide.

### .gitignore

Liste les fichiers et dossiers à exclure du versioning. Ex :

### .gitattributes

Contient des attributs. Par exemple pour ignorer .gitattributes et .gitignore des exports effectués par "git archive" :

## Références

* ↑ Généré avec la commande tree v1.5.1.1 : tree -AnaF.
* ↑ https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/
* ↑ https://git-scm.com/docs/gitattributes