2013-05-24 1 views
0

Je recherche une solution appropriée pour supprimer les modifications de l'horodatage uniquement dans l'historique de mon référentiel.Git: Supprime les validations qui ne modifient qu'un horodatage

Si vous vous demandez ce que je fais ici: J'essaye de construire un dépôt git basé sur les archives zip téléchargées tous les jours d'un logiciel où chaque jour tous les fichiers étaient horodatés avec la date .. mais n'étaient pas effectivement changé. Afin de garder les changements réels, je veux me débarrasser de ces changements.

J'ai déjà joué avec filter-branch pour supprimer des sous-répertoires. Quelqu'un at-il une idée de comment y parvenir?

Quelques points supplémentaires qui ont été:

  1. Je sais que le changement est toujours dans une ligne spécifique (si je marche de haut en bas, je pouvais supprimer un changement d'un fichier si seule cette ligne a été touché ?)
  2. L'ancien et le nouveau timestamp sont - pour un commit - dans tous les fichiers identiques.
  3. La ligne est unique au monde, je dirais qu'elle est même intemporelle.

Adjonction

Question 1: Comment puis-je savoir quels fichiers sont réellement changé?

Bon, je donne deux exemples. Le premier contient en fait un changement, le second seulement l'estampillage.

Dans mes exemples, l'horodatage est toujours dans la ligne 5. Mes objectifs sont d'éliminer la ligne un changement de commettre un et d'éliminer commettras B.

Exemple Commit A (Avant)

a file with a header 
a file with a header 
a file with a header 
/* 
Build date: 2013-24-05 11:01:01 (02129bb861061d1a052c592e2dc6b383) 
*/ 
other stuff 
other stuff 
something before the change 
other stuff 

Exemple Commit A (Après)

a file with a header 
a file with a header 
a file with a header 
/* 
Build date: 2013-25-05 11:01:01 (57cec4137b614c87cb4e24a3d003a3e0) 
*/ 
other stuff 
other stuff 
something after the change 
other stuff 

Exemple engager B (Avant)

a file with a header 
a file with a header 
a file with a header 
/* 
Build date: 2013-24-05 11:01:01 (02129bb861061d1a052c592e2dc6b383) 
*/ 
other stuff 
other stuff 
something which is not altered 
other stuff 

Exemple engager B (After)

a file with a header 
a file with a header 
a file with a header 
/* 
Build date: 2013-25-05 11:01:01 (57cec4137b614c87cb4e24a3d003a3e0) 
*/ 
other stuff 
other stuff 
something which is not altered 
other stuff 
+0

Vous aurez besoin d'expliquer plus de choses avant de pouvoir comprendre comment aborder la résolution de ce problème. Si tous les fichiers sont horodatés, indépendamment du fait qu'ils ont réellement changé, comment savez-vous quels fichiers ont réellement des changements? –

+0

J'ai mis à jour la question avec un exemple. – knalli

+0

voulez-vous supprimer ces lignes ou tout simplement les remplacer par autre chose? – Chronial

Répondre

1

Version courte: utilisez git filter-branch --tree-filter avec un filtre qui supprime le tampon de validation dans tous les fichiers. Quelque chose comme:

find . -name "*" -print | xargs sed -i 's/**commit-stamp-pattern**//g' 

Git s'occupera du reste.

est ici un moyen de supprimer ces commentaires à l'aide perl:

find . -name "*" -print | xargs perl -i -pe 'undef $/; s!^/\*\nBuild date: \d{4}-.*\n\*/\n!!m' 

(cela ne fonctionnera que si aucun de vos noms de fichiers contiennent des espaces).

+0

D'accord, sed est cool. Je ne comprends pas bien au travail, mais de toute façon: sed est assez cool. – knalli

+0

(mis à jour ma réponse) – Chronial

+0

J'ai ajouté ma solution et a marqué c'est la réponse finale, je vous remercie! Perl était une meilleure solution que sed, en effet. – knalli

Questions connexes