76

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

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

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

4

4 に答える 4

67

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"
于 2015-08-06T09:23:01.190 に答える
35

更新:git 1.8.2の時点で、解決策があるようです。以下のVonCの回答をご覧ください。元の答えは、git<1.8.2のユーザーのためにここに残されています。


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

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

于 2012-05-04T06:16:43.123 に答える
0

それ自体が git リポジトリであるサブモジュール ディレクトリ内で変更を加えてみませんか? このようにして、アプリのライブラリは常に更新されます。

警告:

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

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

于 2012-05-04T06:34:01.067 に答える