71 votes

Comment puis-je conserver l'horodatage original du fichier [commit] sur Subversion ?

Je veux être sûr que si je livre quelque chose dans Subversion à partir d'une machine, et que je vérifie sur une autre, j'obtiendrai la même valeur pour datetime et timestamp.

Actuellement, j'ai observé que la date de modification du fichier est celle du moment où j'ai effectué la synchronisation au lieu de la valeur originale.

Pour moi, cela n'a pas de sens de savoir quand les fichiers ont été synchronisés - je veux juste voir l'heure de la dernière livraison.

Ce problème n'est pas lié au fuseau horaire.

0 votes

Je suis d'accord avec cela - si ce n'est pas possible, peut-être que cela devrait être une demande de fonctionnalité.

6 votes

Cas d'utilisation : vous avez un produit (source) qui est modifié par votre équipe et à chaque fois que le produit est mis à jour, vous devez resynchroniser vos modifications. Si l'horodatage des fichiers est modifié, la comparaison des fichiers ne fonctionnera pas, ou sera beaucoup plus lente. Un problème se pose si vous voulez synchroniser deux sorties différentes qui ont des modifications locales, des modifications qui n'iront jamais en amont.

1 votes

Le cas d'utilisation réel : prenez lrzsz-0.12.20.tar.gz, décompressez-le et importez-le dans votre SVN (dans une branche fournisseur par exemple). Ensuite, essayez de configurer et de compiler la copie extraite du SVN et la copie décompressée de l'archive. Il y a de fortes chances que la construction de la version SVN échoue car make voudra reconstruire Makefile.in parce que l'horodatage de aclocal.m4 est plus récent que celui de Makefile.in. Juste parce que svn a extrait aclocal.m4 après Makefile.in. Je dois actuellement toucher Makefile.in depuis un Makefile de niveau supérieur pour que les choses fonctionnent pour moi. C'est bizarre.

70voto

silk Points 1794

Vous pouvez le définir dans .subversion/config :

[miscellany]
use-commit-times = yes

Bien que vous aurez des effets secondaires étranges si nous parlons de fichiers sources.

Par exemple, vous construisez votre logiciel et faites svn update . Maintenant, l'horodatage des fichiers mis à jour est plus ancien que l'horodatage du fichier de résultat de construction, et il ne sera pas reconstruit même si certains fichiers sources ont changé. Soyez très prudent avec ce paramètre.

12 votes

Ceci définit l'heure de modification de la copie extraite comme étant égale à l'heure à laquelle les changements ont été validés pour la dernière fois dans le référentiel. Ceci est pas cela revient à conserver la date de modification que le fichier avait lorsqu'il a été importé dans le référentiel.

5 votes

Je crois que c'est ce que le PO voulait dire - comme indiqué dans la question - "Je veux juste voir le dernier temps d'engagement."

0 votes

Il semble que la solution évidente ne soit pas mise en œuvre : ce que je voudrais, c'est transférer l'heure de modification (et non l'heure de commit ou de checkout) et lors de la fusion pendant le checkout, l'heure la plus récente est utilisée.

34voto

nickf Points 185423

Si vous utilisez TortoiseSVN, il y a une option. TortoiseSVN -> Paramètres -> Général -> "Définir les dates de fichiers à la 'dernière heure de livraison'".

Right click on your Tortoise shortcut to settings

7 votes

Ce n'est pas l'horodatage original.

1 votes

Cette option semble être une bonne solution mais comment puis-je contrôler cela lorsque j'utilise un client svn en ligne de commande (comme SlickSVN et non TortoiseSVN) ? Une solution multiplateforme serait meilleure.

1 votes

L'OP déclare : "Pour moi, cela n'a pas de sens de savoir quand les fichiers ont été synchronisés - je veux juste voir la date de synchronisation. heure de la dernière livraison ."

14voto

oefe Points 9122

Subversion ne préserve pas l'horodatage original du fichier.

Si vous avez absolument besoin de préserver l'horodatage, vous devez le faire vous-même. Par exemple, vous pouvez stocker l'horodatage original comme une propriété Subversion.

0 votes

Ce n'est pas vrai, vous pouvez imposer cela avec un paramètre de configuration, vous n'avez pas à le faire vous-même.

9 votes

De même, no- use-commit-times = yes correspond à l'heure à laquelle le fichier a été livré, et non à l'horodatage original.

0 votes

Ahh, ok, je t'ai mal compris, désolé.

2voto

Il semblerait que 'stat -c %y $FILE' soit utilisé dans le cadre d'un crochet pré-revprop-change qui opère sur svn:date. Le seul problème que je pourrais voir est le format de la date.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X