私はgitリポジトリを維持するためにTortoiseGitを使用しています。私たちは、それぞれに複数のサブモジュールを持つ1つのレポを持っています。すべて正常に動作しますが、メインリポジトリを取得しようとすると、サブモジュールは更新されません。私はすべてのサブモジュールを一つずつ引っ張っていかなければなりません。TortoiseGitでgitサブモジュールを引き出す
メニューからプルコマンドを1つだけ使用して、すべてのサブモジュールの変更をリポジトリに更新するオプションはありますか?
私はgitリポジトリを維持するためにTortoiseGitを使用しています。私たちは、それぞれに複数のサブモジュールを持つ1つのレポを持っています。すべて正常に動作しますが、メインリポジトリを取得しようとすると、サブモジュールは更新されません。私はすべてのサブモジュールを一つずつ引っ張っていかなければなりません。TortoiseGitでgitサブモジュールを引き出す
メニューからプルコマンドを1つだけ使用して、すべてのサブモジュールの変更をリポジトリに更新するオプションはありますか?
他の答えがカバーTortoiseGit、でこれを行う方法が用意されました。以下の自動化スクリプトに役立つ古いスクリプトアプローチ。
私はあなたが明確な機能のリクエストとしてそれらを送信する場合、著者は良いアイデアに非常に敏感であることがわかりましたが、TortoiseGitでこれを行うには、現在の方法は、ありません。ここで私は、この問題に対処する方法は次のとおりです。
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
:サブモジュールを持つすべての新しいプロジェクトでは
、私はルートに次の2つのスクリプトをダンプ
、またはサブモジュールでHEADを取得したい場合は、コミットではなく、親レポがチェックインされている:
gitpullallhead.sh:
git submodule foreach git pull origin master
はここで、彼らが何をすべきかです:他の誰かがTortoiseGitを経由して、プロジェクトをプルダウンすると
は、彼らがすべてのサブモジュールを引っ張っする必要がより悪化しなければならないだろう - 彼らはしませんそれらのサブモジュールを構成することさえできます。さらに悪いことに、それらを設定しようとした場合:
gitsetup.shを実行するだけで、各サブモジュールが設定され、プルされ、さらに特別な.ppk(PuTTYキー)設定が各サブセットに挿入されます。どのプロジェクトでも動作します - 毎回それを微調整する必要はありません。
gitpullall.shはあなたの考えをちょうど通り、すべてを取り出します。
TortoiseGitソリューション(これは存在しない)ですが、それでも十分便利です。
これらのスクリプトのコメントからもわかるように、私はBashの専門家ではなく、明らかにそれらを一緒にハッキングしています。私は特に最も明白な場所で改善の提案を歓迎します。しかし、私たちは、彼らが働くだけでなく、いくつかのディレクトリレベルで保存された多数のサブモジュールを持ついくつかのプロジェクト全体で働くことを保証します。
旧答え:のような
何か:
for module in a b c d; do cd $module; git pull; cd..; done
この回答はgit shell/CMDには正しいですが、私はOPがTortoiseで特に質問していると信じています(私も興味があります) –
(gitの1.8.2以降)
gitが
gitのサブモジュールの更新--mergeを引っ張ります - -remote
タスクを実行するためのTortoiseGitの対応画面を以下に示します。
はい、うまくいきました。ありがとう。 – Snoopy
私自身の参照、コミット、無視、プッシュ –
私もちょうどサブモジュールだったフォルダを右クリックして、そのフォルダに通常のGitのプルを行うことができました。
これはサブモジュールを引っ張ってしまったので、上記の(単なるサブミットの)答えよりもやや簡単です。
オートアップデートや自動引き上げサブモジュールについて聞かれますか? – fantastory