オープンソースモデルを Clone して GitLab で開発
GitLab にクローンを作成
海洋流動モデル ROMS を例として,ROMS 本家のリポジトリを GitLab に複製(Clone)し(Fork は対象としません),運用するベストプラクティスを考えます.その際,ミラーリングにより自動的に本家のアップデートを Clone に取り込む設定としています.ここまでの設定はこちらの記事を参照ください.
この設定のため,本家の Clone には手を加えず,自前の開発ブランチ devel を作成して運用することとします.
ローカルは Windows 10 Pro の WSL2 の Ubuntu 18.04LTS の Git とスーパーコンピュータ ITO の Git で運用します.
最終的なワークフロー
目標とする最終的なワークフローを下図に示します.ROMS 本家(図中の Origin)から GitLab に Clone したリポジトリを mirroring で自動アップデートし,それを GitLab の master ブランチとします(ROMS には他にも多くのブランチが存在しますが,ここでは考えません).
GitLab に自身の開発用として devel ブランチを作成します(図中の Commit D1).この devel ブランチで開発を進めます(Commit D4 が最新とします).その間に master ブランチがアップデートされ,Commit M2 が発生したとします.master ブランチの Commit M2 を devel ブランチの最新コミット(Commit D4)とマージすることにします.両者に競合が発生する場合は,その競合の解決を devel ブランチ側で行います.このような方法をリベース(rebase)と言います.
このリベースを実行した結果が同図の下側のパネルです.devel ブランチ側でマージし,Commit D5 を発生させています.結果として,masterブランチの Commit M2 から devel ブランチに分岐したものが Commit D5 となります.以降も同様にリベースによって master ブランチの最新コミットを devel ブランチに取り込むことで,master ブランチを変更することなく(もちろん,Originのアップデートは自動反映されます),devel ブランチで開発を続けることができます.
devel ブランチから新たなブランチに分岐して開発を行い,それを devel ブランチにマージするといった,通常の Git の作業ももちろん可能です.
以下では,ローカルでの作業を含め,具体的な方法をまとめます.
GitLab で devel ブランチを作成
GitLab 上で devel ブランチを作成するには,Project(この例では ROMS)のトップページの Project 名のすぐ下にある,Branches をクリックします.次に,右上の緑アイコンの New branch をクリックし,現れたフォームで下図のように,Branch name を入力し(この例では devel),Create from はデフォルトのmasterとします.最後に左下に現れる緑アイコンの Create branch をクリックします.
GitLab の devel ブランチをデフォルトに設定
常に devel ブランチで作業を行うことになりますので,devel ブランチをデフォルトにします.これにより後の運用が楽になります.
GitLab の Project(この例ではROMS)を開き,Settings → Repository → Default Branch の Expandボタン をクリックします.
Default Branch のプルダウンメニューから devel を選び,Save changes ボタンをクリックします.
プロジェクトをローカルに Clone
実際の開発を行うときはまず,GitLabのプロジェクト(今の例ではROMS)をローカルに Clone(複製)します.こちらを参照ください.
Clone するローカルの作業用ディレクトリを用意してください.例えば c ドライブの直下に work ディレクトリを作って Clone する場合は以下のようにします.また,git clone した後は直下にある,そのCloneしたプロジェクト名のディレクトリに移動します.
$ cd /c
$ mkdir work
$ cd work
$ git clone git@gitlab:username/project.git
$ cd project
ローカルで ブランチを確認
Windows では GitBash でローカルに Clone したディレクトリに移動します.Cloneした直後は既に devel ブランチになっているはずです.
# 現在のブランチを確認
$ git branch
* devel
ローカルブランチとGitLabのブランチ(リモート追跡ブランチ)を表示します.
$ git branch -a
* devel
remotes/origin/HEAD -> origin/devel
remotes/origin/bare/origin/tags/roms-2.0
remotes/origin/bare/origin/tags/roms-2.1
remotes/origin/bare/origin/tags/roms-2.2
remotes/origin/bare/origin/tags/roms-2.3
remotes/origin/bare/origin/tags/roms-3.0
remotes/origin/bare/origin/tags/roms-3.1
remotes/origin/bare/origin/tags/roms-3.2
remotes/origin/bare/origin/tags/roms-3.3
remotes/origin/bare/origin/tags/roms-3.4
remotes/origin/bare/origin/tags/roms-3.5
remotes/origin/bare/origin/tags/roms-3.6
remotes/origin/bare/origin/trunk
remotes/origin/devel
remotes/origin/master
GitLabにPushする
ローカルの devel ブランチでの作業はこちらを参照ください.devel ブランチのコミットを GitLab(リモート) に Push します.
$ git push
GitLab の master ブランチを devel ブランチにリベースで取り込む
これは実際に必要になってからまとめます.