「管理者用Git」の版間の差分

提供:MoodleDocs
移動先:案内検索
編集の要約なし
(3人の利用者による、間の21版が非表示)
1行目: 1行目:
作成中です - [[利用者:Mitsuhiro Yoshida|Mitsuhiro Yoshida]]
{{Moodleのインストール}}
このページでは、本番サーバでMoodleのコピーをどのように保守するか説明しています。Gitを使用することで、簡単にMoodleをアップグレードすることができます。Moodleのコアコードをカスタマイズしている場合は、[[開発者用Git|開発者用Gitガイド]]内の指示に従うことをお勧めします。


あなたのMoodleサーバをメンテナンスするための[[管理者用CVS|CVS]]の代わりとして、Gitを使用することができます。このページでは、あなたの実運用サイトでどのようにしてMoodleを管理するのか説明しています。Gitを使用することで、簡単にMoodleをアップグレードすることができます。あなたがMoodleのコアコードをカスタマイズしている場合、[[開発者用Git]]内のインストラクションに従ってください。
Gitを最大限活用できるようにその基本概念の理解のための努力をする価値があります。以下の節を参照してください。特にCVSやSubversionを使ったことがあれば、学習が少し楽になるかもしれません。


== Gitからコードを取得する ==
== Gitを入手する (Windows, OSX, Linux その他) ==


あなたはオフィシャルMoodle gitリポジトリを git://git.moodle.org/moodle.git で見つけることができます (公式クローンは git://github.com/moodle/moodle.git にあります)。あなたのローカルチェックアウトを初期化するには:
Gitのサポートは最近までは主にLinux用に閉じていましたが、現在ではほとんどの人気OS用のビルドが利用可能です。


    git clone git://git.moodle.org/moodle.git                      (1)
* Gitサイトのダウンロード一覧 - http://git-scm.com/download
    cd moodle
    git branch -a                                                  (2)
    git branch --track local_19_STABLE origin/MOODLE_19_STABLE      (3)
    git checkout local_19_STABLE                                    (4)


コマンド (1) では、新しいローカルリポジトリをアップストリーム (upstream 上流) にあるmoodle.gitリポジトリのクローンとして初期化します。デフォルトでは、このアップストリームのリポジトリは「origin」リモートリポジトリとして知られることになります。コマンド (2) では、すべての利用可能なブランチを一覧表示します。コマンド (3) では、local_19_STABLEという名称の新しいローカルブランチを作成して、アップストリームリポジトリのブランチ「MOODLE_19_STABLE」を追跡 (track) するよう設定します。コマンド (4) では、新しく作成したブランチに実際にスイッチします。最後の2つのコマンドは、下記のコマンドに置き換えることができることに留意してください:
自分のOS用のgitをダウンロードしてインストールすれば、この文書内のgitコマンドはそのOSで動作するはずです。


    git checkout -b local_19_STABLE origin/MOODLE_19_STABLE        (3 + 4)
== Gitからコードを入手する ==


このコマンドでは、新しいローカル追跡ブランチを作成して、そのブランチに即座にスイッチします。
ここではコマンドライン版のGitを説明しています。グラフィカルなクライアントはコマンドライン版のラッパーに過ぎないので、必要なパラメータは極めて簡単に推測できるはずです。


== あなたのインストール済みMoodleを更新する ==
Moodleの公式gitリポジトリは git://git.moodle.org/moodle.git にあります (公式クローンは git://github.com/moodle/moodle.git にあります)。ローカルチェックアウトを初期化するには次のようにしてください:
<pre>
$ cd /path/to/your/webroot
$ git clone git://git.moodle.org/moodle.git                      (1)
$ cd moodle
$ git branch -a                                                  (2)
$ git branch --track MOODLE_38_STABLE origin/MOODLE_38_STABLE    (3)
$ git checkout MOODLE_38_STABLE                                  (4)
</pre>
* コマンド (1) は、新しいローカルリポジトリを上流 (upstream、つまりリモートサーバ) 上の moodle.git リポジトリのクローンとして初期化します。この上流リポジトリはデフォルトで「origin」と呼ばれます。これにより ''moodle'' という名前の新規ディレクトリが作成され、ここにすべてのファイルがダウンロードされます。この操作は、Moodleの全バージョンの全履歴を取得するので、すこし時間がかかります。
* コマンド (2) は、すべての利用可能なブランチを一覧表示します。
* コマンド (3) は、MOODLE_38_STABLE という新しいローカルブランチを作成して、上流リポジトリのリモートブランチ「MOODLE_38_STABLE」を追跡 (track) するよう設定します。
* コマンド (4) では、新しく作成したローカルブランチに実際にスイッチします。


Moodle開発チームは、バグ修正の統合およびテストを毎週月曜日および木曜日に実施しています。あなたのコードを更新するために、水曜日にすべてのパッチをインストールすることができます。公式リポジトリがすで更新されているかどうか、[http://git.moodle.org/gw?p=moodle.git;a=summary ショートログ]をご覧ください。
Gitは各コマンドに非常に多くのオプションがあり、上記プロセスをコマンド1個で実行することも実際に可能なことに注意してください (練習用に残しておきます!) 。


    cd /path/to/your/moodle/checkout
== ファイアウォール背後からのGit ==
    git fetch                                                      (1)
    git status                                                      (2)
    git merge                                                      (3)


コマンド (1) では、あなたのローカルチェックアウトを触らずにリモートリポジトリより新しいアップデートをダウンロードします。コマンド (2) では、あなたのローカルバージョンとアップストリームのバージョンの違いに関する情報を表示します。コマンド (3) では、実際にあなたのローカルファイルを更新します。git-fetch + git-mergeのコマンドの組み合わせは下記単一コマンドと入替えることができます:
Gitは読み出し専用のプロトコル (port 9418) を使用していますが、あなたのファイアウォールでブロックされるかもしれません。もしこの問題が発生した場合は Github の http 版 <nowiki>https://github.com/moodle/moodle.git</nowiki> を使用することができます。これは若干遅いので、可能ならGitプロトコルを使用してください。


    git pull                                                        (1 + 3)
== インストールを更新する ==


== Gitリポジトリから投稿拡張モジュールをインストールする ==
Moodle開発チームは、バグ修正の結合とテストを毎週月曜日と火曜日に実施しています。水曜日にコードを更新することですべてのパッチをインストールできます。公式リポジトリが更新されたかどうかは、[https://git.moodle.org/gw?p=moodle.git;a=summary ショートログ]をご覧ください。


例えば、私たちのMoodle 2.0 gitリポジトリより[[ブックモジュール]]をインストールしたいとしましょう。
コードを (MOODLE_38_STABLE ブランチの) 最新版に更新するために必要なことの '''すべて''' は次のコマンドだけです:
<pre>
$ cd /path/to/your/moodle/
$ git pull
</pre>
これが本番サイトの場合は、[[アップグレード]]にある指示もよく考慮するべきです (バックアップをとるなど)。


    cd /path/to/your/moodle/checkout
== 拡張機能をGitリポジトリからインストールする ==
    cd mod                                                          (1)
    git clone git://github.com/skodak/moodle-mod_book.git book      (2)
    cd book
    git checkout -b MOODLE_20_STABLE origin/MOODLE_20_STABLE        (3)
    git branch -d master                                            (4)


コマンド (1) では、あなたのローカルMoodleクローン内の「mod」ディレクトリに現在のディレクトリを変更します。コマンド (2) では、新しいサブディレクトリ「book」を作成して、Petr Škoda氏のブックリポジトリのローカルクローンを作成します。The command (3) creates a new local branch that will track the remote branch with a Book version for Moodle 2.0. The command (4) deletes the ''master'' that was created automatically by git-clone in (2) as we do not want it in this production checkout.
これはあなたのMoodleリポジトリに他のGitリポジトリからのプラグイン追加を扱うための一方法です。もう一つの方法はGitサブモジュールを使うことですが、執筆時点ではGitのやや荒削りな機能の一つであり、上級者向けオプションとみなすべきです。


Now it is wise to put the new directory mod/book/ to the list of ignored files of the main Moodle clone.
例えば、自分の Moodle {{Version}} に[[:en:Certificate module]]をGitリポジトリからインストールしたいとしましょう。
<pre>
$ cd /path/to/your/moodle/
$ cd mod                                                         (1)
$ git clone https://github.com/markn86/moodle-mod_certificate.git certificate    (2)
$ cd certificate
$ git checkout -b MOODLE_38_STABLE origin/MOODLE_38_STABLE        (3)
$ git branch -d master                                            (4)
</pre>
コマンド (1) は、カレントディレクトリを、ローカルなMoodleクローンの ''mod'' フォルダに変更します。コマンド (2) は新しいサブディレクトリ ''certificate'' 内に、素のCertificateリポジトリのローカルクローンを作成します。コマンド (3) は新しいローカルブランチを作成し、Moodle {{Version}} に対応するCertificateバージョンによりリモートブランチを追跡します。コマンド (4) は、(2) の git-clone により自動的に作成された ''master'' ブランチが本番のチェックアウトでは不要なので、これを削除します。


    cd /path/to/your/moodle/checkout
注意: リポジトリをクローンする前に、メンテナに直接質問するか、あるいはあてずっぽうでよければ利用できるブランチを確認するためにコマンド (3) の前に以下のコマンドを実行することで、あなたのMoodleブランチとモジュールの互換性をまず確認するべきです。
    echo /mod/book/ >> .git/info/exclude
<pre>
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/MOODLE_20_STABLE
  remotes/origin/MOODLE_21_STABLE
  remotes/origin/MOODLE_22_STABLE
  remotes/origin/MOODLE_23_STABLE
  remotes/origin/MOODLE_24_STABLE
  remotes/origin/MOODLE_25_STABLE
  remotes/origin/MOODLE_26_STABLE
  remotes/origin/MOODLE_27_STABLE
  remotes/origin/MOODLE_28_STABLE
  remotes/origin/MOODLE_29_STABLE
  remotes/origin/MOODLE_30_STABLE
  remotes/origin/MOODLE_31_STABLE
  remotes/origin/master
</pre>
これにより、存在しないブランチに対してコマンド (3) を実行してしまい、次のようなエラーが表示されるのを防ぐことができます。
<pre>
$ git checkout -b MOODLE_31_STABLE origin/MOODLE_31_STABLE
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/MOODLE_31_STABLE' which can not be resolved as commit?
</pre>


To update your Moodle installation now, you must visit both Git repositories and pull changes from upstream.
注意: 上のエラーを修正するには、これを実行します: "git fetch origin MOODLE_31_STABLE:LOCAL_MOODLE_31_STABLE"


    cd /path/to/your/moodle/checkout
この時点で、メインのMoodleクローンの無視ファイルリストに新しいディレクトリ mod/certificate/ を追加しておくとよいでしょう。でないと、メインのクローンの status を見るたびに、チェックインしていない新しいコードがあると言われ続けることになります。
    git pull
<pre>
    cd /path/to/your/moodle/checkout/mod/book
$ cd /path/to/your/moodle/
    git pull
$ echo /mod/certificate/ >> .git/info/exclude
</pre>
インストールしたMoodleを更新するには、今や両方のGitリポジトリにおいて上流から変更を pull しなければなりません。
<pre>
$ cd /path/to/your/moodle/
$ git pull
$ cd mod/certificate
$ git pull
</pre>
これらのコマンドを記載したシェルスクリプトをインストールしたMoodleのrootディレクトリに置いておくのも非常にいい考えです。でないと、メインのMoodleリポジトリ内のどこにGitリポジトリがあるかなどすぐ忘れてしまいます。


Writing a shell script with these lines in the root of Moodle installation is a very good idea. Otherwise it is easy to forget what Git repositories are there within the main Moodle repository.
== 拡張機能をGitサブモジュールを用いてインストールおよび保守する ==
 
前節で述べたように、これは上級者向けです。
ですので、Gitとそのコマンドに関していくらか経験をもっていることが必要です。
ステップバイステップに説明しますが、これらのコマンドが何をしているか理解しているとステップを追いかける役に立ちます。
 
 
上級者向けのオプションとコマンドは [[https://git-scm.com/book/en/v2/Git-Tools-Submodules|the Git book]] にあります。
Gitサブモジュールに関する疑問があれば、まずは上記サイトをご覧ください。
 
=== 既存のMoodleに新しい拡張をインストールする ===
 
前節と同様、[[:en:Certificate module]]を例に使います。
<pre>
$ cd /path/to/your/moodle
$ git submodule add https://github.com/markn86/moodle-mod_certificate.git mod/certificate
</pre>
 
注意: Gitはリポジトリに次の二つのファイルがあると報告します:
<pre>
$ git status
# On branch MOODLE_29_STABLE
# Changes to be committed:
#  (use "git reset HEAD <file>..." to unstage)
#
# new file:  .gitmodules
# new file:  mod/certificate
#
</pre>
 
'''.gitmodules''' ファイルにはすべてのサブモジュールのローカルパスとURLが格納されます。
リポジトリを後でクローンするつもりであれば、これをコミットしておく必要があります ([[:en:Moodle development environment with Git submodules]] のページをご覧ください)。
自動生成された設定は不十分かもしれないので、コミットの前に、プラグインのGitリポジトリの設定をしっかりチェックします。
あなたのリポジトリでMoodleのバージョンに対応するリモートブランチを追跡するようにしておくと、将来の更新の役に立ちます。
<pre>
$ cd mod/certificate
$ git branch -avv
* master                          345f5b1 [origin/master] Replaced deprecated function
  remotes/origin/HEAD            -> origin/master
  remotes/origin/MOODLE_20_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_21_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_22_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_23_STABLE fe047de Check that the function exists rather than relying on the Moodle version
  remotes/origin/MOODLE_24_STABLE 1051f7d CONTRIB-4892 Fixed the email to others functionality
  remotes/origin/MOODLE_25_STABLE cdb221a CONTRIB-4946: Removed character from language file breaking AMOS
  remotes/origin/MOODLE_26_STABLE 696802a Increased version
  remotes/origin/MOODLE_27_STABLE d3c0379 Increased version
  remotes/origin/MOODLE_28_STABLE fa8df83 Increased version
  remotes/origin/MOODLE_29_STABLE 3f03740 Replaced deprecated function
  remotes/origin/master          345f5b1 Replaced deprecated function
</pre>
 
リモートリポジトリは '''master''' なので、Git は '''origin/master''' を追跡する '''master''' を自動的に作成しています。
ですので、新しいブランチを作成して適切なリモートブランチを追跡するようにします。
もちろんこれは、リモートリポジトリがそのブランチを提供している場合にのみ可能です。
<pre>
$ git checkout -b MOODLE_29_STABLE origin/MOODLE_29_STABLE
Branch MOODLE_29_STABLE set up to track remote branch MOODLE_29_STABLE from origin.
Switched to a new branch 'MOODLE_29_STABLE'
$ git branch -D master
Deleted branch master (was 345f5b1).
</pre>
'''master''' ブランチを削除することは必須ではありませんが、残していても役に立ちません。
実際、これ以降、この設定に触れる必要はありません。
 
最後のステップはメインリポジトリに変更をコミットすることです。
<pre>
$ cd /path/to/your/moodle
$ git commit -a -m "New extension mod_certificate installed"
</pre>
 
コミットが新しいGitサブモジュールに関する変更のみを含むように確認することが必要です ('''-a''' はステージされていない変更もすべてコミットするため)。
 
=== Gitサブモジュールを保守する ===
 
サブモジュール群の保守は非常に簡単です。
Moodleリポジトリにいくつかサブモジュールをインストールしてあるとします。
'''mod_mylittleextension''' 拡張はこの例のテスト用のシナリオとして用意したフェイクのプラグインであることに注意してください。
Moodleの公式モジュールではありません。サブモジュールを一度にすべて更新するには、以下の入力します:
<pre>
$ cd /path/to/your/moodle
$ git submodule foreach git pull
Entering 'block/coursefeedback'
Already up-to-date.
Entering 'mod/certificate'
Already up-to-date.
Entering 'mod/mylittleextension'
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From /local/repositories/mle
  89d9eae..64c122d  master    -> origin/master
Updating 89d9eae..64c122d
Fast-forward
index.html  |    9 +++++++++
version.php |    6 +++---
2 files changed, 12 insertions(+), 3 deletions(-)
create mode 100644 index.html
$ git status
# On branch MOODLE_29_STABLE
# Changes not staged for commit:
#  (use "git add <file>..." to update what will be committed)
#  (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified:  mod/mylittleextension (new commits)
#
</pre>
 
'''git submodule foreach [another command]''' コマンドは、すべてのサブモジュールリポジトリを渡り歩いて  '''[another command]''' で指定されたものを実行します。
今回の場合は '''git pull''' です。
したがって、mylittleextension モジュールが更新されますが、メインのリポジトリは変更がコミットされるまではクリーンではありません:
<pre>
$ git commit -a -m "Plugin updates"
</pre>
 
プラグインをGitサブモジュールにより保守することは、更新プロセスを単純化する以外にも役に立ちます。
より大きなスケールで、これはMoodleプロジェクトを保守するのに使用することもできます。Moodleプロジェクトでは複数の開発者が外部プラグインを手動で取り込むことなくMoodleの正確なコピーを持つ必要があります。
この話題については [[:en:Moodle development environment with Git submodules]] のページをご覧ください。


== 関連情報 ==
== 関連情報 ==


; Moodle Docs
* [[:en:Windows installation using Git]]
* [[CVS for Administrators]]
* [[:en:Git for Mac]]
* [[Moodle versions]]
* [[:dev:Moodle versions]]
* For some screenshots see [[User:Frank_Ralf/Git]] (still work in progress)
* For fixing a Tracker Issue (MDL) / Forking Moodle / CONTRIButing code [[:dev:User:Sam_Hemelryk/My_Moodle_Git_workflow|User:Sam_Hemelryk/My_Moodle_Git_workflow]]
* [[:en:Moodle_Production_Server_with_GIT|Case study Git + Moodle from Technical University Berlin]]


; Moodle forum discussions
; Moodleフォーラムディスカッション
* [https://moodle.org/mod/forum/discuss.php?d=255175 Github and Moodle deployment for production]
* [http://moodle.org/mod/forum/discuss.php?d=168094 GIT help needed]
* [http://moodle.org/mod/forum/discuss.php?d=168094 GIT help needed]
* [http://moodle.org/mod/forum/discuss.php?d=165236 Best way to manage CONTRIB code with GIT]
* [https://moodle.org/mod/forum/discuss.php?d=231046 Clear git guide for Admins (not developers)]
* [http://moodle.org/mod/forum/discuss.php?d=167063 Handy Git tip for tracking 3rd-party modules and plugins]
* [https://moodle.org/mod/forum/discuss.php?d=393756 Best way to use Git]
* [http://moodle.org/mod/forum/discuss.php?d=167730 Moodle Git repositories]
* [http://moodle.org/mod/forum/discuss.php?d=183693 Git and CVS]


; External resources
; 外部リソース
* [http://www.kernel.org/pub/software/scm/git/docs/everyday.html Everyday GIT With 20 Commands Or So]
* [http://thamblings.blogspot.com.au/2013/07/upgrading-moodle-from-git.html Deploying Moodle from git - Blog post from a production experience]
* [http://gitref.org/ Git Reference]
* [http://gitref.org/ Git Reference]
* [http://progit.org/book/ Pro Git book]
* [http://progit.org/book/ Pro Git book]


 
[[en:Git_for_Administrators]]
[[Category:Git]]
[[fr:Git_pour_administrateurs]]
[[Category:管理者]]
[[es:Git para Administradores]]
 
[[de:Git für Administratoren]]
[[en: Git_for_Administrators]]

2020年10月30日 (金) 05:49時点における版

このページでは、本番サーバでMoodleのコピーをどのように保守するか説明しています。Gitを使用することで、簡単にMoodleをアップグレードすることができます。Moodleのコアコードをカスタマイズしている場合は、開発者用Gitガイド内の指示に従うことをお勧めします。

Gitを最大限活用できるようにその基本概念の理解のための努力をする価値があります。以下の節を参照してください。特にCVSやSubversionを使ったことがあれば、学習が少し楽になるかもしれません。

Gitを入手する (Windows, OSX, Linux その他)

Gitのサポートは最近までは主にLinux用に閉じていましたが、現在ではほとんどの人気OS用のビルドが利用可能です。

自分のOS用のgitをダウンロードしてインストールすれば、この文書内のgitコマンドはそのOSで動作するはずです。

Gitからコードを入手する

ここではコマンドライン版のGitを説明しています。グラフィカルなクライアントはコマンドライン版のラッパーに過ぎないので、必要なパラメータは極めて簡単に推測できるはずです。

Moodleの公式gitリポジトリは git://git.moodle.org/moodle.git にあります (公式クローンは git://github.com/moodle/moodle.git にあります)。ローカルチェックアウトを初期化するには次のようにしてください:

$ cd /path/to/your/webroot
$ git clone git://git.moodle.org/moodle.git                       (1)
$ cd moodle
$ git branch -a                                                   (2)
$ git branch --track MOODLE_38_STABLE origin/MOODLE_38_STABLE     (3)
$ git checkout MOODLE_38_STABLE                                   (4)
  • コマンド (1) は、新しいローカルリポジトリを上流 (upstream、つまりリモートサーバ) 上の moodle.git リポジトリのクローンとして初期化します。この上流リポジトリはデフォルトで「origin」と呼ばれます。これにより moodle という名前の新規ディレクトリが作成され、ここにすべてのファイルがダウンロードされます。この操作は、Moodleの全バージョンの全履歴を取得するので、すこし時間がかかります。
  • コマンド (2) は、すべての利用可能なブランチを一覧表示します。
  • コマンド (3) は、MOODLE_38_STABLE という新しいローカルブランチを作成して、上流リポジトリのリモートブランチ「MOODLE_38_STABLE」を追跡 (track) するよう設定します。
  • コマンド (4) では、新しく作成したローカルブランチに実際にスイッチします。

Gitは各コマンドに非常に多くのオプションがあり、上記プロセスをコマンド1個で実行することも実際に可能なことに注意してください (練習用に残しておきます!) 。

ファイアウォール背後からのGit

Gitは読み出し専用のプロトコル (port 9418) を使用していますが、あなたのファイアウォールでブロックされるかもしれません。もしこの問題が発生した場合は Github の http 版 https://github.com/moodle/moodle.git を使用することができます。これは若干遅いので、可能ならGitプロトコルを使用してください。

インストールを更新する

Moodle開発チームは、バグ修正の結合とテストを毎週月曜日と火曜日に実施しています。水曜日にコードを更新することですべてのパッチをインストールできます。公式リポジトリが更新されたかどうかは、ショートログをご覧ください。

コードを (MOODLE_38_STABLE ブランチの) 最新版に更新するために必要なことの すべて は次のコマンドだけです:

$ cd /path/to/your/moodle/
$ git pull

これが本番サイトの場合は、アップグレードにある指示もよく考慮するべきです (バックアップをとるなど)。

拡張機能をGitリポジトリからインストールする

これはあなたのMoodleリポジトリに他のGitリポジトリからのプラグイン追加を扱うための一方法です。もう一つの方法はGitサブモジュールを使うことですが、執筆時点ではGitのやや荒削りな機能の一つであり、上級者向けオプションとみなすべきです。

例えば、自分の Moodle 3.5 にen:Certificate moduleをGitリポジトリからインストールしたいとしましょう。

$ cd /path/to/your/moodle/
$ cd mod                                                          (1)
$ git clone https://github.com/markn86/moodle-mod_certificate.git certificate     (2)
$ cd certificate
$ git checkout -b MOODLE_38_STABLE origin/MOODLE_38_STABLE        (3)
$ git branch -d master                                            (4)

コマンド (1) は、カレントディレクトリを、ローカルなMoodleクローンの mod フォルダに変更します。コマンド (2) は新しいサブディレクトリ certificate 内に、素のCertificateリポジトリのローカルクローンを作成します。コマンド (3) は新しいローカルブランチを作成し、Moodle 3.5 に対応するCertificateバージョンによりリモートブランチを追跡します。コマンド (4) は、(2) の git-clone により自動的に作成された master ブランチが本番のチェックアウトでは不要なので、これを削除します。

注意: リポジトリをクローンする前に、メンテナに直接質問するか、あるいはあてずっぽうでよければ利用できるブランチを確認するためにコマンド (3) の前に以下のコマンドを実行することで、あなたのMoodleブランチとモジュールの互換性をまず確認するべきです。

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/MOODLE_20_STABLE
  remotes/origin/MOODLE_21_STABLE
  remotes/origin/MOODLE_22_STABLE
  remotes/origin/MOODLE_23_STABLE
  remotes/origin/MOODLE_24_STABLE
  remotes/origin/MOODLE_25_STABLE
  remotes/origin/MOODLE_26_STABLE
  remotes/origin/MOODLE_27_STABLE
  remotes/origin/MOODLE_28_STABLE
  remotes/origin/MOODLE_29_STABLE
  remotes/origin/MOODLE_30_STABLE
  remotes/origin/MOODLE_31_STABLE
  remotes/origin/master

これにより、存在しないブランチに対してコマンド (3) を実行してしまい、次のようなエラーが表示されるのを防ぐことができます。

$ git checkout -b MOODLE_31_STABLE origin/MOODLE_31_STABLE
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/MOODLE_31_STABLE' which can not be resolved as commit?

注意: 上のエラーを修正するには、これを実行します: "git fetch origin MOODLE_31_STABLE:LOCAL_MOODLE_31_STABLE"

この時点で、メインのMoodleクローンの無視ファイルリストに新しいディレクトリ mod/certificate/ を追加しておくとよいでしょう。でないと、メインのクローンの status を見るたびに、チェックインしていない新しいコードがあると言われ続けることになります。

$ cd /path/to/your/moodle/
$ echo /mod/certificate/ >> .git/info/exclude

インストールしたMoodleを更新するには、今や両方のGitリポジトリにおいて上流から変更を pull しなければなりません。

$ cd /path/to/your/moodle/
$ git pull
$ cd mod/certificate
$ git pull

これらのコマンドを記載したシェルスクリプトをインストールしたMoodleのrootディレクトリに置いておくのも非常にいい考えです。でないと、メインのMoodleリポジトリ内のどこにGitリポジトリがあるかなどすぐ忘れてしまいます。

拡張機能をGitサブモジュールを用いてインストールおよび保守する

前節で述べたように、これは上級者向けです。 ですので、Gitとそのコマンドに関していくらか経験をもっていることが必要です。 ステップバイステップに説明しますが、これらのコマンドが何をしているか理解しているとステップを追いかける役に立ちます。


上級者向けのオプションとコマンドは [Git book] にあります。 Gitサブモジュールに関する疑問があれば、まずは上記サイトをご覧ください。

既存のMoodleに新しい拡張をインストールする

前節と同様、en:Certificate moduleを例に使います。

$ cd /path/to/your/moodle
$ git submodule add https://github.com/markn86/moodle-mod_certificate.git mod/certificate

注意: Gitはリポジトリに次の二つのファイルがあると報告します:

$ git status
# On branch MOODLE_29_STABLE
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   .gitmodules
#	new file:   mod/certificate
#

.gitmodules ファイルにはすべてのサブモジュールのローカルパスとURLが格納されます。 リポジトリを後でクローンするつもりであれば、これをコミットしておく必要があります (en:Moodle development environment with Git submodules のページをご覧ください)。 自動生成された設定は不十分かもしれないので、コミットの前に、プラグインのGitリポジトリの設定をしっかりチェックします。 あなたのリポジトリでMoodleのバージョンに対応するリモートブランチを追跡するようにしておくと、将来の更新の役に立ちます。

$ cd mod/certificate
$ git branch -avv
* master                          345f5b1 [origin/master] Replaced deprecated function
  remotes/origin/HEAD             -> origin/master
  remotes/origin/MOODLE_20_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_21_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_22_STABLE 1aa1040 Added option to print 'grade category' grade
  remotes/origin/MOODLE_23_STABLE fe047de Check that the function exists rather than relying on the Moodle version
  remotes/origin/MOODLE_24_STABLE 1051f7d CONTRIB-4892 Fixed the email to others functionality
  remotes/origin/MOODLE_25_STABLE cdb221a CONTRIB-4946: Removed character from language file breaking AMOS
  remotes/origin/MOODLE_26_STABLE 696802a Increased version
  remotes/origin/MOODLE_27_STABLE d3c0379 Increased version
  remotes/origin/MOODLE_28_STABLE fa8df83 Increased version
  remotes/origin/MOODLE_29_STABLE 3f03740 Replaced deprecated function
  remotes/origin/master           345f5b1 Replaced deprecated function

リモートリポジトリは master なので、Git は origin/master を追跡する master を自動的に作成しています。 ですので、新しいブランチを作成して適切なリモートブランチを追跡するようにします。 もちろんこれは、リモートリポジトリがそのブランチを提供している場合にのみ可能です。

$ git checkout -b MOODLE_29_STABLE origin/MOODLE_29_STABLE
Branch MOODLE_29_STABLE set up to track remote branch MOODLE_29_STABLE from origin.
Switched to a new branch 'MOODLE_29_STABLE'
$ git branch -D master
Deleted branch master (was 345f5b1).

master ブランチを削除することは必須ではありませんが、残していても役に立ちません。 実際、これ以降、この設定に触れる必要はありません。

最後のステップはメインリポジトリに変更をコミットすることです。

$ cd /path/to/your/moodle
$ git commit -a -m "New extension mod_certificate installed"

コミットが新しいGitサブモジュールに関する変更のみを含むように確認することが必要です (-a はステージされていない変更もすべてコミットするため)。

Gitサブモジュールを保守する

サブモジュール群の保守は非常に簡単です。 Moodleリポジトリにいくつかサブモジュールをインストールしてあるとします。 mod_mylittleextension 拡張はこの例のテスト用のシナリオとして用意したフェイクのプラグインであることに注意してください。 Moodleの公式モジュールではありません。サブモジュールを一度にすべて更新するには、以下の入力します:

$ cd /path/to/your/moodle
$ git submodule foreach git pull
Entering 'block/coursefeedback'
Already up-to-date.
Entering 'mod/certificate'
Already up-to-date.
Entering 'mod/mylittleextension'
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From /local/repositories/mle
   89d9eae..64c122d  master     -> origin/master
Updating 89d9eae..64c122d
Fast-forward
 index.html  |    9 +++++++++
 version.php |    6 +++---
 2 files changed, 12 insertions(+), 3 deletions(-)
 create mode 100644 index.html
$ git status
# On branch MOODLE_29_STABLE
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   mod/mylittleextension (new commits)
#

git submodule foreach [another command] コマンドは、すべてのサブモジュールリポジトリを渡り歩いて [another command] で指定されたものを実行します。 今回の場合は git pull です。 したがって、mylittleextension モジュールが更新されますが、メインのリポジトリは変更がコミットされるまではクリーンではありません:

$ git commit -a -m "Plugin updates"

プラグインをGitサブモジュールにより保守することは、更新プロセスを単純化する以外にも役に立ちます。 より大きなスケールで、これはMoodleプロジェクトを保守するのに使用することもできます。Moodleプロジェクトでは複数の開発者が外部プラグインを手動で取り込むことなくMoodleの正確なコピーを持つ必要があります。 この話題については en:Moodle development environment with Git submodules のページをご覧ください。

関連情報

Moodleフォーラムディスカッション
外部リソース