12
votes

Pour mettre le préfixe? aux codes par git / svn

Comment pouvez-vous mettre le préfixe ? v = versionNumber code> à chaque fichier de votre référentiel de manière efficace avec git / svn? strong>

J'ai découvert que la pratique donner des numéros de version à chaque fichier spécifique de son repo. P>

Ils utilisent SVN. J'aimerais savoir comment vous pouvez faire la même chose avec Git. P>

Quelques exemples. Strong> p>

# 1 h2> xxx

# 2 H2>
<script src="./js/question.js?v=3955" type="text/javascript"></script>


3 commentaires

Je viens d'ajouter quelques commentaires pour répondre à vos commentaires.


Ajout d'un commentaire pour répondre à votre commentaire Demander pourquoi ils afficheraient un numéro de révision SVN.


Merci pour vos réponses, VONC!


4 Réponses :


15
votes

"à votre dépôt"? à votre répertoire directement em>?
Ce serait appel « d'extension mot-clé strong> » et non recommandé (comme indiqué dans cette SO question)

Mettre méta-données (numéro de révision) en données stockées dans une boîte dépôt conduire à des problèmes de fusion . p>

ce que vous voyez dans les pages SO sont les résultat d'un processus de déploiement qui prend la méta-données de SVN (la révision) et le met dans les pages HTML générées. p>

GitFaq ne recommande pas non plus.
L'équivalent à un numéro de révision de SVN intégré dans des fichiers déployés sur un serveur serait d'utiliser git décrire strong> , afin d'obtenir une sorte de « comte commit » à afficher lors de l'étape de déploiement. p>

Mais l'enregistrement directement dans le référentiel signifierait l'expansion mot-clé , et em> mot un em> expansion. p>


Pour illustrer cela, nous allons vérifier ce que dit Linus au moment de la discussion initiale sur ce sujet (Avril 2007): p>

Ajout d'expansion est non seulement « plus difficile ». Il est pratiquement impossible de le faire avec tout type de performance.
Pensez " git checkout newbranch code>".
Et penser ce que nous faisons sur les fichiers (et sous-répertoires entiers!) Qui ont même pas changé. Et enfin, penser à l'importance que l'optimisation est dans un SCM comme git que les branches de supports. P>

[les] problèmes fondamentaux que l'expansion mot-clé a (c.-à commutation branches est pratiquement impossible de le faire sans vérifier every_single_file em> avec l'ensemble attribut "mot-clé". Il y a d'autres). P>

Maintenant, unexpansion est trivial de le faire (vraiment em> le même que le "CRLF-> LF" Traduction: qui est techniquement vraiment juste un "unexpansion" aussi). Et cela devrait fonctionner. P>

La façon dont cela fait aussi unexpansion casse « git diff » en ce qu'elle fait toujours essentiellement diff em ignorer> les mots-clés. En d'autres termes, quand vous faites p> Blockquote>

git diff A..B


6 commentaires

@VONC: Votre réponse soulève une question. Quelle fonctionnalité utilisez-vous au lieu de expansion de mots-clés ? --- Je ne l'ai jamais utilisé sur mes projets.


Je suis surpris pourquoi alors utilise l'expansion du mot clé . Il doit y avoir des raisons de cela. Peut-être, ils n'utilisent pas Git-SVN qui les entraînent d'utiliser le mot-clé .


@ Masi: Dans le contexte de votre question, ce serait "Git décrivant", afin d'obtenir une sorte de numéro de version technique (par exemple, être inclus dans les fichiers au stade de déploiement).


@ Masi: Mon point est: Je ne pense pas que cela utilise du tout une expansion des mots clés, mais utilise plutôt le numéro de révision SVN connu dans un fichier lu par un script PHP et générer la bonne page HTML. Il s'agit de remplacer la bonne variable déployée une fois déployé et non intégré aux métadonnées (expansion des mots clés) au cours d'une commission.


@Vonc: Pourquoi le font-ils? --- Confondre les débutants? Ou pour donner un moyen pour les non-programmeurs de voir le numéro de version actuel?


@ Masi: Pour permettre à l'utilisateur de dire: votre site Web Stackoverflow «Numéro de révision SVN» a de tels problèmes. Ensuite, l'équipe peut simplement copier ce numéro de révision dans une succursale SVN "BUGFIX" et lancer des bogues de fixation. Il s'agit d'un lien entre le site Web du public déployé (les fichiers "distribués", non stockés mais générés) et des données internes (les fichiers "Développement", stockés dans un repo SVN)



6
votes

Si ce numéro de version est généré em> strong> par un script de serveur fort>: php, perl, asp.net, rubis sur rails ( vonc a expliqué pourquoi l'expansion des mots clés est une mauvaise idée , c'est-à-dire pourquoi faire de la mise à jour de git et non de Web serveur de telles informations est une mauvaise idée), alors c'est simplement question de courir git décrit dans ce script.

Une autre solution consiste à apporter Système de déploiement (construction) em> strong> strong>, qui copie Les fichiers du système de contrôle de version sur Web Server, incorporer ces données. Par exemple, gitweb, interface Web git pour git écrit en Perl, a p> xxx pré>

remplacé par système de construction ( faire gitweb / gitweb.cgi code>) par résultat d'exécution git-version-gen code>. Cela signifie par exemple que l'exécution de gitweb montre dans "Generator" en-tête Meta, par exemple: P>

<meta name="generator" content="gitweb/1.6.4.rc0.22.gfc1cf.dirty git/1.6.3.2.317.g2dd3f"/>


0 commentaires

1
votes

Ignorer le mot "efficacement" dans votre question, vous devez rechercher le "pilote de filtrage". Un simple macule pour insérer la révision et une propreté pour enlever cela devrait faire ce que vous (pensez-vous) vouloir.


0 commentaires

2
votes

Peut-être que vous cherchiez ceci:

Comment est-ce que je active la chaîne d'identification pour git repos?

au moins définir un $ ID $ est possible et utiliser des filtres vous permettra d'autres options.

Exemple (pas mieux 1) de Cette réponse xxx

Voir le manuel pour Attributs Git .


1 commentaires

Merci pour votre réponse! J'ai ajouté un exemple ici pour ajouter un concrétisme. Probablement, un meilleur exemple existe également pour cela.