GITサブモジュール再訪
3596 ワード
Gitのサブモジュールは、一般に依存関係を管理するための選択肢を提供することに専念している業界全体が存在することを一般的に否定している.
しかし、Gitの中の何かのように、それはしばしばmanページに良いことをして、あなたが望むものをする若干のオプションがあるかどうか、あるいは、彼らが最近改善したかどうか見るために価値があることです.
欲しいもの
それでMetre 私の模範プロジェクトです.一部の顧客がLinuxの古代版を実行するので、一部のサブモジュールがあります.したがって、静的にリンクする必要があります.ああ、楽しい!
しかし、それは、例えばOpenSSLの我々自身のビルドを管理して、出荷することを意味します、そして、それは我々のセキュリティガイ(美しいシープと呼ばれる)の恐ろしい見通しです.それは実際に私もかなり恐ろしいです.
実用的な用語では、我々のリリースサイクルは、すべてのサブモジュール上で安定したブランチに沿って前進することを伴います.これは、できるだけ簡単にする必要があります-本当に、我々が必要として実行することができます単一のコマンド.
しかし、私たちは高い信頼性を持っているので、メトリックの特定のコミットハッシュをチェックすることで、私たちが構築したのと同じ依存関係を与えます.
git submodule addモジュール
最初に、私は行きました
問題は、1つのスリップと依存関係が重大なセキュリティ問題で残されることができたということです.そして、メトリックはすべてのセキュリティになるためのものです.
のプラス側
我々は何か他のものへの切り替えを考慮したが、我々は多くの組み込みのスマートを失うだろう
ああ、見てください-支店!
深く潜る
まず、ある
第二に、私は
私のエディタSkillzを恐れてください
ただし、サブモジュールの設定は
支店更新
サブモジュールを更新するための通常のコマンドは
ワークフロー概要
したがって、ワークフローは次のようになります.
最後に
しかし、Gitの中の何かのように、それはしばしばmanページに良いことをして、あなたが望むものをする若干のオプションがあるかどうか、あるいは、彼らが最近改善したかどうか見るために価値があることです.
欲しいもの
それでMetre 私の模範プロジェクトです.一部の顧客がLinuxの古代版を実行するので、一部のサブモジュールがあります.したがって、静的にリンクする必要があります.ああ、楽しい!
しかし、それは、例えばOpenSSLの我々自身のビルドを管理して、出荷することを意味します、そして、それは我々のセキュリティガイ(美しいシープと呼ばれる)の恐ろしい見通しです.それは実際に私もかなり恐ろしいです.
実用的な用語では、我々のリリースサイクルは、すべてのサブモジュール上で安定したブランチに沿って前進することを伴います.これは、できるだけ簡単にする必要があります-本当に、我々が必要として実行することができます単一のコマンド.
しかし、私たちは高い信頼性を持っているので、メトリックの特定のコミットハッシュをチェックすることで、私たちが構築したのと同じ依存関係を与えます.
git submodule addモジュール
最初に、私は行きました
git submodule
そして、多くのマニュアル作業.私はリードしなかった.サイモンセキュリティガイはこれで満足していなかった.ピート(我々のシニアDevのうちの1つ)は、プロジェクトの完全なチェックをして、それを強調しました.問題は、1つのスリップと依存関係が重大なセキュリティ問題で残されることができたということです.そして、メトリックはすべてのセキュリティになるためのものです.
のプラス側
git submodule
これはサブモジュールのコミットハッシュを追跡しています.そして、git clone --recursive
またはgit submodule update --init --recursive
.我々は何か他のものへの切り替えを考慮したが、我々は多くの組み込みのスマートを失うだろう
git submodule
, そして、それも痛みです.ああ、見てください-支店!
深く潜る
man git-submodule
and man 7 gitsubmodules
, しかし、私は金を見つけました.まず、ある
-b branch
切り替えるgit submodule add
. これは、特定のブランチにサブモジュールを追加し、さらに“追跡ブランチ”を設定します.通常、1つのgitが通常のようにリモート起源ブランチにプルします.第二に、私は
submodule.{submodule name}.branch
, これを格納します.これはあなたが考えるのと同じくらい偉大ではありませんgit config
倉庫のために、それは追跡されません.私のエディタSkillzを恐れてください
ただし、サブモジュールの設定は
.gitmodules
ファイルトップに.それで、あなたはそのファイルを編集することができて、セクションを見つけて、単にAを加えることができますbranch
キー右側:[submodule "deps/spiffing"]
path = deps/spiffing
url = http://github.com/surevine/spiffing
[submodule "deps/openssl"]
path = deps/openssl
url = git://git.openssl.org/openssl.git
branch = OpenSSL_1_1_0-stable
デフォルトはmaster
, しかし、もしそれがすべてあなたが欲しかったなら、あなたはすでにそれを持っている.支店更新
サブモジュールを更新するための通常のコマンドは
git submodule update
. 三つのフラグがあります.--init
を実行するgit submodule init
サブモジュールが既にクローンされていなくても、そうでなければ何もしないのであれば、常に安全です.--recursive
各サブモジュールを再帰して実行し、同じgit submodule update
各コマンド.--remote
はマジックを実行するgit pull
リモート追跡ブランチに沿って.それは、我々が欲しいこれです.ワークフロー概要
したがって、ワークフローは次のようになります.
git clone --recursive [email protected]:surevine/metre
- リポジトリをクローンし、チェックアウトしますHEAD
of master
.git checkout foo
- fooブランチかコミットをチェックし、サブモジュールをfooのコミットに切り替える.git submodule update --init --recursive --remote
- すべてのサブモジュールを再帰的に更新します.Without the --remote
, これは、サブモジュールの作業ディレクトリを“正しい”親のためのコミットをリセットします.最後に
git config submodule.recurse true
- ほとんどのコマンドが再帰的に動作しなければならないということをgitに伝えますgit pull
.Reference
この問題について(GITサブモジュール再訪), 我々は、より多くの情報をここで見つけました https://dev.to/dwd/git-submodules-revisited-1p54テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol