Quotidien Shaarli

Tous les liens d'un jour sur une page.

August 23, 2025

diverged remote branches

Les branches divergentes : source de conflits en push/pull
Erreurs classiques :

! [rejected] main -> main (non fast-forward)
fatal: Need to specify how to reconcile divergent branches.

Qu’est-ce qu’une branche divergente ?
Local et distant ont chacun des commits que l’autre n’a pas.

4 états possibles avec une branche distante :

  1. À jour
  2. Besoin de pull
  3. Besoin de push
  4. Divergée (il faut choisir comment résoudre le conflit)

Comment détecter une divergence ?

git fetch
git status
# Exemple de sortie :
# "Your branch and ‘origin/main’ have diverged, and have 1 and 1 different commits each."

Solution rapide :

git pull --rebase

(Mais il existe d’autres options, comme merge.)

À retenir :

  • git fetch récupère les derniers commits.
  • git pull = git fetch + git merge (ou rebase).
How to Expose Localhost to the Internet: A Developer's Guide - DEV Community

Exposer son localhost sur internet est indispensable pour tester des webhooks, partager des démos en direct, ou tester sur des appareils mobiles réels. L’outil open source Tunnelmole permet de créer un tunnel sécurisé entre un serveur local et une URL publique en quelques secondes. Après avoir lancé son serveur local (ex: localhost:3000), il suffit d’installer Tunnelmole (npm install -g tunnelmole ou via un script d’installation), puis de lancer tmole 3000 pour obtenir une URL publique HTTPS accessible partout. Idéal pour le développement, le débogage ou la collaboration, Tunnelmole est transparent, open source et permet même l’auto-hébergement pour plus de contrôle. Une solution simple et efficace pour sortir de l’isolement de localhost.

Event-Driven Everything: How to Think (and Build) in Events Instead of Requests | by Mike Attara | Aug, 2025 | Medium

L'auteur explique pourquoi repenser les architectures logicielles en privilégiant les événements plutôt que les requêtes synchrones. Au lieu de s’appuyer sur le modèle classique « demande/réponse », l’approche event-driven (EDA) émet des faits immuables (ex : UserSignedUp, OrderPlaced) via des brokers (Kafka, RabbitMQ, etc.), permettant un découplage total, une scalabilité asynchrone et une observabilité native. Les avantages sont majeurs : flexibilité, extensibilité sans modifier les sources, et traçabilité des actions. Des géants comme Shopify, Netflix ou Stripe l’utilisent pour synchroniser des services, déclencher des workflows ou alimenter l’analytics. Attention cependant aux pièges : surcharge des payloads, absence d’idempotence, ou manque de versioning. L’EDA n’est pas une solution universelle (coûts, complexité accrue), mais elle transforme la résilience et l’évolutivité des systèmes — à condition d’adopter une discipline rigoureuse et de traiter les événements comme des contrats versionnés.

the diff algorithm

Git affiche constamment des diffs – mais parfois, ils semblent étranges.

Pourquoi ?

  • Git ne comprend pas les intentions : un renommage (git mv old.py new.py) est traité comme une suppression + ajout.
  • L’algorithme de diff compare simplement deux versions et essaie de résumer les changements de façon lisible… mais pas toujours avec succès.

Astuce :

  • Git propose plusieurs algorithmes de diff. Par exemple, pour mieux gérer les réorganisations de code :
    git diff --histogram
reset

Git n’a pas de bouton "Annuler"
Pas de unadd, uncommit, unmerge ou unrebase. À la place, il y a git reset – puissant, mais dangereux.

Comment fonctionne git reset ?

  • La plupart des commandes Git avancent la branche (git commit, git merge, git pull).
  • git reset peut déplacer la branche n’importe où : en arrière, en avant, ou "de côté".
  • Exemple : git reset HEAD^ force la branche à pointer sur le commit parent, et déstage les changements.

Options clés :

  • Par défaut : conserve les modifications dans le répertoire de travail.
  • --hard : supprime les modifications non commitées (attention, irréversible !).

Risques :

  • Facile de "perdre" des commits en reculant une branche.
  • Avec --hard, perte définitive des changements non commités.
claude-agents/agents/content-writer.md at main · iannuttall/claude-agents · GitHub

Ce dépôt propose une collection d’agents personnalisés pour Claude Code, conçus pour assister les développeurs dans diverses tâches.

Installation

  • Pour un projet spécifique : Copier les agents dans .claude/agents/ à la racine du projet.
  • Pour une utilisation globale : Copier les agents dans ~/.claude/agents/.

Agents disponibles

  • code-refactorer : Aide au refactoring de code
  • content-writer : Rédaction de contenu
  • frontend-designer : Assistance en design frontend
  • prd-writer : Rédaction de documents de spécifications produit
  • project-task-planner : Planification de projets et découpage des tâches
  • security-auditor : Audit de sécurité
  • vibe-coding-coach : Coaching et guidance en codage

Utilisation
Une fois installés, Claude Code détecte et utilise automatiquement ces agents selon les besoins.

the staging area

Git utilise un processus de commit en 2 étapes :

  1. Ajouter les modifications à la zone de staging (git add, git rm, git mv).
  2. Valider avec git commit.

La zone de staging, 3 noms pour une seule chose :

  • staged (--staged)
  • cache (--cached)
  • index (--keep-index)

Astuces :

  • git add -p permet de commiter seulement certaines parties d’un fichier.
  • git diff ne montre que les modifications non staged :
    • git diff HEAD → toutes les modifications non commitées.
    • git diff --cached → seulement les modifications staged.
  • git commit -a ne prend pas en compte les nouveaux fichiers (il faut les add avant).
the reflog

Le reflog Git, c’est quoi ?
Un historique de tous les IDs de commit qu’une branche, un tag ou HEAD a déjà pointés. Utile pour retrouver des commits "perdus".

Différences avec git log :

  • Le reflog est local (non partagé entre dépôts).
  • Il montre l’état des branches avant un rebase (contrairement à git log).
  • Les entrées de plus de 90 jours peuvent être supprimées par git gc.

Comment l’utiliser ?

  1. Lancer git reflog (ou git reflog BRANCH pour moins de bruit).
  2. Chercher un message de commit pertinent.
  3. Inspecter le commit avec git show $COMMIT_ID ou git log $COMMIT_ID.
  4. Récupérer le commit avec git reset --hard $COMMIT_ID ou git branch $NAME $COMMIT_ID.

Limites :

  • Le reflog d’une branche est supprimé si la branche l’est.
  • Inutile pour récupérer un stash supprimé (git stash drop).
  • Les entrées ne correspondent pas toujours aux commandes Git exécutées.

Dernier recours :
Si le commit n’est plus dans le reflog, utiliser git fsck pour lister les commits non référencés.

🧭 Custom Attributes in Symfony 7: The Hidden Tool You’re Not Using Yet | by laurentmn | Aug, 2025 | Medium

Symfony 7 utilise les attributes PHP (syntaxe #[...]) pour remplacer les annotations et déclarer des métadonnées directement dans le code. L’article montre comment créer des attributes sur mesure (ex : #[Audit] pour le logging, #[FeatureToggle] pour gérer des fonctionnalités, #[RequiresRole] pour la sécurité, #[Throttle] pour limiter les requêtes) et les exploiter via des event listeners. Ces outils simplifient la maintenance, évitent la duplication de code et rendent le comportement du code plus explicite. Les attributes peuvent aussi cibler des classes et être packagés en bundles réutilisables. Une fonctionnalité puissante pour structurer vos applications Symfony de manière déclarative et élégante.