Git-Submodul schlägt beim TFS-Build fehl

8

Wenn ich versuche, unter Verwendung von TFS mit Git zu bauen, gibt es eine Einschränkung, dass der Git-Provider von TFS Untermodule noch nicht unterstützt. Ein bisschen Schmerz, aber was soll's, ich kann TFS anweisen, vor der Kompilierung eine Batch-Datei zu starten. Ich habe dies verwendet, um ein manuelles Git-Skript aufzurufen, um alle meine Submodule in meinem "Super" -Projekt zu aktualisieren.

Der Befehl, den diese Batch-Datei ausführt, ist einfach: git submodule update --init --recursive

Das hat gut funktioniert, bevor ich die Submodul-Quelle nach TFS migriert habe, aber jetzt schlägt der TFS-Build fehl, weil das obige Git-Modul-Skript nicht mehr funktioniert.

Also, was TFS vor einem Build tut, zieht die aktuellen Quellen von Git in einen Ordner auf dem Build-Server, auf den ich zugreifen kann.

Wenn ich Git Bash zu diesem Ordner öffne und den folgenden Befehl (die folgenden Befehle) ausführen: git submodul init git submodule update

Ich bekomme den folgenden Fehler, und ich kann nicht für das Leben von mir trainieren, was es ist. Ich habe versucht, diesen spezifischen Fehler zu suchen, der im Allgemeinen darauf hinweist, dass ein Submodul-Commit geschoben wird, nachdem das "Superprojekt" Repo geschoben wurde. Aber ich kann überprüfen, dass alle Submodul commits & amp; Pushs werden vor dem "Super Project" Commit & amp; Push ist getan. Hier ist die Ausgabe der TFS-Git-Befehle:

%Vor%     
abbottdev 08.10.2013, 11:10
quelle

2 Antworten

4

Nach einigen Versuchen habe ich ein ähnliches Problem behoben: Es stellte sich heraus, dass dies ein Problem mit dem TFS-PowerShell-Skript war, das ohne Benutzerprofil ausgeführt wurde. Daher konnte GIT die Einstellung für den Cache für Anmeldeinformationen nicht sehen der Build-Benutzer (zB wie in C:\Users\theuser\.gitconfig eingestellt).

Batch-Skripts würden unter dem gleichen Problem leiden.

Das besondere Verhalten war, dass die git submodule -Aufrufe vollständig hängen bleiben würden und das GIT-Repository in einen sehr seltsamen Zustand versetzt würde (wie durch die not a tree -Fehler oben bemerkt).

Das hängt davon ab, dass GIT nach dem Benutzernamen und dem Passwort fragt, aber dies ist eine nicht-interaktive Sitzung, so dass alles zum Stillstand kommt.

Mit wincred als Credential Cache konnte ich folgendes beheben:

  1. Anmeldung am Build-Rechner als Build-Benutzer.
  2. Zugriff auf den GIT-Server über die Befehlszeile und Eingabe der erforderlichen Anmeldeinformationen.
  3. Windows-Anmeldeinformations-Manager geöffnet und überprüft, dass die zwischengespeicherten Anmeldeinformationen im Abschnitt Generische Anmeldeinformationen sichtbar sind.
  4. In der Eingabeaufforderung mit erhöhten Rechten wurde GIT gezwungen, standardmäßig wincred zu verwenden, auch wenn keine Benutzerkonfigurationsdatei vorhanden ist: git config --system credential.helper wincred
  5. Erneute Ausführung von TFS: was funktioniert.
Paul Annetts 08.12.2014 17:25
quelle
0

Der Grund ist, dass 'Git Bash' die Anmeldeinformationen des Erstellungsaccounts nicht kennt und jedes Mal interaktiv nach ihnen gefragt werden sollte. Wenn das Build-Konto Zugriff auf alle Remote-Repos des Submoduls hat, müssen Sie lediglich einen leeren Benutzernamen und ein Kennwort für die Eingabeaufforderung angeben. Dies ist in Windows nicht einfach, da der Anmeldeinformationen-Manager keinen leeren Benutzernamen akzeptiert.

Eine Möglichkeit, das Problem zu umgehen, ist es, die URL des Submoduls auf eine der folgenden Arten zu ändern. Das '@' Symbol ist das Gleiche wie die Eingabe eines leeren Benutzernamens und Passwortes.

%Vor%     
Qi Luo 23.04.2015 06:50
quelle

Tags und Links