aktualisieren
Es gibt jetzt eine Möglichkeit, dies in TortoiseGit zu tun, die die andere Antwort abdeckt; alter Skriptansatz, der für Automatisierungsskripte unten nützlich sein kann.
Old bearbeitet
Es gibt keine aktuelle Art und Weise ist dies in TortoiseGit zu tun, obwohl ich den Autor gefunden habe gute Ideen sehr anspricht, wenn man sich als klares Feature Requests einreichen. Hier ist, wie ich mit diesem Problem fertig werden:
In jedem neuen Projekt mit Submodule, ich Dump die folgenden zwei Skripte in die root:
gitsetup.sh
#!/bin/bash
# git built-in
echo "Setting up submodules"
git submodule update --init
echo "Setting up submodules for TortoiseGit/Putty"
# 1) Find the puttykeyfile line, like
# puttykeyfile = C:\\Users...\\.ssh\\PuTTY.ppk
#
# in .git/config
# pass to sed to double-escape all backslashes (Windows problem) - that way
# it doesn't become an issue when we use it in sed
puttyline="$(grep puttykeyfile .git/config | sed 's/\\/\\\\/g')"
# 2) Search for .git/modules/*/config
files=$(find .git/modules -type f -name config)
# 3) Find [remote "origin"]
# 4) Insert line (entire puttykeyfile line we picked up earlier)
echo 'Inserting missing TortoiseGit .ppk into submodules:'
for file in $files
do
# -q says don't print the grep results, just return 0 or 1
if grep -q putty $file
then
# I have no idea how to just say if not grep, so screw it here's an empty then
/dev/null
else
echo $file
# -i means overwrite the file rather than printing the result to
# stdout
sed -i "s/\(\[remote .origin.\]\)/\1\n$puttyline/" $file
fi
done
gitpullall.sh
#!/bin/bash -v
git pull --recurse-submodules
git submodule update --recursive
oder wenn Sie lieber HEAD auf Ihre Submodule holen, nicht das Commit der Eltern Repo wurde eingecheckt mit:
gitpullallhead.sh:
git submodule foreach git pull origin master
Hier ist, was sie tun:
Wenn jemand anderes Projekt zieht über TortoiseGit nach unten, wird sie schlimmer als alle Submodule zu ziehen, um - sie werden nicht sogar diese Submodule konfiguriert haben. Schlimmer, wenn sie versuchten, sie einzurichten:
- TortoiseGit wird nur in die Quere kommen - es hat noch nicht wirklich etwas mit diesem Problem zu bewältigen.
- Sie verwenden die Befehlszeile, die jedes Submodul auf seinen Repo zeigt, aber es nicht mit Ihrem Tortoise/PuTTY-Schlüssel verknüpft, wie es ein normaler Pull tun würde.
Also, wenn sie nur gitsetup.sh laufen, sorgt er dafür, all das - es setzt jedes Submodul auf, zieht es und sogar fügt die speziellen .ppk (PuTTY key) Config in jeder Einstellung. Funktioniert in jedem Projekt - keine Notwendigkeit, es jedes Mal zu optimieren.
gitpullall.sh macht genau das, was Sie denken, es geht und holt alles.
Also, nicht unbedingt eine TortoiseGit-Lösung (die es nicht gibt), aber immer noch bequem genug.
Wie wahrscheinlich durch die Kommentare in diesen Skripten belegt wird, bin ich kein Bash-Profi und habe sie eindeutig zusammengehackt. Ich begrüße Verbesserungsvorschläge, besonders an den offensichtlichsten Orten. Aber ich versichere Ihnen, dass sie nicht nur arbeiten, sondern über mehrere unserer Projekte mit zahlreichen Submodulen arbeiten, die auf verschiedenen Verzeichnisebenen gespeichert sind.
Alte Antwort:
Etwas wie:
for module in a b c d; do cd $module; git pull; cd..; done
Fragen Sie nach automatischen 'Aktualisieren' oder automatischen 'Ziehen' von Submodulen? – fantastory