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 :

Diff d'un commit d'une seule ligne remplace tout le contenu du fichier


Sujet :

GIT

  1. #1
    Futur Membre du Club Avatar de sed lex
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Diff d'un commit d'une seule ligne remplace tout le contenu du fichier
    Bonjour,

    Je reformule le titre plus clairement:

    - Je souhaite commiter un changement mineur dans un fichier (une ligne de code par exemple)
    - Git considère que tout le contenu de mon fichier a changé
    - Dans le diff (Git GUI) je vois donc tout le contenu de mon fichier en rouge, suivi de tout le nouveau contenu (l'ancien contenu + une ligne modifiée) en vert
    - Je n'ai donc pas le détail du diff (ma ligne changée) mais deux blocs qui se suivent: tout mon fichier avant / tout mon fichier après.


    Cela ne me le fait que pour 2 fichiers qui ont la particularité de m'afficher "\ No newline at end of file" à la fin.

    Est-ce que cela peut venir de git config core.autocrlf qui est actuellement à true et qui me force à chaque fois CRLF => CR (je suis sous windows) ? Si c'est le cas, je l'ai passé à false mais ça n'a rien changé dans l'affichage.
    Comment régler le problème et avoir un diff correct pour mon prochain commit?


    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    - Git considère que tout le contenu de mon fichier a changé
    Si Git considère que tout le contenu de ton fichier a changé, c'est que tout le contenu de ton fichier a changé

    99,99999% de chance que ça soit du au caractère de fin de ligne qui dépend de ton OS qui doit être différent de l'OS de la personne qui a commit ces fichiers avant toi.

    Windows utilise CRLF, Mac et Linux LF uniquement.

    Donc par exemple si tu as un fichier avec le contenu suivant :

    Ce fichier sous windows aura en fait le contenu suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tataCRLF
    titiCRLF
    totoCRLF
    Et sous Mac/Linux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tataLF
    titiLF
    totoLF
    Ce qui se passe pour toi c'est que tu changes par exemple titi en tutu.

    Imaginons que tu sois toi sous Windows mais que le collaborateur qui a commit en premier était sous Mac ou Linux.

    Tu penses que ça va donner ça en changeant uniquement la 2ème ligne :

    Mais en fait tu vas passer de ça ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tataLF
    titiLF
    totoLF
    à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tataCRLF
    tutuCRLF
    totoCRLF
    Donc tout ton fichier change.

    Pour ton histoire de fin de ligne c'est simplement que dans ton fichier modifié tu as en réalité fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tataCRLF
    tutuCRLF
    toto
    Tu n'as pas de caractère de fin de ligne sur la dernière ligne de ton fichier.

    Or par convention on ajoute toujours un caractère de fin de ligne en fin de fichier.

    Donc tu as 2 problèmes de config avec l'éditeur qui t'as servi à réaliser le commit :

    - Le 1er c'est de le configurer pour utiliser LF et non CRLF pour interpréter les fins de ligne (tous les bons éditeurs permettent de faire ça sous Windows)
    - Le 2ème c'est de configurer l'éditeur pour ajouter un LF automatiquement en fin de fichier lors de son enregistrement.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Futur Membre du Club Avatar de sed lex
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Merci d'avoir pris le temps de développer ta réponse, je vais regarder dans mon IDE

    Mon IDE est en CRLF.
    Cependant le fichier vient de moi, donc si je comprends bien, Git à dû forcer mes fichiers en CR lors du dernier commit (avec core.autocrlf = true), et mon IDE les a remis en CRLF. Bref les deux logiciels se font la guerre

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par sed lex Voir le message
    Git à dû forcer mes fichiers en CR lors du dernier commit (avec core.autocrlf = true)
    Non en LF. CR seul n'est pas utilisé. C'est CRLF sur Windows et LF sur Mac / Linux.

    L'option core.autocrlf change les LF en CRLF en lecture (quand tu checkout) et les CRLF en LF en écriture (quand tu commit).

    Mais la meilleure solution reste d'utiliser une configuration unix like même quand on est sous Windows.

    Pour avoir cette configuration de manière explicite dans tes projets regarde du côté de EditorConfig.

    Tu vas avoir le même genre de problème avec l'indentation de ton code, même si ce n'est pas lié à ton OS pour le coup mais c'est l'éternel débat entre tab vs 2spaces vs 4 spaces.

    Ce genre de fichier de config permet de fixer les choses de manière explicites pour tous les contributeurs d'un projet.

    PS : Oublie pas le tag résolu quand ton problème sera fix stp
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Futur Membre du Club Avatar de sed lex
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Oui j'ai inversé CR et LF, oups, merci pour EditorConfig je vais me pencher dessus.
    Je mets en résolu.

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

Discussions similaires

  1. diff de chaînes sur une seule ligne
    Par dingoth dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/06/2010, 22h15
  2. Sélection aléatoire d'une seule ligne.
    Par Pat bol 002 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 05/01/2005, 19h30
  3. plusieurs enregistrements dans une seul ligne
    Par Celelibi dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2005, 15h55
  4. wxWidgets : couleur de texte sur une seule ligne
    Par Oatly dans le forum wxWidgets
    Réponses: 8
    Dernier message: 05/12/2004, 19h24
  5. [JTable]Selectionner une seule ligne d'une jTable ?
    Par Maximus32 dans le forum Composants
    Réponses: 2
    Dernier message: 22/10/2004, 02h06

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