2016-10-07 2 views
0

Je convertis un dépôt CVS très ancien et énorme en Git en utilisant cvs2git via Cygwin. Cela fonctionne bien et j'ai commencé à tester le nouveau référentiel. Je n'ai pas trouvé de plus grandes particularités. Mais je me demande comment les horodateurs d'un ensemble commit/change sont déterminés. Jusqu'à présent, j'ai déterminé que les horodatages entre certaines révisions CVS diffèrent de 1 ou 2 heures plus x, où x est un temps de quelques secondes ou minutes (la plupart des cas) jusqu'à 15 minutes 15. Beaucoup d'horodatages ne diffèrent que par des heures entières (x = 0).Comment les horodatages de commit sont-ils générés dans cvs2git/cvs2svn?

Je suppose que cela doit faire quelque chose avec la "correction d'erreur d'horodatage" que j'ai trouvé être une fonction cvs2svn (http://www.mcs.anl.gov/~jacob/cvs2svn/features.html). Peut-être que cela a aussi quelque chose à voir avec les fuseaux horaires.

Les résultats de mes tests montrent que toutes les validations avec un seul fichier de l'ensemble de modifications diffèrent par des heures entières. Cela supporte mon "hypothèse de fuseau horaire". Mais cela m'amène aussi à la question de savoir comment l'horodatage des ensembles de changements avec plusieurs fichiers est déterminé.

J'ai essayé de passer en revue le code et j'ai découvert (avec l'aide de Google) qu'il y a un "COMMIT_THRESHOLD" dans le fichier config.py du fichier cvs2svn_lib. Il est utilisé pour fuzzing les commits basés sur le fichier dans le CVS ensemble, je suppose. Bien que le code semble bien écrit, mon manque de compréhension technique du stockage de révision CVS, SVN et Git me rend difficile à comprendre.

Par conséquent, je vous serais reconnaissant si quelqu'un pourrait répondre aux questions suivantes:

  • Comment cvs2svn/cvs2git déterminer un horodatage commettras de jeux de changement avec plusieurs fichiers?
  • Comment fonctionne la "correction d'erreur d'horodatage" cvs2svn/cvs2git? (Pour moi, l'arrière-plan fonctionnel est plus important que la technique.)

Amitiés

Edit:

Comme quelqu'un a examiné cette question comme « trop large », je crains que je ne faisais pas mon point assez clair. Donc, je voudrais donner un exemple concret (bien que fictif):

cvs2git trouvé 3 changements de fichiers pour un ensemble de modifications. Ils ont été commis le même jour (disons le 30 février 2016). Mais leur temps diffèrent:

  • Fichier 1: 12:34:56
  • Fichier 2: 12:35:38
  • Fichier 3: 12:36:09

Si elle était seulement le fichier 1, je pense, que cvs2git utilise 2016-02-30T12: 34: 56 comme timestamp pour la validation Git. Mais quel horodatage est choisi, lorsque les validations pour les 3 fichiers appartiennent à un ensemble de modifications? En relation avec cela, quand mon dépôt est converti, les heures semblent être ajustées exactement de 1 ou 2 heures également. Cela se produit également lorsqu'il n'y a qu'un seul fichier dans l'ensemble de modifications. Je suppose que c'est une sorte de réglage du fuseau horaire. Donc, je voudrais savoir, pourquoi la "correction d'erreur d'horodatage" a changé mes horodatages, pour vérifier si j'accepte ces changements ou non. J'ai fait quelques statistiques sur le dépôt Git converti et les temps de commit me semblent ok en principe; mais cela ne me suffit pas.

+0

Je vois que quelqu'un a voté pour fermer cela comme "trop ​​large" (ce qui est probablement vrai). Je ne connais pas les détails des entrailles de cvs2 (git/svn) et je ne peux pas vraiment répondre, mais il convient de mentionner que CVS est un système de serveur centralisé orienté fichier alors que SVN et Git sont orientés commit (et centralisés et distribué respectivement). L'orientation du fichier signifie que pour effectuer un bon travail de conversion, il est nécessaire de corréler les révisions de fichiers individuelles (instances "cvs ci") en une seule validation, ce qui nécessite une certaine flexibilité de l'horodatage. – torek

+0

Merci d'avoir fait vos commentaires. J'ai ajouté un exemple pour clarifier ce que je veux dire. En passant: je connais les principales différences entre CVS et Git, notamment en ce qui concerne le fichier par fichier et les principes de commit. C'est pourquoi je voudrais passer à Git. Cependant, je ne sais pas comment les fonctions sont implémentées dans CVS ou Git ou cvs2git. Pour moi, c'est la différence entre compréhension fonctionnelle et technique. Peut-être que ça ressemblait un peu à ce que je ne comprends pas comment fonctionne CVS et Git, parce que l'anglais n'est pas ma langue maternelle. – nemo

+0

I _think_ CVS stocke les horodatages en UTC. Quand vous dites que l'horodatage de git est de 1 à 2 heures d'arrêt, est-ce aussi en UTC, donc l'erreur est absolue, ou est-ce que git affiche l'heure dans un fuseau horaire? (Votre question semble bien formulée et donc je ne veux pas vous insulter/m'énerver ici, mais je voulais juste vérifier.) Pour lequel des 3 horodatages a été choisi quand un commit git est fabriqué à partir de plusieurs commits cvs : Est-ce que ça importe? Je sais, je sais, je suis aussi un ingénieur précis et je veux savoir comment ça marche, mais si ça n'affecte vraiment rien, peut-être qu'il est plus facile de savoir que ce qu'il fait est reasonab – Mort

Répondre

2

vous poser deux questions:

  1. Comment sont générés horodatages pour commits toucher plusieurs fichiers? Pour les validations qui modifient les fichiers, cvs2svn/cvs2git prend l'horodatage le plus récent parmi les validations de niveau fichier qui constituent la validation. Cependant, si cet horodatage est antérieur à l'horodatage de la validation précédente ou plus d'un jour après l'heure de conversion, il choisit à la place un horodatage une seconde après celui de la validation précédente. Pour les validations qui impliquent une dérivation ou un balisage (pour lequel CVS n'enregistre pas d'horodatage), l'horodatage est défini sur une seconde après l'horodatage de la validation précédente.

  2. Pourquoi les horodatages sont-ils parfois décalés d'un nombre entier d'heures?

    CVS enregistre les horodatages en UTC sans enregistrer de fuseau horaire, et cvs2svn/cvs2git utilise ces horodatages tels quels sans essayer de deviner un fuseau horaire. Les horodatages doivent donc être corrects, mais exprimés en UTC.

    git log dispose d'une option --date qui peut être utilisée pour demander que les dates soient affichées dans le fuseau horaire local.

Le fichier projet cvs2svn doc/design-notes.txt documente les algorithmes utilisés par cvs2svn/cvs2git dans un certain détail.

+0

Merci pour votre réponse; et 1up pour le à la documentation je n'ai pas trouvé. Pour les générations suivantes: Recherchez le chapitre "TopologicalSortPass". – nemo

+0

Je viens de découvrir, que je ne peux pas upvote en ce moment; Pardon. A propos: Les différences de temps de toutes les heures sont causées par les fuseaux horaires: +1 h pour l'heure normale et +2 heures pour l'heure d'été.Quand j'utilise 'git log', l'horodatage correct (UTC) est affiché. – nemo