2009-05-26 4 views
4

Je commence les tests pour passer de cvs à git, et j'ai un problème sur tous mes tests.Personnalisé git diff pour ignorer certains conflits

Nous maintenons une copie personnalisée de sources FreeBSD, donc dans cvs nous ce qui suit lors d'une nouvelle version de FreeBSD est publié:

  1. Importation nouvelle freebsd src comme une branche du vendeur
  2. fusionner les modifications sur la tête

J'ai essayé de faire la même chose avec git, et cela a fonctionné, mais presque tous les fichiers FreeBSD ont un identifiant personnalisé comme celui-ci:

$FreeBSD: release/7.0.0/COPYRIGHT 175036 2008-01-01 09:36:30Z imp $

Ces lignes changent toujours, et à cause de l'endroit où ils sont stockés dans le dépôt svn (version/7.0.0, 7.1.0, 7.2.0), git génère beaucoup de conflits qui devaient être fixés manuellement .

Je voudrais savoir s'il existe un moyen de configurer git pour simplement ignorer les différences sur ces lignes et utiliser le nouveau sans demander.

je peux le faire avec la commande diff ignorer ces lignes, comme ceci:

diff -q -I'[$]FreeBSD:.*$'

Merci à l'avance.

+0

Merci pour la réponse "acceptée", mais est-ce que vous avez trouvé un script qui a fait ce que vous vouliez? Si oui, vous pouvez poster ici pour le reste d'entre nous à utiliser;) – VonC

+0

Je vais le tester et poster un commentaire. –

+0

Alors, comment vont les tests? – hlovdal

Répondre

1

Je ne suis pas sûr que vous pouvez éviter les conflits lors des fusions à cause de ces changements.

Ce que vous pouvez faire, cependant, est un petit script capable de lister tous les fichiers être se confond, faites votre diff -q -I'[$]FreeBSD:.*$' sur chacun d'eux, et pour ceux qui ont pas de différence, faire un

git checkout --theirs theFreeBSDFile 

alors resume de la fusion sera en mesure de compléter la fusion conflictuelle.

Le 'git checkout --theirs' vérifie l'étape 3 (la leur) pour les chemins non-fusionnés.

En fait, un git mergetool serait parfait pour le travail: juste avant une fusion impliquant des fichiers FreeBSD, définissez votre utilitaire mergetool à ce script, comme décrit dans la question Is it possible for git-merge to ignore line-ending differences?.
Si vous configurez la configuration mergetool pour approuver le code de sortie de ce script, tout fichier qui n'affiche aucune différence à l'exception des lignes personnalisées FreeBSD serait 'git checkout --theirs' et aurait été "fusionné", l'autre ne serait pas fusionné par le même script . A la fin, si un CV affiche toujours un fichier en conflit, réinitialisez votre outil de fusion à votre difftool favori et résolvez les fichiers conflictuels restants.

Questions connexes