2017-06-21 2 views
0

私のプロジェクトでは、いくつかのプラグインを管理するためにgitサブモジュールを使用しています。私たちのコアプロジェクトとサブモジュールは、並行して開発されています。その結果、サブプロジェクトが進むにつれて、コアプロジェクトのサブモジュールのSHAを更新しなければならない(そして、異なる開発者間でSHAの競合を解決しなければならないなど)ことはうまく機能しません。gitサブモジュールに特定のSHAを保存させない方法はありますか?

ブランチを追跡してそのことを伝えたいと思います。しかし、サブモジュールブランチトラッキングはサブモジュールの更新を容易にしますが、スーパープロジェクトがブランチではなく特定のSHAを指し示すという問題を緩和するものは何もありません。

他にもご意見はありますか?

+2

Gitを使って依存関係を管理しようとしているようです。それはそれほど良いことではありません。本当の依存関係マネージャが必要な場合があります。または、最新のコミットを追跡しなければならない場合は、これらの2つのリポジトリが1つのリポジトリより優れている可能性があります。 – Schwern

+2

私はgitがあなたがしたいことをすることができるとは思わない。コミットは特定のバージョンのコードを表し、サブモジュールがrefを指定できるようにすることでこれを破ることができます - 今日のコミットは機能しますが、サブモジュールのリポジトリの参照により、私のrepoでの同じコミットは明日中止されます。そして、バージョン範囲の依存マネージャーにも同じことが言えるでしょうが、少なくとも、滑りやすさを制限するためのセーバーのようなツールがあります。 (そして、それでもまだ生産版のシュリンクラップのようなツールがあります) –

+0

https://stackoverflow.com/questions/9189575/git-submodule-tracking-latestを参照してください – nos

答えて

1

可能な代替手段の1つは、サブモジュールではなくgitサブツリーを使用することです。

私は長期的な解決策として、それをお勧めしますが、https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtreehttps://legacy-developer.atlassian.com/blog/2015/05/the-power-of-git-subtreeは、それが動作し、それはあなたの特定のニーズのためのより良いワークフローの場合は、決定に役立つべきかの合理的なツアーを与えていることはよく分からないものを使用しました。

+0

ありがとう、@ジョナ!私は間違いなくそれを試してみるつもりです。私はまた、私たちの問題の回避策を見つけました。それは誰にとっても役立つ場合に回答として投稿することになります。 – Eric

0

他にも述べたように、gitサブモジュールはプロジェクトの目的に合わせて設計されたものではありません。しかし、私は、我々が望むものをもたらすための方法を見つけた...場合にはここに掲載、それは誰にも便利です。

  • 私たちは余分なワークフローステップと頻繁の手間を避けるために、サブモジュールインデックスに地元の変更をコミットしていませんgit GUIでうまく処理されないインデックス上で競合をマージします。私たちは、その後、それは我々が望むものを与えてくれる...サブモジュールを、そのインデックスがそう

を変更すると、我々は効果的に無視することができるように私たちからローカルの変更を隠している、「変わらないと仮定」としてサブモジュールのフォルダをマークし

  • 新しいユーザーは、関連付けられたすべてのプラグインを再帰的にクローンし、git submodule <command>を介して一括操作を実行できますが、不要な固定コミットSHAをトリップすることはありません。

  • 関連する問題