Update
Существует в настоящее время способ сделать это в TortoiseGit, которая покрывает другой ответ; старый сценарий, который может быть полезен для сценариев автоматизации ниже.
Старый Редактировать
Там в настоящее время нет способа сделать это в TortoiseGit, хотя я нашел автор очень отзывчив на хорошие идеи, если вы представить их как четкие пожелания. Вот как я справиться с этой проблемой:
В каждом новом проекте с подмодулями, я свалка следующих 2 скрипта в корень:
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
или если вы предпочитаете забирать HEAD на своих подмодулях, а не фиксацию родительского репо, с помощью:
gitpullallhead.sh:
git submodule foreach git pull origin master
Вот что они делают:
Когда кто-то тянет ваш проект вниз через TortoiseGit, они будут иметь хуже, чем необходимости тянуть все подмодули - они не будут даже настроены эти подмодули. Хуже того, если они попытались настроить их:
- TortoiseGit только собирается встать на пути - на самом деле у него нет ничего, чтобы справиться с этой проблемой.
- Они будут использовать командную строку, которая будет указывать каждый подмодуль на своем репо, но не связывать его с вашим ключом Tortoise/PuTTY, как обычный Pull.
Так что, если они просто запустить gitsetup.sh, он берет на себя все, что - он устанавливает каждый подмодуль, тянет его, и даже вставляет специальный .ppk (ключ PuTTY) конфигурации установки в каждом из них. Работает в любом проекте - нет необходимости настраивать его каждый раз.
gitpullall.sh делает только то, что вы думаете, оно идет и извлекает все.
Итак, не строго решение TortoiseGit (которого не существует), но все же достаточно удобно.
Как видно из комментариев в этих сценариях, я не профессионал Bash и явно взломал их вместе. Я приветствую предложения по улучшению, особенно в самых очевидных местах. Но я заверяю вас, что они не только работают, но и работают над несколькими нашими проектами с множеством подмодулей, хранящихся на нескольких уровнях каталогов.
Старый ответ:
Что-то вроде:
for module in a b c d; do cd $module; git pull; cd..; done
Вы спрашиваете об автоматическом «обновлении» или автоматическом «вытягивании» подмодулей? – fantastory