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.