2016-10-14 2 views
0

Ich habe begrenzte Kenntnisse in git, um die Dokumentation zu git-hooks zu verstehen. Ich wollte wissen, ob es eine Möglichkeit gibt, ein git-hook oder ein anderes Konstrukt hinzuzufügen, so dass es überprüfen kann, ob Code in einer der Dateien vorhanden/auskommentiert ist. Mein Workflow ist, dass ich eine Konfigurationsdatei globalConfig.js habe, die zwei Satzkonfigurationen development und production enthält. Wenn ich mich entwickle, entziehe ich die development Konfiguration auskommentieren und production Konfiguration auskommentieren, aber wenn ich Code zu meinem Repo festlege, möchte ich sicherstellen, dass die production Konfiguration unkommentiert ist und development Konfiguration kommentiert ist.Git Haken, um das Vorhandensein von Code zu überprüfen

Auszug aus globalConfig.js Datei

Entwicklung

// 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" 
    }; 

Produktion

// 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" 
    //}; 

Ist es möglich, sie über git-hook oder einem anderen git construc zu erreichen t?

+1

Dies sollte möglich sein, aber für eine genauere Antwort wäre es gut, Schnipsel des 'globalConfig.js' mit der Herstellung und Entwicklung Konfiguration zu sehen, da die Pre- commit hook wird eine Menge 'grep' machen, um die Datei zu validieren. –

Antwort

1

Der folgende Pre-Commit-Hook sollte Ihnen den Einstieg erleichtern. Wenn eine Datei das Wort development enthält, muss es ein Kommentar sein, ansonsten ist das Commit nicht erlaubt.

Schritte:

  1. erstellen .git/hooks/pre-commit mit folgendem Inhalt:

    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 $? 

Beachten Sie, dass die egrep Ausdruck sehr einfach atm ist, aber man sollte es ändern können, entsprechend Ihren Anforderungen (dh der genaue Inhalt von globalConfig.js) ODER, können Sie Ihre Fragen mit Schnipsel von globalConfig.js aktualisieren :)

  1. Berechtigungen ändern

chmod 755 .git/hooks/pre-commit

  1. Und dann versuchen, eine ungültige globalConfig.js Datei zu begehen. Hier ist, was mein Test zeigte:

☻ 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

Danke für die ausführliche Antwort und Entschuldigung für meine Verzögerung bei der Beantwortung. Ich habe die Fragen mit den Auszügen der Datei 'globalConfig.js' aktualisiert, die ich vor der Übergabe prüfen muss. Ich habe ein paar Fragen: 1. Wird das 'pre-commit'-Skript für alle Dateien ausgeführt, die festgeschrieben werden, oder kann es nur für bestimmte Dateien ausgeführt werden? 2. Ich bin mir nicht sicher, welche Skriptsprache verwendet wird, um das eigentliche Skript zu schreiben, aber es ist nur die Sprache, in die wir den Pre-Commit-Hook schreiben können, oder ich kann auch eine andere Sprache wie Python verwenden. –

+1

1. Wenn Sie 'git diff --cached --name-status' in' git diff --cached --name-status - globalConfig.js ändern, wird der Hook dagegen ausgeführt. 2.Sie können den Haken in Python schreiben. Siehe [dies] (http://stackoverflow.com/questions/3311869/writing-git-hooks-in-python-bash-scripts). –

+0

Danke Ashutosh. Ich werde das Python-Skript ausprobieren. –

Verwandte Themen