Outils pour utilisateurs

Outils du site


command-line:git:project-basics

Projet : gestion de base

Retour à l'article Git

Note : toutes les commandes relatives à un projet doivent être effectuée après s'être placé dans le dossier du projet

cd /to/the/source/directory
#les lecteurs "windows" sont indiqués par /d/ au lieu de D:\ dans le bash de git
cd /d/project-directory/source-directory

Configurer un projet

Initialiser le projet (créé un sous-dossier “.git”) :

git init

Nouveau projet

“Ajouter” chaque fichier source qu'on veut versionner à git :

git add <filepattern>

Exemples :

git add fichier.c
git add *.c
git add *

Note : sauf erreur de ma part, '*' ne prend pas en compte les sous-répertoires et leurs contenus.

Une fois le projet lancé, git add continue à servir pour indexer les nouveaux fichiers ajoutés au projet, mais aussi pour indexer les fichiers modifiés. Pour faire d'un coup l'indexation de toutes les modifs :

git add .    #stage new and modified files
git add -u   #stage modified and removed files
 
git add -A   #stage new, modified and removed files

Projet existant

Pour partir d'un projet déjà présent dans un dépôt (repository) git (local ou distant) :

git clone <local-path>/<project>.git
git clone git://<git-url>/<project>.git
git clone http(s)://<url>/<project>.git

Note : un dossier <project> sera créé. Il faut donc se placer dans le dossier parent de celui où on voudra placer les sources.

Informations

Etat des fichiers

Pour connaître l'état d'un fichier (suivi, non suivi, modifié, indexé, etc…) :

git status

Pour avoir des informations plus détaillées :

git diff           #compare your version with your staged version
git diff --cached  #compare your staged version and the last commited version
git diff --staged  #same as --cached

Historique : accès aux commits

Lister les commits (et leurs commentaires)

git log
git log -p         #shows the diff introduced in each commit
git log -<number>  #shows only the last <number> commits
git log --since=2.weeks  #shows only commits for the past 2 weeks
git log --stat     #gives a few stats (nb of files changed, lines added or removed)
git log --pretty=format:"%h %s" --graph  #shows a view of branches and merges

Préparer un commit

Marquer un fichier comme prêt à être commité suite à modification se fait aussi via la commande git add. Il sera alors considéré comme indexé.

Si on “git add” plusieurs fois d'affilé un même fichier (suite à des modifs), seule la dernière version est conservée, tandis que si on effectue un commit à chaque fois, alors toutes les versions seront dans le dépôt.

Commit

Une fois les modifications indexées, on peut enfin commiter, c'est-à-dire transmettre cette version indexée au dépôt local.

git commit
git commit -v              #verbose: shows the diff while you write the comment
git commit -m "Message..." #to write the commit comment directly in command-line
git commit -a              #skips the staged area and commit directly your version

Un fichier texte s'ouvre dans l'éditeur de texte défini par défaut dans la config de git, pour permettre la saisie du commentaire du commit.

git config --global core.editor "'C:\Program Files\Sublime Text 2\sublime_text.exe' -w"

…pour définir Sublime Text 2 comme éditeur par défaut.

Si vous commettez un erreur lors de votre dernière commit, il est toujours possible de la rattraper. Après avoir apporté la modification en local puis l'avoir indexée :

git commit --amend

Ignorer des fichiers

Pour exclure certains fichiers ou types de fichiers de nos commit, il faut créer un fichier .gitignore et y lister les éléments à exclure.

file.ext
/README         #ignore the root README, but not ones in subdirectories
*.doc
!test.doc       #exception for rules listed above : test.doc will NOT be ignored
thisDirectory/  #...and everything in it
#or any glob syntax, including: [aoe], [0-9], *, ?

Retirer des fichiers

Pour supprimer un fichier partout :

git rm Supprime-Moi.txt
git commit -m "Suppression de fichier inutile"

Git rm retire le fichier du dossier de travail et de la version indexée, donc il faut ensuite effectuer un commit pour appliquer la modif au dépôt. L'historique du fichier reste dans le dépôt.

Par contre si vous ajoutez un fichier au .gitignore un peu tard et qu'il est déjà indexé ou commité, il faut ajouter –cached à la commande. Le comportement sera identique sauf que le fichier ne sera pas supprimé du dossier de travail.

git rm --cached Supprime-Moi.txt

Déplacer/Renommer un fichier

Comme la commande mv de linux. Cela évite de déplacer/renommer le fichier à la main, puis de supprimer l'ancien des fichiers indexés et d'y ajouter le nouveau.

git mv source.txt directory/destination.txt

Désindexer

Si vous avez ajouté à la version indexée un fichier et voulez l'en retirer :

git reset HEAD monFichier.php

Annuler les modifications d'un fichier

Si vous voulez écraser un fichier pour revenir à la dernière version indexée ou commitée

git checkout -- monFichier.php

Attention cependant : toute modification apportée localement sera perdue.

Dépôts distants

Les dépôts distantssont des répertoires hébergeant les versions d'un projet généralement à distance (internet, réseau). Cela permet d'y conserver toutes les sauvegardes, d'y travailler à plusieurs, etc…

Informations

git remote          #lists all remotes configured for the current project
git remote -v       #same list with urls

Chaque dépôt distant comporte un nom librement choisi par l'utilisateur

Plus de détails sur un dépôt distant :

git remote show custom-name

Ajout d'un dépôt distant

git remote add custom-name git://git@domain.com/path/project.git
git remote add custom-name https://domain.com/path/project.git
git remote add custom-name /d/path/to/local/remote/project.git

Récupérer les données d'un dépôt distant

git fetch custom-name
git pull custom-name

Si fetch récupère les information, il ne les fusionne pas avec les versions locales, contrairement à pull.

Quand on a récupéré un projet existant via clone, le nom attribué au dépôt distant est par défaut origin. Pour le mettre à jour par la suite :

git fetch origin

Lors du clone, on peut directement définir le nom souhaité

git clone -o <remote-name> git://<git-url>/<project>.git

Transmettre des données à un dépôt distant

Lorsqu'on commit, la version est stockée dans le dépôt local (sous-répertoire .git de notre projet). Pour transmettre ces données au dépôt distant :

git push <remote name> <branch name>

La branche par défaut est master, tout comme le nom de dépôt distant par défaut est origin. Souvent vous n'aurez qu'à faire :

git push origin master

Note : certains serveurs ne vous seront accessible qu'en lecture : vous pourrez faire des pull, mais pas de push

Renommer/Retirer un dépôt distant

git remote rename old-name new-name  #rename remote
git remote rm custom-name            #remove remote
command-line/git/project-basics.txt · Dernière modification: le 27/01/2016 à 09:43 par Yosko