Mois : octobre 2014

[Git] Les fonctionnalités et commandes utiles

  • eBook Pro Git par Scott Chacon et Ben Straub (en français)
  • Git Immersion – GIT IMMERSION IS A GUIDED TOUR THAT WALKS THROUGH THE FUNDAMENTALS OF GIT, INSPIRED BY THE PREMISE THAT TO KNOW A THING IS TO DO IT.
  • Oh shit, git! – Here are some bad situations I’ve gotten myself into, and how I eventually got myself out of them.

Ne pas versionner un répertoire entier :

Source : Utilisation de .gitignore.

Admettons qu’on souhaite ne pas versionner le répertoire sass-cache/ :

Comment supprimer un fichier de mon repository Git ?

Comment supprimer un répertoire de mon repository Git ?

Source : http://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository.

Augmenter la taille maximum du volume de données qu’on peut envoyer en un seul git push sur son repository

Il peut arriver qu’on essaye de remonter un volume trop important de données au cours d’un seul et même push. Le message d’erreur obtenu lors du push est le suivant :

Pour pallier à ce problème, il suffit d’augmenter la taille maximum du volume de données qu’on peut remonter, en une seule fois, dans le repository Git.

…où taille maxi est en octets, ce qui nous donne pour 5 Mo :

Un convertisseur Octet, Ko, Mo, Go, Po est disponible ici http://mon-ip.awardspace.com/convertisseur.php.

Merger la branche ‘master’ dans une autre branche :

Se rendre sur la branche ‘master’: $ git checkout master.

Faire un pull: $ git pull.

Se rendre sur la branche dans laquelle on souhaite merger ‘master’ (toto dans mon exemple): $ git checkout toto.

Merger ‘master’ dans ‘toto’: $ git merge master.


Solution alternative (préférer la 1ère ci-dessus). Vous devez être dans la branche dans laquelle vous voulez merger ‘master’ avant de taper la commande:

Merger une branche avec la branche ‘master’ :

Si on veut pusher du code sur le repo, ajouter:

Régler des conflits intervenus lors d’un merge ou d’un pull –rebase

Si vous obtenez des messages de type CONFLIT (contenu) : Conflit de fusion dans sites/all/themes/custom/roederer_main_theme/src/style/_roederer-actualites.scss lors d’un merge:

Faites un git status pour revérifier quels fichiers sont en conflit:

Editer ces fichiers pour résoudre vos conflits. Puis faites en git add de ces fichiers, puis un git ci sans mettre de message de log (« ctrl+x » pour valider le message proposé par git). N’oubliez pas de faire un git push pour envoyer vos modifs.

Si problème fatal: Vous n'êtes actuellement sur aucune branche. après le git push:

Exemple:

Faire un git st qui vous indiquera qu’un rebasage est en cours.

Faire un git rebase --continue, puis un git push.

Créer une nouvelle branche à partir de la branche ‘release’ :

En premier lieu s’assurer que la branche ‘release’ (ou ‘release’ est le nom de la branche à partir de laquelle vous voulez créer votre nouvelle branche) est à jour avec les derniers devs consignés sur le repository en lançant depuis celle-ci la commande :

Ensuite, toujours depuis la branche à partir de laquelle on souhaite créer une nouvelle branche :

Faire un premier pull

Et pour le premier push dans la nouvelle branche :

Mettre une branche à jour à partir de la branche ‘release’

Je travaille sur du debug ou une feature que je versionne dans une branche à part. Du code à été versé sur la branche ‘release’ dont je pourrais avoir besoin. Je dois donc récupérer ce code. Au lieu de merger, je lance la commande suivante:

Supprimer un ensemble de fichiers ajoutés depuis le dernier pull et encore non-versionnés

Cette commande peut s’avérer pratique (mais dangereuse) lorsqu’on a effectué des modifications sur un certain nombre de fichiers et qu’on ne souhaite pas les conserver.

x pour les dossiers, f pour les fichiers.

J’ai créé une nouvelle branche et le git status m’affiche tous les fichiers qui sont normalement ignorés

Taper git checkout . pour réinitialiser en l’état de ce qui est versé sur la branche Master distante. Un git status ne devrait plus montrer les chemins et fichiers consignés dans le .gitignore.

J’ai modifié un fichier et je ne dois pas le versionner, mais pour l’instant il est surveillé

Source : Stop tracking and ignore changes to a file in Git.

tu peux faire :

par contre, si un jour tu veux commiter un changement que t’as fait sur un fichier ou tu a utiliser cette commande, il faudra faire :

Réinitialiser le code d’une branche à l’état de celui se trouvant sur le repository distant

Solution préférée

Supposons que la branche qu’on souhaite réinitialiser s’appelle: feature/ma_branche.

  1. Retourner sur la branche master avec un $ git co master.
  2. Supprimer la branche qu’on souhaite réinitialiser du repo local en tapant: $ git branch -D feature/ma_branche.
  3. Refaire un checkout de la branche pour la récupérer depuis le repo distant: $ git checkout feature/ma_branche.

Autre solution

Voir toutes les branches existantes, y-compris celles du repo distant

Bonus: rechercher dans toutes les branches existantes, y-compris celles du repo distant, une branche en particulier via un mot clé.

J’ai add et commit (-m) plusieurs fois sur la branche master sans avoir pushé. Comment revenir sur une base propre?

Premièrement, faire un git log pour vérifier le nombre exact de commits qui ont été faits sur la branche master (/Frank, où « Frank » est votre Git username, pour mettre en surbrillance vos commits, n pour les passer en revue l’un après l’autre et q pour quitter).

Ensuite, créer une nouvelle branche à partir de master pour sauvegarder vos commits: $ git checkout -b <nom_de_votre_nouvelle_branche> master.

Puis revenir sur master: $ git checkout master et exécuter la commande $ git reset --hard HEAD^ autant de fois que vous aviez effectué de commits sur master.

Lister les nouvelles branches disponibles uniquement en remote repository et les récupérer en local

How do I list remote branches in Git?

git checkout a Remote Branch

Revenir à un commit précédent en local avec git revert

Source: How to With Git: Rollback Commit.

Pour afficher l’index des commits en local: $ git reflog

Pour revenir en arrière sur tous les commits depuis “1a890e7” jusqu’à “HEAD,”: $ git revert 1a890e7..HEAD

Autre solution:

Il est également possible de faire un simple checkout: $ git checkout 1a890e7.

Debug: la recherche dichotomique avec git bisect start / good / bad / reset

Source: Utilitaires Git – Deboguer avec Git – La recherche dichotomique.

Annoter un fichier peut aider si vous savez déjà où le problème se situe. Si vous ne savez pas ce qui a cassé le code, il peut y avoir des douzaines, voire des centaines de commits depuis le dernier état où votre code fonctionnait et vous aimeriez certainement exécuter git bisect pour vous aider.

Configuration de Git: formatage et espaces blancs

Source: https://git-scm.com/ – 8.1 Personnalisation de Git – Configuration de Git – Formatage et espaces blancs.

Les problèmes de formatage et de blancs sont parmi les plus subtils et frustrants que les développeurs rencontrent lorsqu’ils collaborent, spécifiquement d’une plate-forme à l’autre. Il est très facile d’introduire des modifications subtiles de blancs lors de soumission de patchs ou d’autres modes de collaboration, car les éditeurs de texte les insèrent silencieusement ou les programmeurs Windows ajoutent des retours chariot à la fin des lignes qu’ils modifient. Git dispose de quelques options de configuration pour traiter ces problèmes.

Si vous utilisez un système Linux ou macOS qui utilise les fins de ligne LF, vous ne souhaitez sûrement pas que Git les convertisse automatiquement lorsque vous extrayez des fichiers. Cependant, si un fichier contenant des CRLF est accidentellement introduit en gestion de versions, vous souhaitez que Git le corrige. Vous pouvez indiquer à Git de convertir CRLF en LF lors de la validation mais pas dans l’autre sens en fixant core.autocrlf à input :

Récupérer une branche distante encore non suivie en local

Lister l’ensemble des branches distantes:

J’obtiens par exemple:

Pour récupérer la branche qui nous intéresse (par exemple: remotes/origin/feature/VC-32_integration_detail_produit):

Supprimer une branche local alors qu’on a des conflits de merge en cours

[CSS] Styler un Placeholder

Source: http://css-tricks.com/almanac/selectors/p/placeholder/

Remarque : à priori, il faut mettre la mention !important derrière chaque déclaration pour qu’elles soient prises en compte.

Utilisateurs de préprocesseurs type LESS, SASS, attention : les pseudo-éléments ci-dessus ne fonctionnent pas si le code est factorisé. Déclarer les styles comme ci-dessous :

[jQuery UI 1.8.18][tabs] Reset CSS

Source : http://jqueryui.com/tabs/

Un reset complet des styles pour le widget « tabs » (« onglets ») peut être opéré avec les styles suivants :

On oublie pas le petit HTML de base qui va bien :

[RBS Change] Ajouter un nouveau doctype au projet

1. dans modules/theme/setup, créer un nouveau fichier html5.xml sur la base de init.xml

2. contenu du fichier (pour l’ajout d’un doctype HTML5) :

3. ajouter ceci dans modules/theme/persistentdocument/pagetemplate.class.php :

4. puis sous Putty :

[Magento][TinyMCE] Customizer les settings du WYSIWYG

Le fichier setup de TinyMCE est localisé dans js/mage/adminhtml/wysiwyg/tiny_mce/setup.js.

Dans ce fichier, repérer la variable var settings = { :

Les lignes suivantes pourront être ajoutées à ces variables pour :

Modifier le Doctype

[entity_encoding] Eviter que les caractères accentués (é, è, à, etc…) soient transformés en entités HTML (é, è, etc…)

Si la boutique est entièrement en UTF-8, cette fonction peut être désactivée en éditant la configuration de tinyMCE. Ajouter la ligne :

Source, documentation officielle de TinyMCE : http://www.tinymce.com/wiki.php/Configuration:entity_encoding, [Résolu] TinyMCE et accents.

[valid_elements]

Source, documentation officielle de TinyMCE : valid_elements.

[extended_valid_elements] Etendre le champ des balises et attributs HTML valides

Ajouter des paramètres pour éviter que TinyMCE ne supprime certaines balises vides.
Très embêtant lorsqu’on cherche, par exemple, à exploiter une police d’icônes dans un bloc statique. Le code HTML suivant est, par défaut, automatiquement supprimé :

Pour pallier à ce souci, ajouter la ligne suivante :

Source, documentation officielle de TinyMCE : http://www.tinymce.com/wiki.php/Configuration:extended_valid_elements.

[valid_children] Etendre le champ des balises HTML enfants valides

Permettre, par exemple, l’imbrication d’un H1 dans un A (pratique désormais permise en HTML5).

Source, documentation officielle de TinyMCE : http://www.tinymce.com/wiki.php/Configuration:valid_children.

[force_br_newlines][force_p_newlines] Gestion des retours chariot et du formatage des paragraphes

Supprimer le comportement qui consiste à créer un nouveau paragraphe à chaque retour chariot saisi par l’utilisateur backoffice.

Source, documentation officielle de TinyMCE : http://www.tinymce.com/wiki.php/Configuration:force_p_newlines, http://www.tinymce.com/wiki.php/Configuration3x:force_br_newlines.

[forced_root_block] Supprimer l’imbrication automatique du texte dans une balise P

Source, documentation officielle de TinyMCE : http://www.tinymce.com/wiki.php/Configuration3x:forced_root_block.

TinyMCE valid_elements setting for HTML5

  • Source Git : https://gist.github.com/veprbl/1136304
  • Fork le plus récent (code ci-dessous)(Last active on 20 Mar 2013) : https://gist.github.com/susebus/5204059
  • [Magento] Récupérer l’URL du skin dans un bloc statique

    Pour charger une image consignée dans /skin/frontend/default/_nom_de_mon_skin_/images/ dans un bloc statique :

    Même chose depuis un fichier template (phtml) :

    [Magento] Insérer un bloc statique créé en backoffice dans un gabarit de page depuis un fichier de layout xml et un fichier de template phtml

    Admettons qu’on souhaite insérer un bloc statique dans la partie header d’une page. Il y a 3 étapes à suivre :

    Editer le fichier de layout

    Rendez-vous dans le répertoire /app/design/frontend/default/_nom_du_theme_/layout/ et localiser le fichier page.xml. Dans ce fichier, localiser le code se référant au header de la page (dans le thème par défaut) :

    Et ajoutez-y le code suivant :

    La méthode setBlockId permet de déclarer l’ID du bloc statique créé en back-office à ajouter.
    Ne pas oublier :

    • de renseigner correctement les attributs name= »nb.headband » et as= »nbHeadband »
    • de renseigner correctement l’ID du bloc statique créé en back-office

    Editer le fichier de template

    Rendez-vous ensuite dans le répertoire /app/design/frontend/default/_nom_du_theme_/template/page/html/ et localiser le fichier header.phtml. Dans ce fichier, à l’endroit où vous souhaitez voir apparaître votre bloc statique, ajoutez la méthode suivante :

    …où nbHeadband correspond à l’attribut as rensigné dans le fichier page.xml.

    Créer le bloc statique en backoffice

    Rendez-vous dans CMS > Blocs statiques et cliquez sur le bouton Ajouter un nouveau bloc. Le champ identifiant doit porter le même libellé que celui déclaré plus haut dans le fichier page.xml à savoir, pour notre exemple, nb-headband.

    [WordPress] Utiliser des sprites CSS avec le plug-in Quickfinder de WordPress pour obtenir un effet d’images survolées

    Attention, sous Chrome il semble que le SPAN imbriqué (il contient nativement l’effet d’ombre appliqué au caractère issu de la police d’icônes – et duquel on se sert pour appliquer certaines propriétés CSS) soit supprimé par le parseur HTML !!! A rajouter en dur dans le template du bloc :

    Avertissement : ce procédé est sale et ne vient en aucun cas enrichir des fonctionnalités existantes de WordPress.

    Le code CSS ci-dessous apparaît en surcharge du code fourni par le plug-in. Sa présence empêchera l’utilisation native de Quickfinder sur les élements auxquels il sera appliqué.

    Dans l’interface d’administration, ne charger aucune image et n’assigner aucune icône par shortcode.

    Cette technique ne donne pas de bons résultats avec des pngs transparents. Pensez à mettre un fond de couleur en rapport avec votre fond de page dans vos sprites.

    Le markup HTML et le code Javascript restent inchangés.