Mois : octobre 2014

[Git] Les fonctionnalités et commandes utiles

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.

Régler des conflits intervenus lors d’un merge (autre méthode qui jongle entre l’interface de gitlab, de PHPStorm et la ligne de commande)

Un peu d’aide externe: On undoing, fixing, or removing commits in git.

  • Contexte #1: au secours, il y a un conflit sur la branche staging intervenu après une tentative de merge et j’ai lamentablement foiré ma tentative de résolution du conflit. Commencer ici.
  • Contexte #2: au secours, il y a un conflit sur la branche staging intervenu après une tentative de merge mais je n’ai pas encore tenté de résoudre quoi que ce soit. Commencer là.

[Interface de GitLab] Commencer par recréer une nouvelle branche

…dans laquelle on va redéposer le code à merger sur staging. ATTENTION: conservez votre ancienne branche pour le moment; votre nouvelle branche doit avoir un nom unique, proche de celui de la branche qu’on essaye de merger dans staging de préférence.

[Interface de PHPStorm]

Depuis l’interface:

On récupère l’info sur la création de notre nouvelle branche: Top menu horizontal > Git > Fetch

On se place sur notre nouvelle branche: Tout en bas à droite, via l’indicateur de la branche courante > dans « Remote Branches » > choisir origin/ma_nouvelle_branche

Depuis GitLab et PHPStorm (jonglage):

Aller dans la Merge Request foireuse (URL de type: https://gitlab.ma-boite.com/client/projet/-/merge_requests/6377/commits). Vous devriez voir un listing des commits liés à la branche que vous souhaites merge dans staging:

En partant du commit le plus ancien (normalement celui le plus en bas de la liste) copier les uns après les autres les hash des commit qu’on souhaite récupérer dans notre nouvelle branche et retourner dans la partie Terminal de PHPStorm pour…

Puis, à partir de là, depuis le terminal bash de l’interface:

…effectuer des cherry-pick en tapant la commande suivante:

(Répéter autant de fois que nécessaire). Une fois tous les commits souhaités récupérés, taper:

Faire une nouvelle Merge Request dans GitLab

Nous allons de nouveau avoir les mêmes conflits, mais l’idée est de les résoudre proprement cette fois-ci…

Depuis PHPStorm

On se place sur la branche staging! Puis, pour vérifier qu’on est dans la bonne branche:

Normalement, le git status devrait vous donner le message suivant:

On branch staging
Your branch is up to date with 'origin/staging'..

On merge (localement) notre nouvelle branche dans staging:

Onb obtient logiquement un conflit:

Dans l’interface, dans la partie arborescence projet, se placer d’un click sur la racine du dossier projet et faire un click droit.

Git > Resolve conflict.

Bouton « Merge »

On arrive sur l’interface à 3 colonnes qui nous permet de corriger le conflit. La colonne du milieu est celle qui doit contenir le code corrigé. On peut se servir des croix « X » (supprimer du code non souhaité dans la colonne de gauche ou de droite) et des flèches « >> » ou « <<" (reporter du code dans la colonne du milieu). On peut également saisir à la main du code dans la colonne du milieu qui sera pris en compte.

Bouton « Apply » lorsque les correction sont finies.

Un petit git status devrait afficher en vert le(s) fichier(s) pour lesquels les conflits ont été résolus. Taper:

Le log de résolution du conflit s’affiche. Pour quitter l’édition:

Puis enfin:

Vous pouvez retourner sur la page de la MR dans l’interface de Gitlab pour vérifier que le merge est passé.

On retourne dans l’interface de Gitlab pour finaliser la merge request

Le mieux est d’en profiter pour supprimer la branche qu’on a souhaité mergé initialement dans staging (celle qu’on a refaite) et qui posait problème. Ne pas oublier de la supprimer également en local!

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.