130 votes

Git m’avertir si un ID de validation de sténographie peut faire référence à 2 différentes validations ?

Si `` peut faire référence à 2 ID de validation différents, tels que

et

Git vous m’avertit si je tape dans ? (ou Git 1.8.5.2 (Apple Git-48) me permet de taper dans ).

Je pense qu’il se doit, bien que je ne peux pas trouver n’importe quelle source faisant autorité qui dit qu’il serait.

166voto

janos Points 22603

Il devrait vous donner quelque chose comme ceci:

$ git log cee157
error: short SHA1 cee157 is ambiguous.
error: short SHA1 cee157 is ambiguous.
fatal: ambiguous argument 'cee157': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Je viens de tester cela sur un vrai dépôt Git, par la constatation s'engage avec des doublons de préfixes comme ceci:

git rev-list master | cut -c-4 | sort | uniq -c | sort -nr | head

Cela prend la liste de révisions en master, découpe les 4 premiers caractères et jette le reste, comptez le nombre de doublons et de les trier numériquement. Dans un relativement petit référentiel de ~1500 commet j'ai trouvé pas mal de révisions avec une commune de 4 chiffres préfixe. J'ai choisi un code de 4 chiffres préfixe parce que semble être la plus courte durée légale pris en charge par Git. (Ne fonctionne pas avec les 3 chiffres ou moins, même si c'est pas ambigu.)

Btw, ce n'était pas une faute de frappe, je ne sais pas pourquoi le message d'erreur à propos ambigus SHA1 apparaît deux fois, quel que soit le nombre de doublons de SHA1 (essayé avec 2 et 3):

error: short SHA1 cee157 is ambiguous.
error: short SHA1 cee157 is ambiguous.

( stderr. En fait l'ensemble de la production est en stderr, rien que sur stdout.)

Testé sous Windows:

$ git --version
git version 1.8.1.msysgit.1

Je pense qu'il est sûr de dire que si votre version est >= 1.8.1, Git va vous avertir en cas de doublons. (Il refusera de fonctionner avec des doublons.) Je suppose que beaucoup des versions plus anciennes travaillé de cette façon.

Mise à JOUR

Lors de l'essai de cela, vous avez besoin d'un minimum de 4 chiffres SHA1, en raison de l' int minimum_abbrev = 4 dans l'environnement.c. (Merci @devnull de remarquer qu'à l'extérieur!)

63voto

devnull Points 45016

Le posteur d'origine états:

Je pense qu'il devrait, bien que je ne trouve pas de source autorisée que dit qu'il le ferait.

La source de référence peut être trouvé dans le code source, get_short_sha1().

En citant ce:

if (!quietly && (status == SHORT_NAME_AMBIGUOUS))
    return error("short SHA1 %.*s is ambiguous.", len, hex_pfx);

et ce:

if (!ds->candidate_checked)
    /*
     * If this is the only candidate, there is no point
     * calling the disambiguation hint callback.
     *
     * On the other hand, if the current candidate
     * replaced an earlier candidate that did _not_ pass
     * the disambiguation hint callback, then we do have
     * more than one objects that match the short name
     * given, so we should make sure this one matches;
     * otherwise, if we discovered this one and the one
     * that we previously discarded in the reverse order,
     * we would end up showing different results in the
     * same repository!
     */
    ds->candidate_ok = (!ds->disambiguate_fn_used ||
                        ds->fn(ds->candidate, ds->cb_data));

if (!ds->candidate_ok)
    return SHORT_NAME_AMBIGUOUS;

En outre, des tests existent également pour s'assurer que la fonction fonctionne comme prévu.

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