# Introduction à Git ### Présentation `git` est un outil de versionnage de code qui permet de : - **Conserver** son code en ligne - **Tracer** l'historique des différents modules - **Partager** le code entre plusieurs membres d'une équipe ![](https://i.imgur.com/f2Sk8D3.png) `git` correspond au nom de la suite de commandes et du langage de version. Plusieurs sites fournissent des services pour héberger le code et permettre d'y accéder plus facilement (github.com, gitlab.com, ...) et plusieurs outils de développement font le lien direct avec ces sites là (c'est notamment le cas de tous les outils de JetBrains dont PyCharm fait partie). ### Fonctionnement `git` fonctionne sur une base de **versions** du code appelés **`commit`**. Chaque **`commit`** présente l'état du projet et des fichiers sources à un instant donné. La version locale de ces fichiers peut ensuite être mise en ligne et hébergée. ![](https://i.imgur.com/eapHv21.png) ### Commandes principales ![](https://i.imgur.com/83N1IiG.png) - **`git add`**: Ajout des fichiers donnés à la liste des fichiers qui seront versionnés au prochain **`commit`**. - **`git commit`**: Création d'une nouvelle version du projet à partir des fichiers ajoutés. - **`git push`**: Propagation des changements locaux vers la version hébergée en ligne. - **`git pull`**: Mise à jour des fichiers locaux à partir de ceux en ligne. ### Recommandations Les recommandations principales lors de l'utilisation d'un projet `git` sont les suivantes. - TOUJOURS mettre à jour son projet avec la version en ligne avant d'écrire du code ! - PLUSIEURS `commits` réguliers vous permettront de mieux tracer vos changements plutôt qu'un seul ! - Essayez de travailler sur des morceaux de code différents pour ne pas modifier en même temps la même partie. - ## Installation ### Création d'un projet avec PyCharm - Créez un nouveau projet avec `File` > `New Project`, une fenêtre d'ouvre et vous demande le chemin souhaité pour votre projet. - Créez un dossier `git` avec `VCS` (Version Control Service) > `Create Git Repository...`, une fenêtre s'ouvre pour spécifier le chemin du projet. Sélectionnez le chemin du nouveau projet. - L'onglet `VCS` s'appelle maintenant `Git` ***Votre projet Python est prêt à accueillir Git !*** --- ### Création d'un projet sur Gitlab/Github #### Gitlab ENSTA - Connectez-vous à votre compte [Gitlab ENSTA](https://gitlab.ensta-bretagne.fr) (mêmes identifiants que Moodle). - Créez un projet en utilisant `New Project`. Renseignez le même nom que votre projet PyCharm. #### Github - Créez un compte [Github](https://github.com). - Cliquez sur `New Repository`. Renseignez le même nom que votre projet PyCharm. ***Votre projet Git est prêt à être utilisé !*** --- ### Lien entre projet PyCharm et projet Git - Sur PyCharm, sélectionnez `Git` > `Manage Remotes...`. - Cliquez sur le `+`. Dans la case `URL`, renseignez le lien de votre projet, par exemple : `https://gitlab.ensta-bretagne.fr/ducassqu/python-project` - Renseignez vos identifiants (Github ou Gitlab en fonction de la méthode choisie). ***Votre projet Python est relié entre Git et PyCharm !*** --- ### Commit, Push et Pull - Dans PyCharm, pour créer une nouvelle version des fichiers source, cliquez sur `Git` > `Commit...`. - Sélectionnez les fichiers à rajouter, renseignez un message pour la version et cliquez sur `Commit`. ![](https://i.imgur.com/FtIorPX.png) ***Votre code a été mis à jour LOCALEMENT !*** - Pour mettre à jour votre code en ligne, il faut `push`. La commande est disponible via `Git` > `Push`. ***Votre code est mis à jour EN LIGNE à partir de votre version locale !*** - Pour mettre à jour localement votre code à partir de votre projet en ligne il faut `pull`. La commande basique est disponible via `Git` > `Update Project...`. ***Votre code local a été mis à jour à partir de la version en ligne !*** --- ### Configuration du projet pour la collaboration Pour collaborer effectivement, il faut donner accès à votre projet à votre binôme. La méthode pour donner accès est la suivante : - #### Gitlab - Passer le projet en `Public` : `Settings` > `General` > `Visibility` et la passer de `Private` à `Public`. - Ajouter votre binôme en `Members` en temps que `Maintainer` ![](https://i.imgur.com/5OwPKGP.png) - #### Github - Ajouter votre binôme dans `Settings` > `Manage Access` ![](https://i.imgur.com/z3IfAtd.png) ***Vous pouvez maintenant tou.te.s les deux avoir accès à toutes les fonctionnalités du projet !*** --- ### Structure du projet Python La structure de votre projet Python pourra reprendre la suivante : - python-project - .gitignore - README.md - python-project - src1.py - src2.py - tests - test_src1.py - test_src2.py - docs - sujet.pdf Avec : - le fichier `README.md` qui décrit votre projet (`.md` correspondant à [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)). - le fichier `.gitignore` qui contient le nom de TOUS les fichiers qui doivent être **IGNORÉS** par `git`. Vous pouvez copier-coller le `.gitignore` suivant : ```markdown # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # OS generated files .DS_Store .DS_Store? ._* .*.sw[op] .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db ``` ###### tags: `git`