LoginSignup
1
1

GitLabテンプレートを他のレポジトリから参照できるようにした

Last updated at Posted at 2024-02-18

背景

GitLabテンプレートを複数リポジトリで使用しているのですが、MRのテンプレートを修正したいことがあって、1個1個のmdファイルを修正するのがダルい。

グループレベルのテンプレートはPREMIUMクラスで使えるのですが、gitのコマンドを使って1つのtemplateプロジェクトを参照するようにして、templateの修正箇所を一元化できるようにできないか試してみました。

git submodule使ってみた(結果:NG)

手順

  • templateというプロジェクトを作って、そのプロジェクトのroot直下にmerge_request_templates/Template.mdを置いた
  • go-sampleというプロジェクトのroot直下でtemplateプロジェクトを.gitlabという名前でサブモジュールとして置いた
    •  git submodule add git@gitlab.com:esper2/template.git .gitlab したものをcommit & pushした

MRを作ってみたのですが、上手くいかないorz

スクリーンショット 2024-02-18 8.31.23.png

スクリーンショット 2024-02-18 8.31.36.png

スクリーンショット 2024-02-18 9.13.03.png

git subtree使ってみた(結果:OK)

手順

  • sub-originという名前のリモートリポジトリを追加した(sub-originの内容はtemplateプロジェクト)
    • git remote add sub-origin git@gitlab.com:esper2/template.git
  • リモートリポジトリのmasterブランチを.gitlabというフォルダ名で取り込む(clone)
    • git subtree add --prefix=.gitlab sub-origin master(※)
  • 上記の内容をpushした

※コミットログを汚さないためにgit subtree addには--squashをつけた方が良さそう
git subtree add --prefix=.gitlab sub-origin master --squash

できた!!!
スクリーンショット 2024-02-18 11.04.09.png

スクリーンショット 2024-02-18 11.03.27.png

考察

何故git submoduleだと上手くいかなかったか

  • 公式ドキュメントを見てみると、以下の通り

  • git submodule init でローカルの設定ファイルを初期化し、次に git submodule updateしないとTemplate.mdが置かれた状態にならないので、GitLabのGUIからMRを出した時にTemplate.mdを参照できない

サブモジュールを含むプロジェクトのクローン
ここでは、内部にサブモジュールを含むプロジェクトをクローンしてみます。 
デフォルトでは、サブモジュールを含むディレクトリは取得できますがその中にはまだ何もファイルが入っていません。

何故git subtreeだと上手くいくか

  • git subtreeではtemplateのブランチをcloneしており、.gitlab/merge_request_templates以下にTemplate.mdが置かれるため

おまけ:templateを更新するときは

手順

  • templateプロジェクトを更新する
  • templateをcloneしたプロジェクトでgit subtree pullする
    • git subtree pull --prefix=.gitlab sub-origin master --squash

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1