Je touche souvent beaucoup de lignes, parce que je fais des expériences avec des idées différentes, en ajoutant des instructions de trace pour voir comment elles fonctionnent, etc. Puis je voudrais seulement commettre un changement à deux ou trois lignes et avoir git complètement ignorer les autres parce que j'avais mis Ils de retour, je les ai trouvé (ou je pensais). Ndash MatrixFrog Nov 25 10 at 17:29 Le seul éditeur moderne que je connais à ce sujet fait la mauvaise chose est Visual Studio. Visual Studio ouvrira avec plaisir un fichier avec les terminaisons de ligne LF. Si vous insérez ensuite de nouvelles lignes, il insérera CRLF, et sauver les terminaisons de lignes mixtes. Microsoft refuse de corriger cela, ce qui est une tache assez grosse sur un IDE autrement assez bon: - (ndash Jon Watte Feb 7 15 at 7:11 15 Réponses Git a deux modes de la façon dont il traite fin de ligne: Vous pouvez définir le mode À utiliser en ajoutant un paramètre supplémentaire de true ou false à la ligne de commande ci-dessus. Si core. autocrlf est défini sur true, cela signifie que chaque fois que vous ajoutez un fichier au repository git que git pense est un fichier texte, il va tourner Toutes les terminaisons de ligne CRLF à juste LF avant qu'il les stocke dans le commit. With chaque fois que vous git checkout quelque chose, tous les fichiers texte aura automatiquement leur fin de ligne LF convertis en terminaisons CRLF. Cela permet le développement d'un projet à travers les plates - Styles sans commettre étant très bruyant parce que chaque éditeur change le style de fin de ligne comme le style de fin de ligne est toujours toujours LF. L'effet secondaire de cette conversion pratique, et c'est ce que l'avertissement que vous voyez est environ, est que si un fichier texte Vous avez initialement eu des terminaisons LF au lieu de CRLF, il sera stocké avec LF comme d'habitude, mais lorsqu'il est extrait plus tard, il aura CRLF terminaisons. Pour les fichiers texte normaux, c'est normalement correct. L'avertissement est un pour votre information dans ce cas, mais dans le cas où git évalue incorrectement un fichier binaire pour être un fichier texte, c'est un avertissement important car git serait alors corrompre votre fichier binaire. Si core. autocrlf est défini sur false, aucune conversion de fin de ligne n'est jamais effectuée, de sorte que les fichiers texte sont vérifiés en l'état. Cela fonctionne normalement ok, tant que tous vos développeurs sont soit sur Linux ou tous sur Windows. Mais dans mon expérience, j'ai toujours tendance à obtenir des fichiers texte avec des fins de ligne mixtes qui finissent par causer des problèmes. Ma préférence personnelle est de laisser le paramètre activé, en tant que développeur Windows. Ces messages sont dus à une valeur par défaut incorrecte de core. autocrlf sous Windows. Le concept de autocrlf consiste à gérer les conversions de fin de ligne de manière transparente. Et il fait de mauvaises nouvelles: la valeur doit être configurée manuellement. Bonne nouvelle: il ne doit être fait qu'une seule fois par installation git (par projet est également possible). Rappel: marqueur de fin de ligne crlf win-style, en style unix. Notez que cr (mac-style) n'est pas affecté pour l'une des trois options ci-dessus. Quand est-ce que cet avertissement apparaît (sous Windows) - autocrlf true si vous avez unix-style lf dans l'un de vos fichiers (RAREMENT), - autocrlf input si vous avez win-style crlf dans l'un de vos fichiers (presque TOUJOURS) Autocrlf false - NEVER Ce que signifie cet avertissement L'avertissement LF sera remplacé par CRLF indique que vous (ayant autocrlf vrai) perdra votre LF unix-style après le cycle commit-checkout (il sera remplacé par Windows style CRLF). Git ne vous attendez pas à utiliser LF unix-style sous Windows. Le CRLF d'avertissement sera remplacé par LF indique que vous (ayant l'entrée autocrlf) perdra votre CRLF de style Windows après un cycle commit-checkout (il sera remplacé par LF unix-style). N'utilisez pas d'entrée sous Windows. Une autre façon de montrer comment fonctionne autocrlf où x est soit CRLF (style fenêtres) soit LF (style unix) et les flèches représentent Valeur par défaut pour core. autocrlf est sélectionné au cours de l'installation de git et stocké dans gitconfig (ProgramFiles X86) gitetcgitconfig). Aussi therere (en cascade dans l'ordre suivant): - global (per-user) gitconfig situé à. gitconfig. Un autre - gitconfig global (per-user) à la configuration git de XDGCONFIGHOME ou à la configuration git HOME. config et - gitconfig local (per-repo) à la configuration. git dans le répertoire de travail. Donc, écrire git config core. autocrlf dans le répertoire de travail pour vérifier la valeur actuellement utilisée et - ajouter autocrlffalse à système gitconfig par système de solution - git config --global core. autocrlf faux par utilisateur solution - git config - Local core. autocrlf faux par projet de solution Morale (pour Windows): - utiliser core. autocrlf vrai si vous envisagez d'utiliser ce projet sous Unix aussi (et peu désireux de configurer votre éditeur IDE d'utiliser les terminaisons de ligne unix), - utiliser le noyau. autocrlf false si vous prévoyez d'utiliser ce projet sous Windows uniquement, - n'utilisez jamais l'entrée core. autocrlf sauf si vous avez une bonne raison de le faire (par exemple, si vous utilisez des utilitaires unix sous Windows ou si vous rencontrez des problèmes makefiles) Lors de l'installation de git pour Windows Si vous n'allez pas utiliser vos projets sous Unix, n'êtes pas d'accord avec la première option par défaut. Choisissez le troisième (Checkout as-is, commit as-is). Vous ne verrez pas ce message. Déjà. PPS Ma préférence personnelle consiste à configurer l'éditeur IDE pour qu'il utilise les terminaisons Unix et à définir core. autocrlf sur false. PPPS Attention: les paramètres de configuration git peuvent être surchargés par les paramètres gitattributes. Unix2dos et dos2unix sont disponibles dans les fenêtres avec gitbash. Vous pouvez utiliser la commande suivante pour effectuer une conversion UNIX (LF) - DOS (CRLF). Par conséquent, vous ne recevrez pas l'avertissement. Mais, ne pas exécuter cette commande sur un fichier CRLF existant, alors vous obtiendrez des nouvelles lignes vides chaque seconde ligne. Dos2unix - D nom_fichier ne fonctionnera pas avec tous les systèmes d'exploitation. Veuillez vérifier ce lien pour la compatibilité. Si, pour une raison quelconque, vous devez forcer la commande, utilisez --force. Si elle indique invalide, utilisez-f. J'ai eu ce problème également. SVN ne fait aucune conversion de fin de ligne, donc les fichiers sont engagés avec les terminaisons de ligne CRLF intact. Si vous utilisez ensuite git-svn pour placer le projet dans git, les terminaisons CRLF persistent dans le référentiel git, ce qui n'est pas l'état dans lequel git s'attend à se retrouver - le défaut étant de n'avoir que les terminaisons de ligne linux (LF) unix Lorsque vous vérifiez ensuite les fichiers sur les fenêtres, la conversion autocrlf laisse les fichiers intacts (car ils ont déjà les terminaisons correctes pour la plate-forme actuelle), mais le processus qui décide s'il ya une différence avec les fichiers vérifiés effectue le Reverse conversion avant de comparer, ce qui permet de comparer ce qu'il pense être un LF dans le fichier extrait avec un CRLF inattendu dans le référentiel. Pour autant que je puisse voir vos choix sont: Re-importer votre code dans un nouveau dépôt git sans utiliser git-svn, cela signifie que les terminaisons de ligne sont convertis dans l'intial git commit --all Ensemble autocrlf à faux, et d'ignorer le fait Que les terminaisons de ligne ne sont pas dans gits style préféré Vérifiez vos fichiers avec autocrlf off, réparer toutes les terminaisons de ligne, tout vérifier à nouveau, et le remettre sous tension à nouveau. Réécrivez votre historique repositorys afin que le commit d'origine ne contient plus le CRLF que git wasnt attendre. (Les mises en garde habituelles concernant la réécriture de l'histoire s'appliquent) Note de bas de page: si vous choisissez l'option 2 alors mon expérience est que certains des outils auxiliaires (rebase, patch etc) ne traitent pas les fichiers CRLF et vous finirez tôt ou tard avec des fichiers avec un Mix de CRLF et LF (terminaisons de ligne incohérentes). Je ne connais aucun moyen d'obtenir le meilleur des deux. Je ne sais pas beaucoup sur git sur Windows, mais. Apparemment, git convertit le format de retour en fonction de celui de la plate-forme en cours d'exécution (Windows). CRLF est le format de retour par défaut dans Windows, tandis que LF est le format de retour par défaut pour la plupart des autres OS. Les chances sont, le format de retour sera ajusté correctement lorsque le code est déplacé à un autre système. Je pense aussi que git est suffisamment intelligent pour conserver les fichiers binaires intacts plutôt que d'essayer de convertir les LFs en CRLFs, par exemple, en JPEG. En résumé, vous n'avez probablement pas besoin de se fâcher trop sur cette conversion. Cependant, si vous allez archiver votre projet comme un tarball, les autres codeurs apprécieront probablement avoir terminateurs de ligne LF plutôt que CRLF. Selon le degré de soin (et selon que vous n'utilisez pas le Bloc-notes), vous voudrez peut-être mettre git à utiliser des retours LF si vous le pouvez :) Appendice: CR est ASCII code 13, LF est ASCII code 10. Ainsi, CRLF est de deux Octets, tandis que LF est un. Un article GitHubs sur les terminaisons de ligne est couramment mentionné lorsque vous parlez de ce sujet. Mon expérience personnelle avec l'utilisation du réglage souvent recommandé de configuration de core. autocrlf était très mélangée. Im utilisant Windows avec Cygwin, traitant des projets Windows et UNIX à des moments différents. Même mes projets Windows utilisent parfois des scripts shell bash, qui nécessitent des terminaisons de ligne UNIX (LF). Si j'utilise le paramètre core. autocrlf recommandé par GitHubs pour Windows, si je consulte un projet UNIX (qui fonctionne parfaitement sur Cygwin - ou peut-être que je contribue à un projet que j'utilise sur mon serveur Linux), les fichiers texte sont extraits avec Windows CRLF), créant des problèmes. Fondamentalement, pour un environnement mixte comme je l'ai, la définition du core. autocrlf global à l'une des options ne fonctionnera pas bien dans certains cas. Cette option peut être définie sur une configuration git locale (référentiel), mais même cela ne serait pas suffisant pour un projet contenant des éléments liés à Windows et UNIX (par exemple, j'ai un projet Windows avec des scripts utilitaires bash). Le meilleur choix que j'ai trouvé est de créer des fichiers. gitattributes par référentiel. L'article de GitHub le mentionne. Exemple de cet article: Dans un de mes projets de référentiel: C'est un peu plus de choses à mettre en place, mais le faire une fois par projet, et tout contributeur sur n'importe quel système d'exploitation ne devrait pas avoir de problèmes avec les terminaisons de ligne lorsque vous travaillez avec ce projet. Répondue Jul 30 at 19: 32Si vous utilisez Git pour collaborer avec d'autres sur GitHub, assurez-vous que Git est correctement configuré pour gérer les terminaisons de ligne. Chaque fois que vous appuyez sur retour sur votre clavier, vous insérez un caractère invisible appelé fin de ligne. Historiquement, différents systèmes d'exploitation ont manipulé les terminaisons de ligne différemment. Lorsque vous affichez des modifications dans un fichier, Git gère les terminaisons de ligne à sa manière. Puisque vous collaborez à des projets avec Git et GitHub, Git peut produire des résultats inattendus si, par exemple, vous travaillez sur une machine Windows et que votre collaborateur a modifié OS X. Paramètres globaux pour les terminaisons de ligne La commande git config core. autocrlf Est utilisé pour modifier la façon dont Git gère les terminaisons de ligne. Il faut un seul argument. Sur OS X, vous passez simplement l'entrée à la configuration. Par exemple: Sous Windows, vous passez simplement à la configuration. Par exemple: Sur Linux, vous passez simplement l'entrée à la configuration. Par exemple: Sur OS X et Linux, vous voulez généralement passer l'entrée pour ce paramètre. Sous Windows, vous voulez généralement utiliser true. Par exemple: Paramètres par référentiel Vous pouvez configurer la manière dont Git gère les terminaisons de ligne par référentiel en configurant un fichier. gitattributes spécial. Ce fichier est attaché au référentiel et remplace un paramètre core. autocrlf individuel, assurant un comportement cohérent pour tous les utilisateurs, quels que soient leurs paramètres Git. L'avantage d'un fichier. gitattributes est que vos configurations de ligne sont associées à votre référentiel. Vous n'avez pas besoin de s'inquiéter si oui ou non les collaborateurs ont les mêmes paramètres de fin de ligne que vous faites. Le fichier. gitattributes doit être créé dans la racine du référentiel et engagé comme n'importe quel autre fichier. Voici un exemple du fichier dans le GitHub Developers Guide. Un fichier. gitattributes ressemble à un tableau avec deux colonnes: à gauche est le nom de fichier pour Git à correspondre. Sur la droite se trouve la configuration de fin de ligne que Git devrait utiliser pour ces fichiers. Voici un exemple de fichier. gitattributes. Vous pouvez l'utiliser comme un modèle pour vos dépôts: Vous remarquerez que les fichiers correspondent -.c..sln..png -, séparés par un espace, puis un paramètre - texte. Texte eolcrlf. binaire. Eh bien, passez en revue certains paramètres possibles ci-dessous. Textauto Git manipulera les fichiers de la manière qu'il croit la meilleure. C'est une bonne option par défaut. Text eolcrlf Git convertira toujours les terminaisons de ligne en CRLF à la caisse. Vous devez l'utiliser pour les fichiers qui doivent conserver les terminaisons CRLF, même sur OSX ou Linux. Par exemple, voici un projet Windows qui applique les terminaisons de ligne CRLF. Text eollf Git convertira toujours les terminaisons de ligne en LF à la caisse. Vous devez l'utiliser pour les fichiers qui doivent conserver les terminaisons LF, même sous Windows. Par exemple, voici un projet qui applique les terminaisons de ligne LF. Binaire Git comprendra que les fichiers spécifiés ne sont pas du texte, et il ne doit pas essayer de les modifier. Le paramètre binaire est également un alias pour - text - diff. Rafraîchissement d'un référentiel après modification des terminaisons de ligne Après avoir défini l'option core. autocrlf et validé un fichier. gitattributes, Git peut souhaiter valider des fichiers que vous n'avez pas modifiés. À ce stade, Git est impatient de changer les terminaisons de ligne de chaque fichier pour vous. La meilleure façon de configurer automatiquement vos terminaisons de ligne repositorys est de sauvegarder d'abord vos fichiers avec Git, de supprimer tous les fichiers dans votre référentiel (sauf le répertoire. git), puis de restaurer les fichiers à la fois. Enregistrez vos fichiers actuels dans Git, afin qu'aucun de vos travaux ne soit perdu. Supprimez tous les fichiers de l'index Gits. Réécrivez l'index Git pour récupérer toutes les nouvelles terminaisons de ligne. Ajoutez tous vos fichiers modifiés et préparez-les pour un commit. C'est votre chance d'examiner quels fichiers, le cas échéant, n'ont pas été modifiés. Confirmez les modifications apportées à votre référentiel.
No comments:
Post a Comment