Edited at

Moodle 3.7 マニュアル - Git ガイド

Git ガイド

原文

このページは、あなたの本番サーバの Moodle のコピーを Git により楽にアップグレードして保存する方法について記述しています。Moodle のコアなコードをカスタマイズしているのなら、Git for developers guide の手順にしたがうことが推奨されます。

Git を最大限に活用するには、その基本的な概念を理解する用に努力するのは価値があります。以下の章を参照してください。もしあなたが、CVS や Subversion を使ってたのなら、あっという間に理解できるようになると思います。

内容

1 Git について把握する(Windows, OSX, Linux その他)

2 Git からコードを得る

3 Git Connection Refused エラー

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

5 あなたのインストールした環境をアップデートする

6 Git リポジトリから貢献された extension をインストールする

7 貢献された extension を Git のサブモジュールを使ってインストールし整備する

7.1 現存する Moodle にあたらしい extension をインストールする

7.2 Git サブモジュールを整備する

8 参照


1 Git について把握する(Windows, OSX, Linux その他)

Git のサポートは、つい最近まで、ほとんど Linux に限られていましたがほとんどの人気のあるオペレーティングシステムのビルドも入手可能です。

ダウンロードをおこない OSにインストールしたら、このドキュメントの git コマンドはオペーティングシステムでうまくいくはずです。


2 Git からコードを得る

Git のコマンドラインバージョンについて話しています。グラフィカルクライアントは、コマンドラインのバージョンのラッパーでしかないので、正しいパラメータを極めて容易に演繹できます。

Moodle の公式リポジトリは、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_37_STABLE origin/MOODLE_37_STABLE (3)
$ git checkout MOODLE_37_STABLE (4)

コマンド(1)は、新しいローカルリポジトリを 'upstream' (すなわち、リモートサーバをベースにします)の moodle.git リポジトリのクローンとして初期化します。デフォルトでは、アップストリームリポジトリは、'origin' と呼ばれます。moodle というでぃれくとりを作成し、そこにすべてのファイルをダウンロードします。このオペレーションはしばらく時間がかかり Moodle のバージョンのすべての履歴をゲットします。

コマンド(2)は、現在手に入れているすべてのブランチをリストアップします。

コマンド(3)を、MOODLE_37_STABLE というローカルブランチを作成し、リモートブランチから、MOODLE_37_STABLE というブランチを追跡するようにセットします。

コマンド(4)は、あらたに作成したローカルブランチにスイッチします。


3 Git Connection Refused エラー

以下のように接続が拒否されるようなら、fatal: unable to connect to git.moodle.org: git.moodle.org[0: 34.210.133.53]: errno=Connection refused

このコマンドを使ってください。$ git clone https://github.com/moodle/moodle.git

Git はそれぞれのコマンドに多くの数のオプションがあり、上記プロセスを一つのコマンドでおこなうことで可能となることに注意してください(練習のためにあえて上げません!)。


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

Git は、あなたのファイアウォールでブロックされるかもしれない、読取専用のプロトコル(ポート番号 9418)を使用しています。もし、これが問題であるのなら、Github の http バージョン https://github.com/moodle/moodle.git を使うことができます。多少遅いですので、できるならば、Git プロトコルを使用してください。


5 あなたのインストールした環境をアップデートする

Moodle の開発チームは、不具合の修正の統合とテストを毎月曜日と木曜日におこなっています。

水曜日に、コードをアップデートすることで全てのパッチをインストールできます。公式リポジトリがすでにアップデート済みか否かを確認するには、shortlog を参照してください。

To update your code to the latest version (on the MOODLE_37_STABLE branch) all you have to do is:

$ cd /path/to/your/moodle/

$ git pull

もしこれが本番サイトならば、アップグレード のインストラクション(例えば、バックアップを取る等)を考慮すべきです。


6 Git リポジトリから貢献された extension をインストールする

これは、他の Git リポジトリからあなたの Moodle リポジトリへプラグインを追加する一つの方法です。別の方法は、Git サブモジュールを使用することです。しかしながら、これを書いているときは、Git の荒っぽい機能であり、上級のオプションとみなされるべきもの。

たとえば、Certificate module を、Git リポジトリから、我々の Moodle 3.7 にインストールしたいとします。

$ 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_37_STABLE origin/MOODLE_37_STABLE (3)
$ git branch -d master (4)

コマンド(1)は、カレントディレクトリをあなたのローカル Moodle クローンの mod フォルダに変更します。コマンド(2)は、certificate というサブディレクトリを作成してまっさらな Certificate リポジトリのローカルクローンを作ります。コマンド(3)は、バージョン Moodle 3.7 のリモートブランチを追跡するであろう、あたらしいローカルブランチを作成します。コマンド(4)は、本番チェックアウトでは必要ないため、コマンド(2)で自動的に作成されたマスターを削除します。

注:まず、リポジトリをチェックする前に、直接メンテナに尋ねて、モジュールとあなたの Moodle ブランチの互換性をチェックするか、あるいは、自分で推察したければ、ブランチ間で何が入手できているかを、コマンド(3)の前に、以下のコマンドを発行して確かめるべきです。

$ 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

これは、コマンドを既存のブランチに対して発行するときに、エラーメッセージが出力するのを避けてくれます。例えば、

§ 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

Now it is wise to add the new directory mod/certificate/ to the list of ignored files of the main Moodle clone, otherwise a status of the main clone will keep reminding you that the new code has not been checked in.

今や、メイン Moodle クローンの無視されたファイルのリストに、新しいディレクトリ mod/certificate/ を作成することは賢いです。そうでなければ、メインクローンのステータスを見るたびに、新しいコードはチェックインしていない、ということを、いつまでも思い出すことになるでしょう。

$ cd /path/to/your/moodle/

$ echo /mod/certificate/ >> .git/info/exclude

あなたの Moodle インストール環境をアップデートするのは今であり、Git リポジトリとアップストリームの pull cnages の両方を訪問する必要があります。

$ cd /path/to/your/moodle/

$ git pull
$ cd mod/certificate
$ git pull

これらを、shell スクリプトに書いて Moodle のroot に入れるのは、いい考えです。さもなければ、メイン Moodle リポジトリの中にどんな Git リポジトリがあるのかを忘れてしまうでしょう。


7 貢献された extension を Git のサブモジュールを使ってインストールし整備する

前の章で言ったように、これは上級ユーザのみのためです。したがって、Git とそのコマンドについての経験が必要です。順を追っての説明が欲しいでしょうが、これらの手順にしたがうことで、これらのコマンドが何をするかを理解するが役に立つでしょう。

高度なオプションやコマンドは、Git book に見つかります。Git モジュールについて、何か質問があるならば、先ずは上記サイトを訪問してください。


7.1 現存する Moodle にあたらしい extension をインストールする

前の章からの一例として、我々は、Certificate module を使用します。

$ cd /path/to/your/moodle

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

Git は、新しい 2 つのファイルをリポートしていることに注意してください。

$ 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 を含んでいます。あとでリポジトリをクローンするつもりなら、コミットしなければいけません(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

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).

マスターブランチを削除するのは必要ありませんが、保存していても役に立ちません。事実、これらの設定はこれ以降触られることはないのです。

最後の手順は、メインリポジトリに、これらの変化をコミットすることです。

$ cd /path/to/your/moodle

$ git commit -a -m "New extension mod_certificate installed"

コミットは、新しい Git サブモジュールの変化だけを含む(-a コミットは、全ての non-staged な変化であるため)ことを確実にしなければなりません。


7.2 Git サブモジュールを整備する

モジュール達を整備するのは、とても簡単です。いくつかのサブモジュールがインストールされた Moodle リポジトリを考えてみてください。mod_mylittleextension extension が、この一例におけるテストシナリオのために作成された 偽のプラグインであることを覚えておいてください。これは、公式の 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 development environment with Git submodules で読むことができます。


8 参照

Windows installation using Git

Git for Mac

dev:Moodle versions

For fixing a Tracker Issue (MDL) / Forking Moodle / CONTRIButing code User:Sam_Hemelryk/My_Moodle_Git_workflow

Case study Git + Moodle from Technical University Berlin

Moodle のフォーラムの議論

Github and Moodle deployment for production

GIT help needed

Clear git guide for Admins (not developers)

外部リソース

Deploying Moodle from git - Blog post from a production experience

Git Reference

Pro Git book

カテゴリ:インストール