GIT

====== Puppet-Git ======

===== Quelques Commandes =====

^ Commande ^ Action ^
| git clone | clone un dépôt distant.|
| git add | ajoute de nouveaux fichiers dans la base. Les autres restent inchangés. Ex:\\ git add * => ajoute tous les fichier/répertoire locaux aux fichier suivit par git\\ git add toto => ajoute toto aux fichiers suivit par git|
| git commit | intègre tout les hash des changements effectue et les hash des objets commits parents pour créer un nouvel objet commit.Ex:\\ git commit -a -m “message de commit” => le -a signifie all, le -m précise le message de commit en ligne de commande.\\ git commit toto => commit seulement les modifications apporté à toto |
| git branch | Liste les différentes branches du projet. La branche courante est marqué par une * à coté|
| git merge | fusionne plusieurs branches de développement.Ex:\\ git merge brancheA/brancheB|
| git fetch | Met à jour la version locale du repo.  -> cela ne merge pas. Ex:\\ git fetch “alias” ou\\ git fetch root@puppet.xxx.xx:/data/puppet.git |
| git pull | fetch and merge, pour ne pas perdre votre travail si il n’était pas commité |

<note tip>Après un fetch, cette commande permet voir les différences entre notre version de travail (HEAD) et la version que nous venons de prendre (origin/HEAD)
<code>
git log –reverse -p HEAD..origin/HEAD
</code>
</note>

Envoi des modification effectué en local sur le bare repository:
<code>
$ git add *
$ git commit -a -m “message”
$ git push
</code>

Se mettre à jour sans tenir compte des changements apporté à sa version locale
<code>
$ git pull (équivalent de $ git fetch && git merge)
</code>

===== Initier un nouveaux –bare repo : =====

Initier un nouveaux –bare repo :
<code>
Sur le serveur:
—————
# mkdir /data/puppet.git && cd /data/puppet.git
# git init –bare

Sur un desktop:
—————
$ mkdir /…/puppet.xxx.xx && cd /…/puppet.xxx.xx
$ rsync –archive …
$ git init
$ git add *
$ git commit -a -m “initiale import”
($ git remote add //name// ssh://root@…:/data/puppet.git) Je ne sait pas si cette étape est obligatoire :s
$ git push root@….:/data/puppet.git master:refs/heads/master

//on peux ensuite supprimer ce dossier.//
$ rm -rf pupet…

//crée une working copy clean//
$ git clone root@….:/data/puppet.git
</code>

===== Récupérer une copie: =====
récupérer une copie:
<code>
$ mkdir /home/…/puppet.something
$ git clone root@….:/data/puppet.git
$ mv puppet/* .
$ mv puppet/.git .
</code>

===== Branches et rebase : =====

Créer une branche est simple et léger sous git, il ne faut pas s’en priver, cela permettra de distinguer facilement votre travail pour qu’il soit évalué par l’intégrateur. Ce type de branche est également appelé “topic branch”
<code>git checkout -b new_feature</code>
Vous pouvez alors commencer votre travail en commitant régulièrement.
<code>
$ git add modified_file.php
$ git commit -m “…”</code>

Rebasez
Pour faciliter le travail de l’intégrateur nous allons lui éviter d’éventuels conflits en utilisant la commande rebase. Cette commande a pour effet de réorganiser votre branche “new_feature” sur le dernier commit du dépôt original. Ainsi au lieu d’avoir la configuration suivante (X,Y,Z sont vos commit sur votre topic branche) :
<code>A–B–C–D–E–F
\
X–Y–Z</code>
Vous obtiendrez ceci après un rebase :
<code> A–B–C–D–E–F
\
X’–Y’–Z'</code>

Pour réaliser cette opération il faut d’abord récupérer les derniers commits du projet original dans votre dépôt à l’aide d’une “remote branch”. Nous appelerons cette branche “upstream” :
<code>$ git checkout master # On se replace sur la branche principale de notre fork
$ git remote add upstream root@…./data/puppet.git # On crée un alias “upstream” pour le serveur distant@…
$ git pull upstream master # On récupère les dernières modifs dans la branche principale du fork
$ git checkout new_feature # On peut retourner sur notre feature branch</code>

On peut alors réorganiser nos commits sur la tête de la branche “master” :
<code>$ git rebase master</code>

Leave a Reply

Your email address will not be published. Required fields are marked *