Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#4

AW: GIT-Submodul version auslesen

  Alt 22. Mai 2020, 13:18
Leider hilft das auch nicht und ich sehe da garkeinen Unterschied.
Es kommen immernoch die Daten vom übergeordneten Repository raus,
also Revision und Datum, als das Submodule hinzugefügt wurde, anstatt Revision und Datum der letzten Änderung im Submodul.

Code:
@echo off
setlocal EnableDelayedExpansion

REM cd /d %1

set gitdir=
if not exist ".git" goto 1
if exist ".git/config" goto 1
  for /f "delims=" %%x in (.git) do ( set "temp=%%x" & goto 2 )
  :2
  set temp=%temp:/=\%
  if "%temp:~0,8%" == "gitdir: "  if exist "%temp:~8%"  set gitdir=--git-dir=%temp:~8%
:1
echo %gitdir%

echo ##################
git rev-parse --abbrev-ref HEAD
git describe --tags --always --dirty=*
git show -s --format=format:"%%ci"

echo ##################
git %gitdir% rev-parse --abbrev-ref HEAD
git %gitdir% describe --tags --always --dirty=*
git %gitdir% show -s --format=format:"%%ci"

if not "%gitdir%" == "" (
  echo ##################
  echo -- & REM git rev-parse --submodule --abbrev-ref HEAD
  echo -- & REM git describe --submodule --tags --always --dirty=*
  git show --submodule=short -s --format=format:"%%ci"

  echo ##################
  echo -- & REM git %gitdir% rev-parse --submodule --abbrev-ref HEAD
  echo -- & REM git %gitdir% describe --submodule --tags --always --dirty=*
  git %gitdir% show --submodule=short -s --format=format:"%%ci"
)

echo ##################
pause
Neben dem --git-dir stand in der Doku auch ein --work-tree, aber auch wenn ich zusätzlich --work-tree=. anhänge, kommt das Selbe raus.

Vom Hauptverzeichnis des Submodule auf eine drinliegende Datei angewendet, also
-- .svn angehängt, ergibt "not in workingtree"
-- eineda.tei angehängt, ergibt keine Fehlermeldung, aber dafür eine leere Ausgabe (nichts) und für einen allgemeinen Code muss ich dann auch erst eine Datei im Verzeichnis suchen lassen.

Selbst wenn ich erstmal komplett raus springe und beide Pfade explizit angebe, wird die Info des übergeordneten Repository genommen.
cd /d C:\
git --git-dir=D:\RootDir\.git\modules\MySubmodule --work-tree=D:\RootDir\MySubmodule show
Aber wenn ich hier das übergeordnete Repository zerstöre, indem ich das .git-Verzeichnis umbennene, dann funktioniert es.
git --git-dir=D:\RootDir\__.git\modules\MySubmodule --work-tree=D:\RootDir\MySubmodule show
bzw. git --git-dir=..\__.git\modules\MySubmodule ohne vorheriges CD
Nur ich glaub das ist keine super Lösung, falls was schief geht und anschließend das Verzeichnis nicht wieder zurück umbenannt wird.
Oder wenn z.B. Tortoise-Git noch offen ist und das Verzeichnis sich nicht umbenennen lässt.


[Info]
Mit dem DelayedExpansion und SubStrings in der ( ) des FOR gab es Probleme (die Variablen mit ! wurden nicht aufgelöst, wenn ein ~ drin ist, und mit % sind sie nicht delayed),
aber zum Glück gibt es ja noch as gute alte GOTO.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Mai 2020 um 14:13 Uhr)
  Mit Zitat antworten Zitat