$ 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
$ git status # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)
$ vim file1.txt $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." 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 <file>..." to unstage) # # new file: file1.txt
$ 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)
$ vim file1.txt $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: file1.txt # no changes added to commit (use "git add" and/or "git commit -a")
$ 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 -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)
$ git log commit 9058851ef6738163117ada54a94dbfc04365061c Author: jehanproc <my.email@int-evry.fr> Date: Tue Apr 9 10:01:05 2013 +0200 modification de file1.txt -> +world commit b679adb3b2e2fa5e30d1f52b2fa4f12cff888b66 Author: jehanproc <my.email@int-evry.fr> Date: Tue Apr 9 09:51:01 2013 +0200 add initial file1.txt
$ git reset --hard HEAD^ HEAD is now at b679adb add initial file1.txt $ cat file1.txt hello
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
$ 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 <my.email@int-evry.fr> Date: Tue Apr 9 11:18:36 2013 +0200 ajout l3 wild dans file1 commit b679adb3b2e2fa5e30d1f52b2fa4f12cff888b66 Author: jehanproc <my.email@int-evry.fr> Date: Tue Apr 9 09:51:01 2013 +0200 add initial file1.txt
$ git checkout master Switched to branch 'master' $ git log commit b679adb3b2e2fa5e30d1f52b2fa4f12cff888b66 Author: jehanproc <my.email@int-evry.fr> 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(-)
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).
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
# 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
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/
sur le client on declare notre serveur remote qui va heberger notre repo
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)
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
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
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
depuis notre premier client nous allons recuperer les modifications faites par le second client (teststud)
$ 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)” !.
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