===== GIT ===== ===== References ===== * http://www.siteduzero.com/informatique/tutoriels/gerez-vos-codes-source-avec-git * http://www.pierreschambacher.com/blog/git-in-a-nutshell/ * http://tutoriels.itaapy.com/wiki/tutoriel-git/ * https://help.github.com/articles/set-up-git * http://www.jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository/ * http://www.fclose.com/b/linux/366/set-up-git-server-through-ssh-connection/ * http://othiebaut.developpez.com/tutoriels/general/git-on-debian/ * http://git-scm.com/book/fr/Les-bases-de-Git-Travailler-avec-des-d%C3%A9p%C3%B4ts-distants ===== Configuration locale ===== $ mkdir Git $ cd Git $ git config --global user.name jehanproc $ git config --global user.email my.mail@int-evry.fr $ git config --global color.diff auto $ git config --global color.status auto $ git config --global color.branch auto $ git init Initialized empty Git repository in /mci/mci/login/Git/.git/ $ cat ~/.gitconfig [user] name = jehanproc email = my.mail@int-evry.fr [color] diff = auto status = auto branch = auto ===== manipulations ===== ==== statut initial ==== $ git status # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track) ==== ajout 1er fichier ==== $ vim file1.txt $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # file1.txt nothing added to commit but untracked files present (use "git add" to track) $ git add file1.txt $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: file1.txt ==== commit ==== $ git commit -m "add initial file1.txt" [master (root-commit) b679adb] add initial file1.txt 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file1.txt $ git status # On branch master nothing to commit (working directory clean) ==== modification ==== $ vim file1.txt $ git status # On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: file1.txt # no changes added to commit (use "git add" and/or "git commit -a") ==== diff ==== $ git diff diff --git a/file1.txt b/file1.txt index ce01362..94954ab 100644 --- a/file1.txt +++ b/file1.txt @@ -1 +1,2 @@ hello +world ==== commit du diff ==== commit -a = commit de toutes les modifications . $ git commit -a -m "modification de file1.txt -> +world" [master 9058851] modification de file1.txt -> +world 1 files changed, 1 insertions(+), 0 deletions(-) $ git status # On branch master nothing to commit (working directory clean) ==== affichage log ==== $ git log commit 9058851ef6738163117ada54a94dbfc04365061c Author: jehanproc Date: Tue Apr 9 10:01:05 2013 +0200 modification de file1.txt -> +world commit b679adb3b2e2fa5e30d1f52b2fa4f12cff888b66 Author: jehanproc Date: Tue Apr 9 09:51:01 2013 +0200 add initial file1.txt ==== annuler le dernier commit ==== $ git reset --hard HEAD^ HEAD is now at b679adb add initial file1.txt $ cat file1.txt hello ===== branch ===== par defaut, une seule branche *master* $ git branch * master creation d'un branche *option1* , ne modifie en rien les fichiers (pas de recopie) $ git branch option1 $ git branch * master option1 $ ls -al total 52 -rw-r--r-- 1 login mci 6 9 avril 10:11 file1.txt drwxr-xr-x 8 login mci 4096 9 avril 10:11 .git passage sur la branche option1 , git checkout est utilisé pour changer de branche mais aussi pour restaurer un fichier tel qu’il était lors du dernier commit. La commande a donc un double usage. $ git checkout option1 Switched to branch 'option1' $ git branch master * option1 $ ls -al total 52 -rw-r--r-- 1 login mci 6 9 avril 10:11 file1.txt drwxr-xr-x 8 login mci 4096 9 avril 10:28 .git ==== modif branche ==== $ vim file1.txt $ cat file1.txt hello wild $ git commit -a -m "ajout l3 wild dans file1" [option1 9c17567] ajout l3 wild dans file1 1 files changed, 2 insertions(+), 0 deletions(-) $ git status # On branch option1 nothing to commit (working directory clean) $ git log commit 9c17567714d9158126d39d3b1dda20ebe5146d82 Author: jehanproc Date: Tue Apr 9 11:18:36 2013 +0200 ajout l3 wild dans file1 commit b679adb3b2e2fa5e30d1f52b2fa4f12cff888b66 Author: jehanproc Date: Tue Apr 9 09:51:01 2013 +0200 add initial file1.txt ==== branch master ==== $ git checkout master Switched to branch 'master' $ git log commit b679adb3b2e2fa5e30d1f52b2fa4f12cff888b66 Author: jehanproc Date: Tue Apr 9 09:51:01 2013 +0200 add initial file1.txt $ cat file1.txt hello modification $ vim file1.txt $ cat file1.txt hello world $ git commit -a -m "add l2 +world file1" [master 5d03c08] add l2 +world file1 1 files changed, 1 insertions(+), 0 deletions(-) ==== merge ==== on merge option1 dans master $ git merge option1 Auto-merging file1.txt CONFLICT (content): Merge conflict in file1.txt Automatic merge failed; fix conflicts and then commit the result. constat du conflit $ cat file1.txt hello <<<<<<< HEAD world ======= wild >>>>>>> option1 gestion du conflit $ vim file1.txt $ cat file1.txt hello world wild commit $ git commit -a -m "marge master et option1, resolution conflit file1" [master 8fedaa6] marge master et option1, resolution conflit file1 $ git status # On branch master nothing to commit (working directory clean) Destruction de branche . $ git branch -d option1 Deleted branch option1 (was 9c17567). ===== ssh git server ===== ==== cle ssh ==== echange de clé avant "fermeture" du shell gituser $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/gituser/.ssh/id_rsa): Created directory '/home/gituser/.ssh'. [login@arvouin ~/.ssh] $ ssh-copy-id gituser@svnshare.it-sudparis.eu ==== configuration gituser ==== # yum install git # useradd -m -d /home/gituser gituser # usermod -s /usr/bin/git-shell gituser # tail -2 /etc/shells /bin/csh /usr/bin/git-shell # mkdir git-shell-commands # chmod 755 git-shell-commands # cp /usr/share/doc/git-1.7.4.1/contrib/git-shell-commands/* /home/gituser/git-shell-commands/ # chown -R gituser /home/gituser/git-shell-commands/* # chmod +x /home/gituser/git-shell-commands/list /home/gituser/git-shell-commands/help au sujet de git-shell-commands cf http://serverfault.com/questions/285324/git-shell-not-enabled/325484#325484 ==== git bare server repo ==== on creer un repository vierge sur le serveur # su -s /bin/bash - gituser $ mkdir gittuto.git $ cd gittuto.git/ $ git --bare init Initialized empty Git repository in /home/gituser/gittuto.git/ ===== initialisation git remote client ===== sur le client on declare notre serveur remote qui va heberger notre repo ==== remote add ==== syntaxe: git remote add [nomcourt] [url] $ git remote add tuto ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git verification de la declaration et des repo remote disponibles $ git remote -v tuto ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git (fetch) tuto ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git (push) ==== git push ==== on pousse alors notre depot (branche master) local vers le serveur $ git push tuto master Counting objects: 12, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (12/12), 917 bytes, done. Total 12 (delta 1), reused 0 (delta 0) To ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git * [new branch] master -> master sur le serveur le directory "objects" a evolué [gituser@gitshare gittuto.git]$ ls -ltra drwxrwxr-x 4 gituser gituser 4096 Apr 9 14:54 refs drwxrwxr-x 2 gituser gituser 4096 Apr 9 14:54 info drwxrwxr-x 2 gituser gituser 4096 Apr 9 14:54 hooks -rw-rw-r-- 1 gituser gituser 23 Apr 9 14:54 HEAD -rw-rw-r-- 1 gituser gituser 73 Apr 9 14:54 description -rw-rw-r-- 1 gituser gituser 66 Apr 9 14:54 config drwxrwxr-x 2 gituser gituser 4096 Apr 9 14:54 branches drwxrwxr-x 7 gituser gituser 4096 Apr 9 14:54 . drwxrwxr-x 16 gituser gituser 4096 Apr 9 15:08 objects ===== usages client remote ===== depuis un (autre) client (teststud) on va recuperer ce repo et le modifier $ ssh-copy-id gituser@gitshare.tem-tsp.eu $ git clone ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git Cloning into 'gittuto'... remote: Counting objects: 12, done. remote: Compressing objects: 100% (4/4), done. remote: Total 12 (delta 1), reused 0 (delta 0) Receiving objects: 100% (12/12), done. Resolving deltas: 100% (1/1), done. -bash-4.2$ ls gittuto -bash-4.2$ cd gittuto/ -bash-4.2$ ls file1.txt -bash-4.2$ git remote -v origin ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git (fetch) origin ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git (push) modifications et ajouts locaux -bash-4.2$ vim file2.txt -bash-4.2$ git add file2.txt -bash-4.2$ git commit -a -m "add file2" [master 9287d44] add file2 1 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 file2.txt ==== push remote ==== on envoie sur le serveur nos modifications -bash-4.2$ git push Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 307 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git 8fedaa6..9287d44 master -> master sur le serveur, c'est encore le directory "objects" qui viens d'etre modifié [root@gitshare gittuto.git]# ls -ltr | tail -2 drwxrwxr-x 2 gituser gituser 4096 Apr 9 14:54 branches drwxrwxr-x 19 gituser gituser 4096 Apr 9 15:26 objects ==== pull remote ==== depuis notre premier client nous allons recuperer les modifications faites par le second client (teststud) === visualisation de l'etat remote === $ git remote show tuto * remote tuto Fetch URL: ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git Push URL: ssh://gituser@gitshare.tem-tsp.eu/~/gittuto.git HEAD branch: master Remote branch: master tracked Local ref configured for 'git push': master pushes to master (local out of date) on note le "(local out of date)" !. === recuperation === on recupere (pull) depuis le serveur les dernieres modifications du repo "tuto" dans notre branche "master" $ git pull tuto master From ssh://gitshare.tem-tsp.eu/~/gittuto * branch master -> FETCH_HEAD Updating 8fedaa6..9287d44 Fast-forward file2.txt | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 file2.txt $ ls file1.txt file2.txt