IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GIT Discussion :

Fichier non mis à jour après push


Sujet :

GIT

  1. #1
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut Fichier non mis à jour après push
    Bonjour,

    je souhaite mettre mes sources sur mon serveur (en local) depuis mon espace de travail sur mon PC fixe. J'ai fais sur le serveur qui me fera office de dépot GIT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cd ~/git/depot
    git init
    nano index.html
    git add .
    git commit -m '1er commit'
    Et sur le poste local
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd ~/netbeans/source
    git clone ssh://user@serveur/~/git/depot/.git
    Là c'est OK je récupère bien mon fichier index.html du dépot.

    Maintenant je souhaite modifier un fichier en local et le mettre sur le dépôt. Je fais donc en local
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cd ~/netbeans/source
    nano index2.html
    git add .
    git commit -m 'Ajout fichier au dépot'
    git push ssh://user@serveur/~/depot/.git master
    Pas de message d'erreur mais par contre quand je vais dans mon dossier du dépot je vois pas mon fichier index2.html !!

    Je ne comprend pas pourquoi ? Merci de votre aide je débute sur GIT
    Mes contributions phares en dev : www.rigaudie.fr

  2. #2
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    git pull
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  3. #3
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Mais un git pull permet de récupérer la version du dépôt. Et moi c'est dans le dépôt que je ne vois pas mes fichiers.
    Mes contributions phares en dev : www.rigaudie.fr

  4. #4
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Ton répertoire "depot" n'est pas ton dépôt, ce n'est même pas un dépôt
    C'est juste un répertoire de travail.

    Avec git tu as un dépôt pour chaque répertoire de travail : c'est le répertoire .git.

    Un truc auquel je n'avais pas fait attention est que tu te sers du .git d'un répertoire de travail comme d'un dépôt "central" : c'est pas bien

    Il faut utiliser pour ce propos un répertoire .git "nu", qui s'obtient en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git clone --bare depot/.git
    Le résultat de la commande suivante te donne un répertoire depot.git : c'est à partir de lui qu'il faut cloner et c'est dans lui qu'il faudra pusher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    vagabond@Erna ~ $ mkdir depot
    vagabond@Erna ~ $ cd depot/
    vagabond@Erna depot $ git init
    Initialized empty Git repository in /home/vagabond/depot/.git/
    vagabond@Erna depot $ echo a > a.txt
    vagabond@Erna depot $ git add a.txt
    vagabond@Erna depot $ git ci -m "Premier commit"
    [master (root-commit) 6c69758] Premier commit
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 a.txt
    vagabond@Erna depot $ cd ..
    vagabond@Erna ~ $ git clone --bare depot/.git
    Cloning into bare repository depot.git...
    done.
    vagabond@Erna ~ $ rm -rf depot
    vagabond@Erna ~ $ git clone depot.git clone1
    Cloning into clone1...
    done.
    vagabond@Erna ~ $ git clone depot.git clone2
    Cloning into clone2...
    done.
    vagabond@Erna ~ $ cd clone2/
    vagabond@Erna clone2 $ echo b > b.txt
    vagabond@Erna clone2 $ git add b.txt
    vagabond@Erna clone2 $ git ci -m "Deuxième commit"
    [master 09984f3] Deuxième commit
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 b.txt
    vagabond@Erna clone2 $ git push
    Counting objects: 4, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 278 bytes, done.
    Total 3 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    To /home/vagabond/depot.git
       6c69758..09984f3  master -> master
    vagabond@Erna clone2 $ cd ../clone1/
    vagabond@Erna clone1 $ git pull
    remote: Counting objects: 4, done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 3 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    From /home/vagabond/depot
       6c69758..09984f3  master     -> origin/master
    Updating 6c69758..09984f3
    Fast-forward
     b.txt |    1 +
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 b.txt
    vagabond@Erna clone1 $ ls
    a.txt  b.txt
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  5. #5
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Un truc auquel je n'avais pas fait attention est que tu te sers du .git d'un répertoire de travail comme d'un dépôt "central" : c'est pas bien
    Pourquoi c'est pas bien ?
    Le résultat de la commande suivante te donne un répertoire depot.git : c'est à partir de lui qu'il faut cloner et c'est dans lui qu'il faudra pusher.
    En effet ta technique marche bien puisque lorsque je fait un clone de mon depot.git j'obtiens bien mes fichiers ajoutés.
    Par contre dans mon depot.git je ne les vois ! Je pense que c'est normal et à cause de cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git clone --bare depot/.git
    Merci beaucoup pour tes explications
    Mes contributions phares en dev : www.rigaudie.fr

  6. #6
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par Général03 Voir le message
    Par contre dans mon depot.git je ne les vois ! Je pense que c'est normal et à cause de cette commande :
    C'est normal et ce n'est pas "à cause" de la commande

    Actuellement tu penses que le dépôt doit être le reflet de ton répertoire de travail et que tu dois trouver la même chose dedans, mais ce n'est pas le cas.

    On a déjà vu que dans ton répertoire de travail ton dépôt se trouve dans le répertoire .git.
    Ce répertoire .git contient :
    - tout l'historique depuis que le répertoire est versionné
    - tous les fichiers
    - des pointeurs vers les commit depuis lesquels tu travailles (en simplifié, ça te dit sur quelle branche tu bosses).

    Si tu veux mettre ton dépôt à disposition pour que d'autres personnes travaillent dessus, il faut que tu dégages les informations qui disent sur quelle branche tu est en train de travailler (parce que les autres dév s'en tamponnent le coquillard avec une plume d'oie ).
    C'est ce que fait l'option --bare de la commande git clone.

    Une fois que tu as fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git clone --bare depot/git
    tu obtiens une version de ton dépôt qui contient uniquement les informations qui seront utiles à tous les développeurs (l'historique du projet et les fichiers qui vont avec).
    C'est pour cette raison qu'il faut mettre ce répertoire depot.git sur le serveur et non le depot/.git.

    Maintenant, pourquoi tu ne vois les fichiers quand tu fais un commit et un push ?
    Parce que tu ne regardes pas au bon endroit
    Si tu commit et push un fichier index.html, tu t'attends à voir un fichier index.html dans ton dépôt.
    Tu ne le vois pas parce que git ne stocke pas les fichiers de la même manière que toi : quand tu crées ton arborescence de travail, tu le fais de manière à ce qu'il y ait une logique par rapport à ton projet (par exemple le fichier index.html à la racine de ton projet, des images dans le répertoire images, ...).
    Le truc c'est que ce n'est pas la manière dont git voit les choses : lui a besoin de stocker les fichiers de telle sorte que ça ne prenne pas trop de place et qu'il soit rapide d'effectuer toutes les fonctions d'un système de gestion de version.

    Je te propose de crée un nouveau dépôt pour voir ce qu'il se passe quand on fait un commit et où les fichiers sont stockés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    vagabond@Erna ~ $ mkdir work
    vagabond@Erna ~ $ cd work/
    vagabond@Erna work $ git init
    Initialized empty Git repository in /home/vagabond/work/.git/
    OK, on vient de créer un répertoire que l'on versionne avec git.

    On va lister ce que contient le répertoire .git, mais on ne va pas s'y intéresser pour l'instant, ce sera juste pour comparer ce qu'il y a avant et après le commit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vagabond@Erna work $ find .git/ > avant_commit.txt
    Maintenant on va faire un premier commit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    vagabond@Erna work $ echo "Fichier README du projet à compléter" > README
    vagabond@Erna work $ git add README
    vagabond@Erna work $ git ci -m "Ajout du README"
    [master (root-commit) 4ad6b78] Ajout du README
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 README
    On va alors lister ce qu'il y a maintenant dans le .git et le comparer avec ce qu'il y avait avant le commit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    vagabond@Erna work $ find .git/ > apres_commit.txt
    vagabond@Erna work $ diff -u avant_commit.txt apres_commit.txt 
    ...
    +.git/objects/f5/88494217b569ab4343b04c1494af5973b04969
    ...
    +.git/objects/ce/db47d631a11f864f569eea34d1953deee71399
    ...
    +.git/objects/4a/d6b78bee6a298a4096ae067db8272e3ca9ff53
    ...
    (je n'ai recopié que les lignes du diff qui vont nous intéresser)

    On voit que git a ajouté des fichiers avec des noms bizarres dans le répertoires objects.
    C'est parmi ces fichiers que se trouve le README que nous venons de commiter

    Quand git commit un fichier, il le compresse, le renomme avec un hash (qui correspond à un SHA1), le déplace dans le répertoire objects, et crée une "image" du répertoire de travail au moment du commit.

    Regardons parmi ces fichiers lequel est notre README.
    Pour cela il faut les décompresser et voir ce que l'on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    vagabond@Erna work $ perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)' < .git/objects/f5/88494217b569ab4343b04c1494af5973b04969
    blob 39Fichier README du projet à compléter
    vagabond@Erna work $ perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)' < .git/objects/ce/db47d631a11f864f569eea34d1953deee71399
    tree 34100644 README��IB�i�CC�L��Ys�Iivagabond@Erna work $ 
    vagabond@Erna work $ perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)' < .git/objects/4a/d6b78bee6a298a4096ae067db8272e3ca9ff53
    commit 190tree cedb47d631a11f864f569eea34d1953deee71399
    author Alexandre Ortiz <hvagabond@gmail.com> 1327098765 +0100
    committer Alexandre Ortiz <hvagabond@gmail.com> 1327098765 +0100
    
    Ajout du README
    On voit tout de suite que le premier fichier correspond bien à notre README et que le troisième est notre message de commit.

    Moralité : ne t'inquiète pas si tu ne vois pas ton fichier apparaître "tel quel" dans ton dépôt après un commit ou un push, laisse git gérer ça
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  7. #7
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Merci beaucoup pour ton aide préciseuse. Je comprend un peu mieux
    Mes contributions phares en dev : www.rigaudie.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TortoiseSVN] Statut fichier non mis à jour
    Par jeffvac dans le forum Subversion
    Réponses: 6
    Dernier message: 16/04/2008, 11h43
  2. [AJAX] Incompatibilité avec IE (données non mis à jour)
    Par WeDgEMasTeR dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/05/2007, 19h46
  3. parametre non mis à jour
    Par rherrad dans le forum Struts 1
    Réponses: 2
    Dernier message: 11/04/2007, 13h35
  4. Vue non mise à jour après modification d'une table
    Par cybernet35 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/01/2006, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo