2016-10-14 1 views
0

J'ai des connaissances limitées en git pour comprendre la documentation sur git-hooks. Je voulais savoir s'il y avait un moyen d'ajouter un git-hook ou une autre construction de telle sorte qu'il puisse vérifier si du code est présent/commenté dans l'un des fichiers. Mon flux de travail est que j'ai un fichier de configuration globalConfig.js qui contient deux ensembles de configurations development et production. Quand je suis en train de développer, je décommode la configuration development et commente la configuration production mais quand je commets n'importe quel code à mon repo, je veux m'assurer que la configuration production est décommentée et la configuration development est commentée.Git crochet pour vérifier la présence du code

Extrait du fichier globalConfig.js

Développement

// Production config - Always uncomment it before commiting 
    // const firebaseConfig = { 
    // apiKey: "prod", 
    // authDomain: "prod", 
    // databaseURL: "prod", 
    // storageBucket: "prod", 
    // messagingSenderId: "prod" 
    // }; 

    // Dev config - Always comment out before commiting 
    const firebaseConfig = { 
    apiKey: "dev", 
    authDomain: "dev", 
    databaseURL: "dev", 
    storageBucket: "dev", 
    messagingSenderId: "dev" 
    }; 

production

// Production config - Always uncomment it before commiting 
    const firebaseConfig = { 
    apiKey: "prod", 
    authDomain: "prod", 
    databaseURL: "prod", 
    storageBucket: "prod", 
    messagingSenderId: "prod" 
    }; 

    // Dev config - Always comment out before commiting 
    // const firebaseConfig = { 
    // apiKey: "dev", 
    // authDomain: "dev", 
    // databaseURL: "dev", 
    // storageBucket: "dev", 
    // messagingSenderId: "dev" 
    //}; 

Est-il possible d'y parvenir via git-hook ou un autre git construc t?

+1

Cela devrait être possible, mais pour une réponse plus précise, il serait bon de voir des extraits du 'globalConfig.js' avec la configuration de production et de développement depuis le pré commit hook va faire un tas de 'grep'ing pour valider le fichier. –

Répondre

1

Le hook de pré-validation suivant devrait vous aider à démarrer. Si un fichier porte le mot development alors il doit s'agir d'un commentaire sinon la validation n'est pas autorisée.

Étapes:

  1. Créer .git/hooks/pre-commit avec le contenu suivant:

    git diff --cached --name-status | while read file; 
    do 
       if egrep "development" $file ; then 
        echo "ERROR: Disallowed development configuration in file: ${file}" 
        exit 1 
       fi 
    done || exit $? 

Notez que l'expression de egrep est très simple atmosphère, mais vous devriez être en mesure de le modifier selon vos besoins (c'est-à-dire le contenu exact de globalConfig.js) OU, vous pouvez mettre à jour vos questions avec des extraits de globalConfig.js :)

  1. Modifier les autorisations

chmod 755 .git/hooks/pre-commit

  1. Et puis essayez de commettre un fichier globalConfig.js non valide. Voici ce que mon test a montré:

☻ cat globalConfig.js         SomeOtherFeature/abc 0d174e2 ✗ 
//Configuration 
var Production = new String("Production Configuration"); 
var development = new String("development Configuration"); 

$ git add globalConfig.js 

$ git commit -m "Commit should not be allowed" 
Checking if globalConfig.js is valid 
var development = new String("development Configuration"); 
ERROR: Disallowed development configuration in file: globalConfig.js 

+0

Merci pour la réponse détaillée et désolé pour mon retard dans la réponse. J'ai mis à jour les questions avec les extraits du fichier 'globalConfig.js' que je dois vérifier avant de valider. J'ai quelques questions: 1. Le script 'pre-commit' est-il exécuté sur tous les fichiers en cours de validation ou puis-je l'exécuter uniquement sur certains fichiers? 2. Je ne suis pas sûr quel langage de script est utilisé pour écrire le script réel mais est-ce seulement le langage que nous pouvons écrire le crochet pré-commit ou puis-je utiliser un autre langage tel que Python. –

+1

1. Si vous modifiez 'git diff --cached --name-status' en' git diff --cached --name-status - globalConfig.js', c'est ce que le hook va exécuter. 2.Vous pouvez écrire le hook en python. Voir [this] (http://stackoverflow.com/questions/3311869/writing-git-hooks-in-python-bash-scripts). –

+0

Merci Ashutosh. Je vais essayer le script python. –