AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

GIT-Submodul version auslesen

Ein Thema von himitsu · begonnen am 23. Apr 2020 · letzter Beitrag vom 10. Jun 2020
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#1

AW: GIT-Submodul version auslesen

  Alt 25. Mai 2020, 20:00
Ich liebe Git! Es ist halt so ein einfaches Versionskontrollsystem eine einfache Objektablage. Die wunderbar lesbare Git-Dokumentation hat die Antwort: git-observe-ref mit dem Parameter --seduce-path ist dein Freund!

Okay, Scherz beiseite. It's funny because it's true, wie der gemeine Amerikaner sagt.

Das in NT-Skript/Batch zu machen halte ich jedoch ernsthaft für einen Fehler. Git for Windows liefert Bash mit und das kann und sollte man auch nutzen. Dort hättest du auch noch sed und awk, sowie die eingebaute Parameter Expansion zur Verfügung.

Das was du willst geht mit -C <Verzeichnis>, meine ich (habe es soeben mal mit git -C submod_dir show -s --format=format:"%ci" getestet, getestet auf Version: git version 2.26.2.windows.1). Es sei denn ich habe nicht begriffen was du eigentlich willst.

Ich vermute mal ganz stark, daß du über einen Defekt gestolpert bist, denn im Grunde muß ja der Pfad bei Angabe von --git-dir "berechnet" werden. Also mal lieber melden wenn das reproduzierbar ist. Das kann schonmal schiefgehen. Ohnehin habe ich Submodule bisher in noch keinem VCS zufriedenstellend gelöst gesehen. Mit -C machst du das gleiche wie bei tar -C, also einen Wechsel ins angegebene Verzeichnis (change directory).

Außer beim Erstellen eines Repository (wo es eine externe git.exe haben will), nutzt Tortoise eine eigene LibGit2-DLL und (meistens) nicht die Consolenversion.
Eben. Und so machen es auch die ganzen IDEs. Und nebenbei werden noch allerlei redundante, rätselhafte und bescheuerte Konzepte hilfreich für den Benutzer ausgeblendet, so daß die wenigsten Nutzer wirklich Git benutzen, sondern vor allem ein Git-Repo mit einer halbwegs nutzbaren UI. Ja ja, der Siegeszug von "Git" ...

Und da die Linuxjünger doch ALLES nur mit Console machen, sollten dort doch auch sämptliche Funktionen verfügbar sein.
In den - ungelogen - knapp 150 Git-Befehlen (146 auf Ubuntu 20.04, ermittelt mit find /usr/share/man -type f -name 'git-*' |wc -l) findet sich garantiert was, gell? Zusammen mit den zwei Dutzend Optionen pro Befehl kann man das auch mal flott auswendig lernen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)

Geändert von Assarbad (25. Mai 2020 um 20:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GIT-Submodul version auslesen

  Alt 26. Mai 2020, 08:54
ohh man, SVN ist da aber viel einfacher und besser

Wer hat denn Zeit für Bash? bin ja noch ausgelastet überlastet PowerShell zu lernen.


Das Ding liegt auf Github
und ich glaub das wurde normal mit git submodules add erstellt.

rootdir/.gitmodules hat mehrere solche Einträge
Code:
[submodule "SMODUL"]
   path = SMODUL
   url = git@github.com:meine/smodul.git
zusätzlich sind im Hauptrepo jeweils diese Verzeichnisse (die schon da, selbst wenn man das Rekursive beim Clone vergessen hat)
rootdir/SMODUL/

im rootdir/SMODUL/.git steht nur gitdir: ../.git/modules/SMODUL drin.

die Dateien aus dem eigentlichen .git-Verzeichnis liegen
unter rootdir/.git/modules/SMODUL

und ich hatte nur versucht von rootdir/SMODUL die Infos zu bekommen.



Nja, mal sehn was ich da aus der zu großen Doku zusammenbekomm.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Mai 2020 um 09:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.813 Beiträge
 
Delphi 12 Athens
 
#3

AW: GIT-Submodul version auslesen

  Alt 26. Mai 2020, 09:33
PowerShell ist doch gerade auf dem Weg das zeitliche zu segnen, sei Avantgardist und lerne bash, das in Windows 10 bereits da ist, und immer mehr Unterstützung erfahren wird.

Außerdem soll es doch ein Qualitätsmerkmal eines guten Entwicklers sein, auf 100 Hochzeiten zu tanzen...sagt man mir immer wieder, dann nicke ich weise und mach weiter nur meine zwei bis drei Hochzeiten auf Delphi/Win und Python/Linux.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: GIT-Submodul version auslesen

  Alt 26. Mai 2020, 19:30
PowerShell ist doch gerade auf dem Weg das zeitliche zu segnen, sei Avantgardist und lerne bash [...]
Habe ich die Ironie in deinem Beitrag nicht erkannt oder meinst du das ernst? Falls ja, könntest du das, ggf. in einem anderen Thread, erläutern und auch mit vertrauenswürdigen Quellen belegen?

Mir scheint es eher so, dass Microsoft alles auf PowerShell auslegt, zudem aber immer mehr Unterstützung für andere Betriebssysteme bieten will. Siehe .NET Core und PowerShell 6 bzw. PowerShell 7.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.813 Beiträge
 
Delphi 12 Athens
 
#5

AW: GIT-Submodul version auslesen

  Alt 27. Mai 2020, 14:37
PowerShell ist doch gerade auf dem Weg das zeitliche zu segnen, sei Avantgardist und lerne bash [...]
Habe ich die Ironie in deinem Beitrag nicht erkannt oder meinst du das ernst? Falls ja, könntest du das, ggf. in einem anderen Thread, erläutern und auch mit vertrauenswürdigen Quellen belegen?

Mir scheint es eher so, dass Microsoft alles auf PowerShell auslegt, zudem aber immer mehr Unterstützung für andere Betriebssysteme bieten will. Siehe .NET Core und PowerShell 6 bzw. PowerShell 7.
@Aviator: Ironie
Aber irgendwann könnte bash zumindest gleichziehen und dann ist man plötzlich auf zwei Welten zu Hause. Kann ich jedem bisher reinem Windowser nur empfehlen.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GIT-Submodul version auslesen

  Alt 28. Mai 2020, 13:11
So, ich hab mir nun erstmal paar Test-Subbranches erstellt.
Und das eigentliche (kaputte) Repository wurde heute nochmal neu aufgebaut. (SVN Develop-Branch jetzt readonly und abschließend neue Übernahme aus SVN nach GIT)

Im Grunde gibt es jetzt nur noch ein "Problemchen" mit git rev-parse --abbrev-ref HEAD , nach einem git checkout ohne -b .
Nach einem Switch/Checkout eines Branches ohne einen lokalen Branch anzulegen.

Jetzt kann ich dann mal anfangen das Batch/Bash-Script zu überarbeiten.
Und im Notfall muss ich mir eben den Wert aus der passenden Zeile im git submodules | find %branch% rausparsen.

Code:
Test-SubRepository                                       aus "git submodule"                    was ist es             aus "git rev-parse/describe/show" .......
"

master, aktuell                                          32206ec heads/master                   origin/master          master           32206ec 2020-05-28 11:07:25
master, aktuell mit Änderung im Stash                    32206ec heads/master                   origin/master          master           32206ec 2020-05-28 11:07:25
master, aktuell mit Änderung ohne Commit                 32206ec heads/master                   origin/master **       master           32206ec* 2020-05-28 11:07:25
master, alter Stand, kein Pull und Fetch                 827c575 heads/master                   origin/master          master           827c575 2020-05-28 10:47:50
master, aktuell mit Änderung als Commit                  9ebdf83 heads/master                   origin/master          master           9ebdf83 2020-05-28 11:13:16
master, aktuell mit Änderung als Commit in neuem Branch  1f61fb5 heads/dev/neuer_branch         dev/neuer_branch       dev/neuer_branch 1f61fb5 2020-05-28 11:15:22

master, alter Revision - Reset Soft                     +827c575 heads/master                   origin/master          master           827c575* 2020-05-28 10:47:50
master, alter Revision - Reset Mixed                    +827c575 heads/master                   origin/master          master           827c575* 2020-05-28 10:47:50
master, alter Revision - Reset Hard                     +827c575 heads/master                   origin/master          master           827c575 2020-05-28 10:47:50

branch, checkout                                         8b98ef9 remotes/origin/dev/testbranch  origin/dev/testbranch  HEAD             8b98ef9 2020-05-27 17:41:44
branch, checkout (Switch nach Commit im Master)         +8b98ef9 remotes/origin/dev/testbranch  origin/dev/testbranch  HEAD             8b98ef9 2020-05-27 17:41:44
branch, checkout -b (als neuer Branch)                   8b98ef9 heads/dev/testbranch           dev/testbranch         dev/testbranch   8b98ef9 2020-05-27 17:41:44
[edit]
Alles Einzel-Clone, nicht als SubModul verpackt, da kommt das fast gleiche raus. (MyRepo.ohneSub.zip)
* bei den beiden Checkouts ohne -b nur "HEAD"
* und beim "master, alter Stand, kein Pull und Fetch" liefert git describe keinen Hash/Version, obwohl es ja eigentlich das "Selbe" ist, wie "master, aktuell", aber vermutlich nur ein Fehler durch mich
Angehängte Dateien
Dateityp: zip MyTestRepos.zip (449,5 KB, 2x aufgerufen)
Dateityp: zip MyRepo.ohneSub.zip (372,9 KB, 0x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (28. Mai 2020 um 15:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GIT-Submodul version auslesen

  Alt 29. Mai 2020, 16:07
Moin,

im Batch-Script (git-info.cmd) sieht es so aus
Code:
chcp 1252
bash git-info.sh %1
und im Bash-Script (git-info.sh) kommt sowas vor
Code:
gitdir=$1
if [ -n "$gitdir" ]; then gitdir="$(cygpath -u "$gitdir")"; fi
cd "$gitdir"
Nun wird aber bei einem Ümlaut im Pfad gemeckert
Code:
S:\MyRepo\git-info.sh: line 12: cd: $'"S:/MyRepo//master, aktuell mit &#9633;\204nderung im Stash"': No such file or directory
Also entweder stimmt irgendwo die Codierung nicht (UTF-8/ANSI)
oder cygpath mag mich micht.


Ach ja, im Großen und Ganzen läuft es und auch wenn ich "aktuell" mit Umlauten nicht in Berührung komme,
wie könnte ich das Problemchen dennoch lösen?


Code:
#!/bin/bash

##### Input :: bash git-info.sh DIR DEST [|branch|version|log]
gitdir=$1
dest=$2
mode=$3
if [ -n "$gitdir" ]; then gitdir="$(cygpath -u "$gitdir")"; fi
if [ -n "$dest" ];  then dest="$(cygpath -u "$dest")"; fi

## hier oder angegebenen Verzeichnis
if [ -n "$gitdir" ]; then
  cd "$gitdir"
fi

if [ "$mode" == "log" ]; then
  # Branch-References # Autor, Relative, CommitDate # Subject ## Message-Body
  ## HEAD -> master, origin/master, origin/HEAD
  ## geo, 3 days ago, 2020-04-17 22:46:58 +0200
  ## Formular 'DBSQL-Stataments durchsuchen' anpassungen (#194)
  ## ...
  result=$(git show -s --format=format:"%D %n%an, %ar, %ci %n%s %n%n%b" | sed "s#\\n#\\r\\n#g")
else
  ##### Behandlung für Submodul wenn Branch nicht "richtig" auslesbar (z.B. wenn GIT SHOW nur "HEAD" ausgibt)
  if [ -f ".git" ] && [ -d "../.git" ]; then
    dirname=${gitdir##*/}
    dirname=${dirname#(/[(]}
    dirname=${dirname#)/[)]}
    branch=$(git -C .. submodule | grep ".[0-9a-f]+ $dirname \\(.*\\)$")
  fi

  ##### Branch, Version, CommitDatum und CommitLog
  if [ -z "$branch" ]; then branch=$(git show -s --pretty=format:"%D"); fi
  version=$(git describe --tags --always "--dirty=*")
  cdate=$(git show -s --format=format:"%ci")

  ##### Formate konvertieren
  ## BranchName exrahieren :: xxx | aaa -> xxx | aaa -> xxx, yyy, zzz ==> xxx
  ## Hash und Version+Offset trennen :: vvv-i-gxxxxxxxx ==> yyy+i xxxxxxxx
  ## Datum lesbarer :: 2019-11-05T09:27:17+01:00 ==> 2019-11-05 09:27
  branch=$(echo "$branch" | awk '{ print gensub(".* ?-> ?", "", "g") }')
  branch=$(echo "$branch" | awk '{ print gensub("^HEAD, ?", "", "g") }')
  branch=$(echo "$branch" | awk '{ print gensub(" ?,.*$", "\\1", "g") }')
  version=$(echo "$version" | awk '{ print gensub("-([0-9]+)-g([0-9a-f]{8})", "+\\1 \\2", "g") }')
  cdate=$(echo "$cdate" | awk '{ print gensub("([0-9]{4}-[0-9]{2}-[0-9]{2})[T ]([0-9]{2}:[0-9]{2}):[0-9]{2}([ ]?[+-][0-9]{2}:?[0-9]{2})?", "\\1 \\2", "g") }')

  ##### Zusatzinfo über geänderte oder neue Dateien (nicht commited)
  #if [ $(git diff --stat) != '' ]; then dirty="*"; fi  # modified files exists
  #if [ -z $(git status -s) ]; then dirty="**"; fi      # modified or untracked files exists

  ##### Ausgabe
  if [ "$mode" == "branch" ]; then
    result="$branch"
  elif [ "$mode" == "version" ]; then
    if [[ "$version" =~ "+" ]]; then
      # 19.10.02+37 7c8c3e76*
      result="$version"
    else
      # 7c8c3e76* 2019-11-05 09:27 
      result="$version $cdate"
    fi
  else
    # master 7c8c3e76 2019-11-05 09:27                 (ohne Version-Tag)
    # master 19.10.02+37 7c8c3e76* 2019-11-05 09:27    (Version-Tag vorhanden)
    result="$branch $version $cdate"
  fi
fi

#clear
echo $result
if [ -n "$dest" ]; then
  echo -n "$result" > $dest
fi
Bash kann einem aber schon ein bissl abschrecken und für alles gibt es tausende Wege, wo man die Vorschläge/Tutorials im Internet oft nur schwer versteht.
Und die Hilfe kann einen auch manchmal erschrecken, so dass man gleich wegrennen will.
Zitat:
Bash supports a surprising number of string manipulation operations. Unfortunately, these tools lack a unified focus. Some are a subset of parameter substitution, and others fall under the functionality of the UNIX expr command. This results in inconsistent command syntax and overlap of functionality, not to mention confusion.
aus https://www.tldp.org/LDP/abs/html/st...ipulation.html
Klingt schon ein bisschen nach: bash ist bissl davon und ein bissl davon, aber von nichts was richtiges.
Ich will jetzt aber kein bashing betreiben.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Mai 2020 um 16:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: GIT-Submodul version auslesen

  Alt 26. Mai 2020, 10:18
Nja, mal sehn was ich da aus der zu großen Doku zusammenbekomm.
Wie, hat -C für dich nicht funktioniert? Das wäre ungewöhnlich. Dann würde ich an deiner Stelle nochmal ein frisches Git for Windows drüberbügeln. Da scheint ja dann mehr im Argen zu liegen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GIT-Submodul version auslesen

  Alt 26. Mai 2020, 10:55
Mit einem git -C S:\rootdir\SMODUL show ... , da hat sich nicht geändert.


Ansonsten war ich ja anfangs davon ausgegangen, dass bei den Befehlen/Parametern für GIT es zwischen Batch/Windows und Bash/Linux keine Unterschiede,
außer den Pfaden

Bei einem anderen -C vom Wochenende, da gab es ja auch keine großen Unterschiede.
Code:
ssh-keygen -q -N "" -f "%USERPROFILE%\.ssh\id_rsa"
bzw.
ssh-keygen -q -N "" -f "C:\Users\%USERNAME%\.ssh\id_rsa"

"C:\Program Files\Git\bin\sh" -c 'ssh-keygen -q -N "" -f "/c/Users/%USERNAME%/.ssh/id_rsa"'
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: GIT-Submodul version auslesen

  Alt 26. Mai 2020, 11:06
Mit einem git -C S:\rootdir\SMODUL show ... , da hat sich nicht geändert.
Sehr seltsam. Laufwerk S: ist lokal oder bspw. eine eingebundene Netzwerkfreigabe?

Ansonsten war ich ja anfangs davon ausgegangen, dass bei den Befehlen/Parametern für GIT es zwischen Batch/Windows und Bash/Linux keine Unterschiede,
außer den Pfaden
Jupp, und die kannste mit cygpath hin- und herkonvertieren.

Bei einem anderen -C vom Wochenende, da gab es ja auch keine großen Unterschiede.
Code:
ssh-keygen -q -N "" -f "%USERPROFILE%\.ssh\id_rsa"
bzw.
ssh-keygen -q -N "" -f "C:\Users\%USERNAME%\.ssh\id_rsa"

"C:\Program Files\Git\bin\sh" -c 'ssh-keygen -q -N "" -f "/c/Users/%USERNAME%/.ssh/id_rsa"'
Da fehlt mir jetzt irgendwie der Zusammenhang?! Das ist ja schon ein Unterschied ob ich ein kleines -c an die Bourne Shell (oder meinetwegen Bash) reiche oder an Git selber?!

Also, folgende Themen sollten wir erstmal abklären: du benutzt Git von der offiziellen Git-Seite oder du benutzt Git for Windows von gitforwindows.org? Und dann die obige Frage mit S:.

Kannst du das Ganze bitte einmal in der Bash for Git durchexerzieren?! Also ob das einen Unterschied zu cmd.exe macht? Beim Installieren hat man übrigens die Auswahl ob man den Git-Wrapper auch für cmd.exe usw. aktivieren will oder ausschließlich von Bash aus nutzt.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)

Geändert von Assarbad (26. Mai 2020 um 11:35 Uhr) Grund: Wegen Corona
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz