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 :

Ignorer des fichiers avec .gitignore


Sujet :

GIT

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut Ignorer des fichiers avec .gitignore
    Bonjour,

    J'ai dans mon répertoire des fichiers que j'aimerais ignorer, il s'agit notamment des configs de ma base de donnée qui est différente en local et en production.

    J'ai donc mis dans mon fichier .gitignore:
    J'ai également vidé le cache du dépôt sur mon serveur avec la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git rm -r --cached config
    Le problème c'est que le contenu de /config est quand même envoyé sur le serveur de production ce qui me cause de grand problèmes par la suite et je suis obligé d'envoyé les fichiers modifiés à la main en FTP.

    Il y a un truc que je ne dois pas bien saisir... Auriez-vous une idée?

  2. #2
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    config/ pour ignore seulement le dossier config (i.e. les fichiers ou liens 'config' ne seront pas ignorés)...

    Attention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git rm -rf --cached config
    supprime le dossier de l'index... et, non pas de ton repo !

    Pour supprimer toute trace de ton dépôt, il faudra être plus violent en touchant à son historique... Regarde du côté de git filter-branch si tu veux/dois te risquer dans cette manip !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    git filter-branch --tree-filter 'rm -rf config' HEAD
    git push origin master --force
    ou quelque chose de similaire...

    a+

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse.

    En fait ce que je souhaiterais ça serais de conserver sur mon poste les fichiers contenus dans le répertoire config, conserver ceux qui sont en ligne, mais ne pas les mettre à jour.

    Je vais donc me pencher sur git filter-branch, on va bien voir !

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    La solution que tu m'a présenté ne semble pas fonctionner... J'ai toujours le même problème...

  5. #5
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Citation Envoyé par cloclo23 Voir le message
    La solution que tu m'a présenté ne semble pas fonctionner... J'ai toujours le même problème...
    Quelle soution ?

    -1- Je t'ai indiqué comment spécifier un dossier dans .gitignore dixit la doc

    If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git).
    Rappel: Le .gitignore est a déposé à la racine de ton dépot local (i.e. à côté du .git) pour que tous les fichiers et dossiers de ton dépot soient pris en compte..

    -2- le moyen de supprimer totalement de ton histiorique le dossier en question (c.f. la doc).
    Rappel: git rm --chached ne supprime que les fichiers/dossiers de ton index => les objets git (historique, etc ne sont donc pas supprimés)

    Si tu appliques -2- sans modifier ton gitignore celà ne marchera pas ! Forcément...

    La question est donc: quelle est ton archi ? Peut-on voir le contenu de ton .gitignore ? Ou l'as tu déposé ? As-tu spécifié un fichier d'exclusion dans ta config ?

    Meilleurs voeux,
    Philippe

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse.
    Pour être franc, je débute avec git et je suis pas forcement à l'aise.

    Par rapport à ta remarque 1, je dois donc simplement mettre config sans slash à la fin ?

    Actuellement mon .gitignore est à la racine de mon projet avec dedans:

    Je suis actuellement en mutualisé chez 1and1.

    Meilleurs voeux également!

  7. #7
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    config/ avec le slash... mais celà marche aussi sans

    Au passage: tu peux aussi faire un git ls-files --stage après avoir fait un git rm --cached => les fichiers de config ne devraient plus être présent...

    Il faut bien débuter un jour... tu verras git est vraiment très souple au final !

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Merci mais je n'y arrive désespérément pas...

    Voici donc exactement ce que j'ai fais:

    1 - je modifie le fichier .gitignore qui contient exactement:
    2 - Je fais un commit et j'envoie le tout sur le serveur.

    3 - Je remplace en FTP les fichiers de /config qui ont été modifiés ainsi que le htaccess

    4 - J’exécute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     git filter-branch -f --tree-filter 'rm -rf config' HEAD
    5 - J’exécute:
    6 - J’exécute:
    7 - Je fais un commit en changeant le nom d'un fichier pour voir si ça marche

    Résultat: Les fichiers de config et le htaccess ont été remplacés.

    Il y a une étape que je dois pas bien faire...

    Une idée ?

  9. #9
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Bon reprenons...

    Modification sur ton PC du gitignoreTjrs sur ton PC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    git rm -r --cached config
    git commit -am 'Remove directory "config"'
    git push origin master
    A savoir
    -1- tu supprimes config de l'index
    -2- tu commites les changements que tu viens d'apporter
    -3- tu pousses le tout sur ton dépôt 1&1

    Sur 1&1 je suppose que tu as créé un dépôt bare (git init --bare) que tu as ensuite cloné (git clone) sur 1&1 pour en faire ton espace de travail/déploiement de ton site... Est-ce exact ? Si oui, il faudra depuis ton clone 1&1 que tu fasses un pull pour récupérer ta nouvelle configuration git sur ton espace de déploiement.

    Ensuite, si tu souhaites (imho, c'est inutile pour ton projet) supprimer totalement config de ton historique tu pourras expérimenter git filter-branch !

    Dans git tu as différents espaces
    - un ou plusieurs dépots (l'un d'eux sera partagé)
    - un index par dépot
    - un espace de travail sur tes clone
    - un bac à sable
    Il faut jouer avec ces différents espaces. Regardes ces cheat sheet ou celui-là

    Voilà
    Philippe

  10. #10
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Au fait: pourquoi veux-tu supprimer ta config du dépot git ? Je pense que mettre cette config en gestion de conf pourrait-être utile le jour où tu aurais modifier par erreur ta config sur le serveur...

    Le tout, côté PC, et de ne pas pousser ta config locale PC sur ton dépot partagé 1&1.

    Tu peux biensûr banir 'git -am' pour mettre l'ensemble de tes modifs locale dans ton depôt local... mais faire des git add/commit unitairement sur tes fichiers modifiés...

    Tu peux aussi demander à git de t'alerter d'un mauvais commit. Pour celà, git te propose les hooks en precommit.
    Les hooks sont des scripts qui sont lancés automatiquement par git. Tu les places dans .git/hooks.
    Dans ton cas tu pourrais avoir un script (shell/perl/ruby/python/etc) de pre-commit.

    L'idée serait de jouer avec git diff --cached --name-only. Tu peux partir de ce script...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
    if git diff --cached --name-only | egrep '^config/'
    then 
    echo Unexpected file(s) in the index! Rejected commit...
    exit 1
    fi 
    exit 0
    Cdlt,
    Philippe

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Je te remercie pour ton explication très détaillée qui m'a permis de réussir!

    En effet je me mélangeais les pinceaux sur les manipulations à faire en local et celles à faire sur le serveur!

    Pour le moment je vais laisser cela comme ça, mais c'est vrai que par la suite je vais voir comment mieux organiser tout ça...

    Merci pour ton aide en tout cas!

  12. #12
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Comme dit plus haut, il peut être important de conserver ta config en gestion de conf. Auquel cas tu peux depuis 1&1 la pousser dans ton dépot partagé...

    Aujourdh'ui, j'ai eu un éclair de lucidité (outre les hooks) tu pourrais aussi, depuis ton PC, utiliser la commande git update-index.

    Pour chacun, des fichiers à ignorer tu pourrais taper:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git update-index --assume-unchanged toto.file
    Et le jour, ou tu souhaites enregistrer des modifs sur toto.file, tu taperais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git update-index --no-assume-unchanged toto.file
    Solution plus facile à mettre en oeuvre que les hooks... mais, moins souple !

    EDIT 03/01: je me suis penché sur la solution git update-index : tu peux déterminer la liste des fichiers ignorés avec ... du coup, tu peux ajouter un alias dans ta config qui te permet de déterminer les fichiers en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ignored = !git ls-files -v | grep "^[[:lower:]]"
    En n'oubliant pas que le flag assume-unchanged n'interdit pas les mises à jour des fichiers locaux via merge/reset/pul/etc... Pour empêcher, cette mise à jour il faut jouer avec le flag skip-worktree de update-index !

    Cdlt,
    Philippe

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2011
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Je te remercie pour ta réponse très complète!

    C'est exactement ce qu'il me faudrait en fait... Je vais essayer ça !

    En tout cas merci beaucoup !!!

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/07/2013, 17h35
  2. [Requete] Comment ignorer des lignes avec un LOAD DATA
    Par frangin2003 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2005, 12h14
  3. Transférer des fichiers avec un câble réseau
    Par denis finch dans le forum Développement
    Réponses: 5
    Dernier message: 08/11/2005, 16h08
  4. [Doxygene] Ignorer des fichiers
    Par chronos dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 28/07/2005, 11h24
  5. [ZIP]besoin de lire des fichiers avec l'extension tar.gz
    Par mathieublanc13 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/05/2004, 13h35

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