1. Problématique avec les IDEs
1.1. Exemple avec PHPStorm
Clonons Symfony sur notre poste, créons et ouvrons le projet dans PHPStorm (Main menu > File > New project) et affichons le status Git ($ git status
). Un dossier .idea
a été généré par l’IDE à la racine du projet et apparait dans la liste des fichiers qui pourraient être commités :
$ git clone git@github.com:symfony/symfony.git
$ cd symfony
# Ouverture du projet Symfony dans PHPStorm
$ git status
...
Untracked files:
(use "git add <file>..." to include in what will be committed)
.idea/ (1)
...
1 | Le dossier .idea généré par PHPStorm est repéré par Git. |
Faisons de même avec Angular (clonons et créons un nouveau projet dans PHPStorm). Dans ce cas, nous ne verrons pas le dossier .idea
apparaître :
$ git clone git@github.com:angular/angular.git
$ cd angular
# Ouverture du projet Angular dans PHPStorm
$ git status
...
nothing to commit, working tree clean (1)
1 | Le dossier .idea généré par PHPStorm est ignoré par Git. |
Pourquoi ? Regardons le fichier .gitignore d’Angular de plus près. Il contient des dossiers qui concernent directement le projet, pour la compilation, le cache ou les dépendances :
/dist/
/bazel-out
/integration/bazel/bazel-*
*.log
/node_modules/
# CircleCI temporary file for cache key computation.
# See `save_month_to_file` in `.circleci/config.yml`.
month.txt
...
# Don't check in secret files
*secret.js
# Ignore npm/yarn debug log
npm-debug.log
yarn-error.log
...
Mais aussi des éléments extérieurs au projet, comme des dossiers et des fichiers générés par les IDEs et éditeurs de code, ou macOS et Windows:
...
# Include when developing application packages.
pubspec.lock
.c9
.idea/ (1)
.devcontainer/*
!.devcontainer/README.md
!.devcontainer/recommended-devcontainer.json
!.devcontainer/recommended-Dockerfile
.settings/
.vscode/launch.json
.vscode/settings.json
.vscode/tasks.json
*.swo
*.swp
modules/.settings
modules/.vscode
.vimrc
.nvimrc
# Ignore .history for the xyz.local-history VSCode extension
.history
.DS_STORE
1 | Le dossier .idea généré par PHPStorm est ignoré par Git. |
Le fichier .gitignore de Symfony, quant à lui, ne contient pas ces éléments extérieurs au projet, et n’ignore pas le dossier .idea
:
vendor/
composer.lock
phpunit.xml
.php-cs-fixer.cache
.php-cs-fixer.php
.phpunit.result.cache
composer.phar
package.tar
/packages.json
/.phpunit
1.2. Ignorer le dossier .idea
Solution locale
On ajoute le dossier .idea
au fichier .gitignore
, à la racine du projet, que nous committons :
$ echo '.idea/' >> ~/.gitignore
$ git commit -a -m "Ignore .idea folder"
Le risque sera de devoir répéter cette opération à chaque nouveau projet. |
Solution globale
On ajoute le dossier .idea
à un fichier ~/.gitignore_global
, fichier reconnu par Git de façon global :
$ echo '.idea/' >> ~/.gitignore_global
$ git config --global core.excludesfile ~/.gitignore_global
Nous n’aurons à faire cette opération qu’une seule fois. Tous nos projets locaux n’auront plus aucune connaissance des dossiers spécifiques à PHPStorm. |
2. Solution complète (synthèse)
2.1. Étape #1 - Créer un fichier global vide
$ touch ~/.gitignore_global
2.2. Étape #2 - Compléter le fichier global
$ vim ~/.gitignore_global
Copier/Coller les lignes suivantes :
# IDEs and editors
.idea/
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
.vimrc
.nvimrc
# Visual Studio Code
.vscode/*
.history/*
# System files
.DS_Store
Thumbs.db
Pour sauver dans vim, appuyez sur Esc pour passer en mode "commande", ensuite tapez :wq pour sauvegarder et sortir du fichier.
|
2.3. Étape #3 - Activer le fichier global
$ git config --global core.excludesFile '~/.gitignore_global'
2.4. Visual Studio Code
Si j’ai besoin d’avoir une stratégie plus fine pour Visual Studio Code, je peux, par exemple, intégrer le bloque suivant dans le fichier .gitignore
du projet local :
# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
2.5. Composer & Node
Pour Composer ou Node, il est préférable de configurer le fichier .gitignore
du projet local, et non le Git global, pour éviter à toute autre personne de se retrouver, au clonage et à la première installation, avec les dossiers vendor
ou node_modules
repérés par Git :
# Composer
vendor/
# Node
node_modules/
Vous pouvez retrouver ma fiche synthèse Gist en anglais. |
3. Pour aller plus loin sur le sujet
-
Collection de fichiers
.gitignore
utiles : https://github.com/github/gitignore -
Create useful
.gitignore
files for your project : https://www.gitignore.io/ -
https://github.com/angular/angular/blob/main/aio/tools/examples/shared/boilerplate/cli/.gitignore