web-dev-qa-db-ja.com

Gitサブモジュールを常に最新の状態に保つ

Gitサブモジュールが大好きです。また、私はgitサブモジュールが嫌いです。私がそれらについて気に入っているのは、依存関係などをきれいに区分できることです。レポジトリの特定のコミットを指すようにするという意味があります。しかし、私の場合は、別のプロジェクトで使用されるライブラリを構築しているので、その別個のリポジトリに保管したいと思います。

ただし、このライブラリで日々作業をしているときに迷惑がかかり、ポインタの更新をコミットするためにライブラリを使用してアプリに常に切り替える必要があります。

だから、私がこのライブラリに絶えず更新して追加している間、gitサブモジュールを常にそれが指しているレポの頭に置くことは可能ですか?

53
Ben

いいえ、これは仕様です。サブモジュールを他のリポジトリの「現在のヘッド」にポイントする方法があった場合、メインリポジトリから履歴バージョン(タグ付きバージョンなど)を取得することはできません。サブモジュールのどのバージョンをチェックアウトするのかわかりません。

そうは言っても、 git subtree スクリプトに興味があるかもしれません。これにより、ワークフローとより互換性のあるサブモジュールを操作する別の方法が提供されます。最近の HNの投稿 でこれを思い出しました。

26
Greg Hewgill

git submodule tracking latest 」で述べたように、git 1.8.2(2013年3月)以降、ブランチのHEAD

git submodule add -b <branch> <repository> [<path>]

サブモジュールSHA1は、gitlinkインデックスの特別なエントリ =)

しかし、git submodule update --remoteは、サブモジュールリモートリポジトリのブランチのHEADと一致するSHA1へのエントリを更新します。

既存のサブモジュールがある場合は、 ブランチに従うようにできます

cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>

cd path/to/your/submodule
git checkout -b branch --track Origin/branch
  # if the master branch already exist:
  git branch -u Origin/master master

cd /path/to/your/parent/repo
git add path/to/your/submodule
git commit -m "Make submodule tracking a branch"
41
VonC

サブモジュールディレクトリ内で変更を行わないのはなぜですか?サブモジュールディレクトリ自体はgitリポジトリです?このようにして、アプリは常にライブラリを更新します。

警告:

  1. (アプリの)バージョン管理に変更を加えるには、アプリリポジトリ内でサブモジュールの変更をコミットする必要があります。

  2. このライブラリを使用しているアプリが複数ある場合、これは機能しません。これは、常に1つのアプリのみが最新になるためです。

0
Sailesh