2016-09-16 4 views
7

Gibt es einen automatisierten Weg, um zu überprüfen, ob alle Commits in einem Git Repo in einem kompilierbaren Zustand sind?Überprüfen Sie, ob alle Git-Commits eines C# -Projekts nach dem Neuschreiben des Verlaufs kompiliert werden

Ich brauche dies zu überprüfen, ich habe nichts nach dem Umschreiben der Geschichte gebrochen. Da ich den Verlauf neu schreibe, schließt dies einen Build-Server aus - ein Commit, das zum Zeitpunkt des Commits funktioniert hat, könnte nach dem Neuschreiben des Verlaufs beschädigt sein.

Zum Beispiel habe ich einen Visual Studio 2015 C# -Projekt, und ich einige Skript vorstellen, wie:

git filter-branch --tree-filter msbuild 

ich es will einen Build läuft auf jedem Commit, und mit einer Fehlermeldung beendet, wenn der Build-Prozess gibt nicht null zurück.

+0

warum Sie nicht über eine Skriptdatei erstellen, die kompiliert und wenn dann nur muss einen Befehl wie './compile.sh' übergeben? – pedrorijo91

+0

Related: http://StackOverflow.com/A/26985189/1615903 – 1615903

Antwort

5

den Baum-Filter Betrachtet man den Befehl von einem Git Bash ausführen, könnten Sie

git filter-branch --tree-filter "MSBuild.exe" 

(sicherstellen, dass Ihre %PATH% enthält c:\Program Files (x86)\MSBuild\14.0\Bin)
(oder use forward slash as in here)

verwenden möchten, wäre gleichermaßen gültig für die other option genannten in the comments

git rebase -i --exec MSBuild.exe <first sha you want to test>~ 

können Sie ein CMD session similar to this gist, von Tim Abell verwenden:

@echo off 
REM batch script for loading git-bash and the vs tools in the same window 
REM inspiration: http://www.drrandom.org/post/2011/11/16/Grappling-with-multiple-remotes-in-git-tfs.aspx 
REM screenshot: https://twitter.com/#!/tim_abell/status/199474387731226624/photo/1 
%HOMEDRIVE% 
cd %HOMEPATH% 
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 
echo Use full exe names when running under bash, e.g. "msbuild.exe" 
echo Loading bash, you may now use git and msbuild in the same console \o/. 
"C:\Program Files (x86)\Git\bin\sh.exe" --login -i 
2

Angenommen, Sie alle historischen Commits im Repo prüfen, nicht die Zukunft verpflichtet:

Sie git bisect das tun können:

git bisect start 
git bisect bad # Mark the current HEAD as bad 
git bisect good <the first commit> 

Sie dann ein Skript benötigen, die msbuild läuft, gibt 1 für Buildfehler und 125 für erfolgreichen Build zurück. Das liegt daran, dass wir keinen Build als "gut" markieren können, da wir nicht wissen, ob die Commits vor diesem auch funktionieren, also überspringen wir stattdessen diejenigen, die funktionieren.

Dann starten Sie mit dem Befehl run Halbierungs:

git bisect run myscript 

Dies wird dann beginnen Lauf baut (in einer nicht-konsekutiven Reihenfolge), bis er ein gebrochenes Build findet, und stoppt. Weitere Informationen finden Sie unter https://git-scm.com/docs/git-bisect#_bisect_run.

+0

Ich möchte es auf jedem einzelnen Commit ausführen, nachdem ich Geschichte neu geschrieben habe. Von dem, was ich von der Git-Halbierung weiß, wird es eine Binsearch durchführen, anstatt jedes einzelne Commit zu durchlaufen. Es ist mehr für einen bestimmten Fehler und ich bin mir nicht sicher, wie es für meine Frage relevant ist. Jedenfalls habe ich meine Frage bearbeitet, um den Teil über das Umschreiben von Geschichte hinzuzufügen. – sashoalm

+0

@ashoalm Ich sehe, ich habe ein paar Teile der Frage übersehen. Ich habe die Antwort etwas modifiziert - es führt die Builds nicht in chronologischer Reihenfolge aus, aber ansonsten scheint es Ihren Anforderungen zu entsprechen. – 1615903

2

Was ist (getestet auf Git Bash und Git Posh):

  1. Erstellen git alias für msbuild Befehl:

    git config --global --add alias.msbuild "!c:\path\to\msbuild.exe"

Wenn der Pfad "msbuild.exe" in PATH env. var, Sie können einfach "! msbuild" anstelle eines vollständigen Pfades schreiben.

  1. Dann den Befehl ausführen:

    git filter-branch --tree-filter "git msbuild"

Verwandte Themen