git

Présentation

Pourquoi GIT?

Pourquoi pas? Git est un logiciel de gestion de versions décentralisé (DVCS). Il permet d’historiser les versions de fichiers, en permettant comparaison, retour arrière, … Plus besoin de faire des copier-coller de son projet lorsque que l’on commence des tests, pour sauvegarder une ancienne version, … Git est la pour ca

Différence avec Subversion

La différence principale avec subversion, est que GIT est décentralisé. C’est à dire qu’il n’y as pas de dépôt central. Conséquence: il est possible d’avoir plusieurs dépôt de référence, et il n’est pas nécessaire d’avoir un accès au dépôt central pour historiser ses révisions. Il est également nécessaire de communiquer avec les autres membres du projet, chacun pouvant travailler avec son propre dépôt ….

Gestion des dépôts

En “local”

Initialiser un nouveau dépôt (création du .git)

1
git init

A distance

  • Ajouter un dépot
1
git remote add <mondepot> <user>@<host>:<chemin>.git
  • Cloner un dépot
1
git clone <user>@<host>:<mondepot>.git
  • Rafraichir le dépot local
1
git fetch <mondepot>
  • Récupèrer toutes les modif d’une branche:
1
git pull <depot distant> <branche distante>
  • Écrire ses modifications sur le dépot
1
git push <mondepot> <la branche a push>

Gestion des fichiers

  • Supprimer un fichier/répertoire
1
git rm -r spec/views
  • Ajouter les fichiers du répertoire courant
1
git add .
  • Voir les différences avec la version du dépot:
1
git status
  • Enregistrer ses modifications
    le “commit” est la sauvegarde dans le dépôt des différents fichiers modifiés. C’est cette opération qui crée la nouvelle révision.
1
git commit -m "commit inital"
  • Modifier un commit
1
2
3
git commit -m 'validation initiale'
git add fichier_oublie
git commit --amend

Revenir en arrière

  • Voir les différences entre deux versions:
1
git diff <commit hash> <filename>
  • Modifier un commit
1
git commit --ammend HEAD
  • restaurer un ancien fichier
1
git revert <commit hash> <filename>
  • Annuler les modifications non commité:
1
git reset --hard HEAD
  • Retourner à l’état d’un commit donné:
1
git reset --hard <tag/branch/commit id>

Cette methode détruit les commit “plus récents”

  • Annuler un commit
1
git revert <HEAD/tag/branch/commit id>

Crée un patch faisant l’inverse de celui du commit spécifié

  • “Voyager dans le temps”

A slightly less scary way to do this than the git reset –hard method is to create a new branch. Let’s assume that you’re on the master branch and the commit you want to go back to is c2e7af2b51.

Rename your current master branch:

git branch -m crazyexperiment

Check out your good commit:

git checkout c2e7af2b51

Make your new master branch here:

git checkout -b master

Now you still have your crazy experiment around if you want to look at it later, but your master branch is back at your last known good point, ready to be added to. If you really want to throw away your experiment, you can use:

git branch -D crazyexperiment

Gestion des branches et tags

Les branches

Les branches permettent de sauvegarder des modifications “ailleurs” que dans les fichiers principaux. Cela signifie par exemple, que nous pouvons avoir une branche principale qui n’évolue que pour des patch de sécurité, et une branche de dev ou se font l’ajout des nouvel les fonctions. Ces nouvelles fonctions n’entreront dans la branche principale que l’ors du “merge”.

  • Liste des branches:
1
git branch
  • Créer une branche
1
git branch dev

ou pour créer et switcher:

1
git checkout -b dev
  • Changer de branche
1
git checkout dev
  • Insérer les modif d’une branche dans une autre

La commande “merge” permet d’insérer les modifications dans branche dans une autre branche

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
\#git checkout main
\#git merge dev
Updating a2fffda..9102b8d
Fast-forward
.rspec | 1 +
app/controllers/pages_controller.rb | 6 ++++++
app/views/layouts/application.html.erb | 19 ++++++++-----------
app/views/pages/about.html.erb | 7 +++++++
app/views/pages/contact.html.erb | 7 +++++--
app/views/pages/home.html.erb | 8 ++++++--
autotest/discover.rb | 2 ++
config/routes.rb | 2 ++
spec/controllers/pages_controller_spec.rb | 22 ++++++++++++++++++++++
spec/helpers/pages_helper_spec.rb | 15 ---------------
spec/spec_helper.rb | 27 +++++++++++++++++++++++++++
spec/views/pages/contact.html.erb_spec.rb | 5 -----
spec/views/pages/home.html.erb_spec.rb | 5 -----
13 files changed, 86 insertions(+), 40 deletions(-)
create mode 100644 .rspec
create mode 100644 app/views/pages/about.html.erb
create mode 100644 autotest/discover.rb
delete mode 100644 spec/helpers/pages_helper_spec.rb
create mode 100644 spec/spec_helper.rb
delete mode 100644 spec/views/pages/contact.html.erb_spec.rb
delete mode 100644 spec/views/pages/home.html.erb_spec.rb
  • Supprimer une branche:

Quant une branche a terminée son cycle, il peut être necessaire de la supprimer

1
git branch -d <branche>

Les tags

Les tags doivent être vu comme un “point dans temps”, c’est à dire, une révision déclarée plus importante que les autres et que l’on nommerat v1.0, v1.1, 2010.09, …

##Configuration

Mettre en cache les credentials

1
git config --global credential.helper 'cache --timeout 36000'

Tools

*Git prompt

1
2
source /usr/share/git-core/contrib/completion/git-prompt.sh
export PS1='\u@\h:\w$(__git_ps1) \$ '
  • Activer la coloration auto
1
git config --global color.ui auto

Liens

http://gitref.org/index.html: très complet. Présente et explique les différentes commandes
http://railstutorial.org/book: un tuto sur Rails en fait, mais la gestion d’un projet perso via Git y est bien expliqué.
https://git.wiki.kernel.org/index.php/Main_Page