2010-05-13 6 views
4

La seule chose qui m'importe c'est le fichier C++. (Ne vous inquiétez pas pour les fichiers binaires, le texte, etc ... vous pouvez supposer que tout est C++ code_).patch git ignorant les différences d'espace blanc C++

Je ces branches:

* dev 
    master 

Maintenant, je peux créer une nouvelle branche « magique », où la magie de la branche est equiv à « dev » (en termes de code C++ généré), mais minimise inutile whiteline diffs (comme l'insertion de newlines supplémentaires) de master.

Est-ce possible?

Merci!

+0

Avez-vous besoin de conserver l'historique des modifications en cours? – leedm777

Répondre

0

git diff --ignore-space-change ...

+0

ou 'git diff -b', non? – rmk

0

Vous pouvez essayer la mise en place d'un post-merge hook qui:

  • ne rien faire si la branche actuelle est magique
  • supprimer tous les whitelines de fichiers * .cpp
  • faire nouvelle validation (car un crochet post-merge ne peut pas affecter directement le résultat de git merge)
1

Votre question n'est pas complètement claire pour moi. Je pense que vous voulez que la nouvelle branche contienne des séries de validations qui soient "équivalentes" à celles du dev mais ne contiennent pas de modifications inutiles des espaces.

La manière la plus simple de le faire est avec git rebase --interactive. Cela vous permet de modifier une série de validations manuellement. Vous pouvez obtenir le hachage du premier commit ("root") avec git rev-list HEAD | tail -n 1. Si vous voulez également éditer le premier commit, c'est plus difficile mais il y a une réponse SO pour cela.

git checkout dev 
git checkout -b magic 
git rebase --interactive $(git rev-list HEAD | tail -n 1) 

Cela fait apparaître un éditeur sur la liste des commits dans l'ordre chronologique de l'avant. Vous modifiez choisissez à éditez sur les commissions que vous souhaitez modifier. git va alors s'arrêter avant de traiter chacun de ces commits, vous permettant de le modifier avec git commit --amend puis de poursuivre la rebase avec git rebase --continue. Vous pouvez bien sûr exécuter un script pour nettoyer les fichiers plutôt que de les éditer manuellement. Si vous voulez faire cela en fonction des différences par rapport au commit précédent, vous devrez utiliser quelque chose comme git cat-file blob HEAD^:filename pour récupérer la révision précédente, ou utiliser git diff HEAD^ filename.

Si vous souhaitez automatiser l'ensemble du processus, vous pouvez utiliser git filter-branch --tree-filter script. Regardez la page de manuel pour git-filter-branch pour plus de détails.

Si vous souhaitez empêcher les futures validations de contenir des erreurs d'espaces, vous pouvez configurer un pré-validationhook pour les interdire.

Une fois que vous êtes satisfait de la nouvelle branche magique vous pouvez l'utiliser pour remplacer dev:

git branch -m dev dev-old 
git branch -m magic dev 

Toutefois, notez que cela pourrait causer des problèmes pour les personnes qui ont déjà une copie de dev dans leurs propres repos. Il serait alors préférable de faire une fusion à la place.

Questions connexes