GIT付きMoodleプロダクションサーバ
内容
GITリポジトリスキーム
これがTU BerlinでのMoodle2コードの管理方法の説明です。私たちのMoodle 1.9には、およそ100のものがあります。平均500オンラインユーザー24/7で30000のアクティブユーザー(過去15分間のアクティブユーザー数に基づく)。これはゆっくりとMoodle 2に移ります。私たちにはたくさんのコードの変更とプラグインがあるので、できるだけ自動化されたコードを維持することが不可欠です。
私たちのMoodleはISISと呼ばれています。したがって、ISISという名前のものはすべて私たちのものであり、MOODLEと呼ばれるものはすべてmoodle.orgのものです。
私たちはいくつかのGITリポジトリを使います。ブランチのあるスキームはこのようになります
ISISリモートリポジトリの主な目的はバックアップです。このリモートサーバーを使用せずにローカルリポジトリを使用することでシナリオを想像することができます。リモートリポジトリにgitoliteを使用する場合、開発者と統合マネージャのそれぞれに対してブランチへのアクセスを制限することができるため、コードをきれいに保つほうがより快適です。
新しいmoodleのリリース時に、isis_rebaseブランチに関するパズルについて説明します。
リポジトリをインストールする
元のMoodleコードから始めます。オリエンテーションのために我々は最初にGit_for_Administratorsの非常に有用な記述を読むことを勧めます。そこにアドバイスする代わりに、最初はmoodle.orgリポジトリを複製しません。まずISIS Integrationサーバーに空のリポジトリを作成します。
wendt @ integ:〜$ mkdir isis wendt @ integ:〜$ cd isis / wendt @ integ:〜/ isis $ git init /home/wendt/isis/.git/にある空のGitリポジトリを初期化しました @積分:〜/ isis $
今度はリモートリポジトリとしてmoodle.orgを追加します。
wendt @ integ:〜/ isis $ gitリモート追加moodle git://git.moodle.org/moodle.git @インテグ:wendt @〜/ isis $ git fetch moodle remote:オブジェクトの数を数える:597378、やりました。 remote:オブジェクトの圧縮:100%(141938/141938)、完了 リモート:合計597378(デルタ442383)、再利用597378(デルタ442383) 受信オブジェクト:100%(597378/597378)、223.38 11.16 MiB /秒、完了。 デルタの解決:100%(442383/442383)、完了。 gitから://git.moodle.org/moodle * [新しいブランチ] MOODLE_13_STABLE - > moodle / MOODLE_13_STABLE * [新しいブランチ] MOODLE_22_STABLE - > moodle / MOODLE_22_STABLE 。 。 。 * [新しいブランチ] MOODLE_23_STABLE - > moodle / MOODLE_23_STABLE * [新枝] マスター → ムードル/マスター * [新しいタグ] v1.3.5 - > v1.3.5 。 。 。 * [新しいタグ] v2.3.2 - > v2.3.2 @積分:〜/ isis $
次に、moodle 2.3コードのローカルブランチを作成します。
wendt @ integ:〜/ isis $ gitブランチ--track MOODLE_23_STABLEリモート / moodle / MOODLE_23_STABLE 支店MOODLE_23_STABLEは、Moodle のからリモートブランチMOODLE_23_STABLEを追跡するように設定しました。 wendt @ integ:〜/ isis $ gitチェックアウトMOODLE_23_STABLE 分岐 ' MOODLE_23_STABLE 'に切り替えました @積分:〜/ isis $
これから、私たちは最初のISISコードをフォークします。
wendt @ integ:〜/ isis $ gitチェックアウト-b isis_contrib 新しいブランチ ' isis_contrib 'に切り替えました @積分:〜/ isis $
この時点で、ISISコードを最初にプッシュできる空のISISリモートリポジトリが必要です。最初にリモートのリポジトリとしてローカルのgit-repositoryに追加します。それから、isis_contribブランチをリモートリポジトリの異なるブランチにプッシュします。
wendt @ integ:〜/ isis $ gitリモート追加isis git://isis.remote.tu-berlin.de/isis.git wendt @ integ:〜/ isis $ gitプッシュisis isis_contrib : isis_contrib オブジェクトを数える:472320、完了。 最大4スレッドを使用したデルタ圧縮。 オブジェクトの圧縮:100%(117914/117914)、完了 ライティングオブジェクト:100%(472320/472320)、199.01 17.92 MiB /秒、完了。 合計472320(デルタ347911)、再利用464510(デルタ342938) git://isis.remote.tu-berlin.de/isis.git * [新しいブランチ] isis_contrib - > isis_contrib wendt @ integ:〜/ isis $ gitプッシュisis isis_contrib : isis_productive 合計0(デルタ0)、再利用0(デルタ0) git://isis.remote.tu-berlin.de/isis.git * [新しいブランチ] isis_contrib - > isis_productive wendt @ integ:〜/ isis $ gitプッシュisis isis_contrib : isis_rebase 合計0(デルタ0)、再利用0(デルタ0) git://isis.remote.tu-berlin.de/isis.git * [新しいブランチ] isis_contrib - > isis_rebase @積分:〜/ isis $
リモートISISリポジトリとの同期を維持するために、リモートブランチからローカルブランチへの追跡を行います。
wendt @ integ:〜/ isis $ gitブランチ--track isis_productive remotes / isis / isis_productive 支店はISISからリモートブランチisis_productiveを追跡するように設定isis_productive。 wendt @ integ:〜/ isis $ gitブランチ--track isis_rebase remotes / isis / isis_rebase 支店はISISからリモートブランチisis_rebaseを追跡するように設定isis_rebase。 wendt @ integ:〜/ isis $ gitチェックアウトisis_contrib すでに ' isis_contrib 'にある wendt @ integ:〜/ isis $ gitブランチ--set-upstream remote / isis / isis_contrib ブランチは、ローカルブランチisis_contribを追跡するためにセットアップされた/ isis / isis_contribを リモート処理します。 @積分:〜/ isis $
これで、本番用サーバーにコードを取り込む準備が整いました。リモートのISISリポジトリからコードを取得することはできますが、この方法では多くのオーバーヘッドが発生します。そのため、コードをサーバーに再同期するだけです。
wendt @ integ:〜/ isis $ gitチェックアウトisis_productive ブランチ ' isis_productive 'に切り替えました wendt @ integ:〜/ isis $ cd .. @積分:〜$ rsync -a --delete --exclude = config.php --exclude = .htaccess --exclude = .git / isis admin@www.isis.tu-berlin.de:/ var / www / admin@www.isis.tu-berlin.deのパスワード: wendt @ integ:〜$
このrsyncコマンドは、後でプロダクションコードを更新するときに再び表示されます。この時点で、あなたはあなたのMoodleを使い始め、Moodleのインストール手順に従うことができます。
ローカルコードの開発と変更
私たちの開発者はISISリモートリポジトリを彼らのローカルホームディレクトリにクローンし、それらの変更を準備しテストし、そして結果をISISリモートリポジトリのisis_contribブランチにプッシュバックします。
Develop1 @ mylaptop:〜$ git clone git://isis.remote.tu-berlin.de/isis.git isisへのクローン作成... remote:オブジェクトの数を数える:472320、やりました。 remote:オブジェクトの圧縮:100%(112942/112942)、完了 リモート:合計472320(デルタ347910)、再利用472320(デルタ347910) 受信オブジェクト:100%(472320/472320)、199.03 23.88 MiB /秒、完了。 デルタの解決:100%(347910/347910)、完了。 警告:リモートHEADは存在しない参照を参照しており、チェックアウトできません。 Develop1 @ mylaptop:〜$
変更点を認識するために、リモートのisis_contribブランチからローカルのブランチへのトラッキングを行います。
Develop1 @ mylaptop:〜$ cd isis / Develop1 @ mylaptop:〜/ isis $ gitブランチ-av remotes / origin / isis_contrib 562dbe4週リリース2.3.2+ remotes / origin / isis_productive 562dbe4週リリース2.3.2+ remotes / origin / isis_rebase 562dbe4週間リリース2.3.2+ Develop1 @ mylaptop:〜/ isis $ gitブランチ--track isis_contrib remotes / origin / isis_contrib ブランチisis_contribは、リモートブランチisis_contribを起点から追跡するように設定されています。 Develop1 @ mylaptop:〜/ isis $
ブランチを分岐させて、そこでコードの変更を加えてテストしましょう。
Develop1 @ mylaptop:〜/ isis $ gitチェックアウトisis_contrib ブランチ ' isis_contrib 'に切り替えました Develop1 @ mylaptop:〜/ isis $ gitチェックアウト-b isis_my_code1 新しいブランチ ' isis_my_code1 'に切り替えました Develop1 @ mylaptop:〜/ isis $
コードを変更します。
Develop1 @ mylaptop:〜/ isis $ emacsテーマ/ベース/スタイル/ pagelayout.css Develop1 @ mylaptop:〜/ isis $
コミットしたら、ISISリモートリポジトリにプッシュできます。もちろん、gitを使用してコードを開発および変更し、それをリモートリポジトリにプッシュする方法は1000あります。これはそのうちの1つです。あなたが慣れているものは何でも、自由に使用してください。
Develop1 @ mylaptop:〜/ isis $ gitコミット-a -m "ベーステーマを更新しました" [ isis_my_code1 b5ec6cc]ベーステーマを更新しました 1ファイルが変更され、1挿入(+)、1削除( - ) Develop1 @ mylaptop:〜/ isis $ gitプッシュ元 isis_my_code1 : isis_contrib オブジェクトを数える:11、完了。 最大4スレッドを使用したデルタ圧縮。 オブジェクトの圧縮:100%(6/6)、完了 書き込みオブジェクト:100%(6/6)、511バイト、完了。 合計6(デルタ5)、再利用0(デルタ0) git://isis.remote.tu-berlin.de/isis.git 562dbe4..b5ec6cc isis_my_code1 - > isis_contrib Develop1 @ mylaptop:〜/ isis $
次のコードを変更する前に、 isis_contribブランチを必ず更新してください。
Develop1 @ mylaptop:〜/ isis $ gitチェックアウトisis_contrib ブランチ ' isis_contrib 'に切り替えました あなたのブランチは ' origin / isis_contrib 'より1コミット遅れており、早送りすることができます。 Develop1 @ mylaptop:〜/ isis $ git pull 562dbe4..b5ec6ccを更新中 早送り テーマ/ベース/スタイル/ pagelayout.css | 2 + - 1ファイルが変更され、1挿入(+)、1削除( - ) Develop1 @ mylaptop:〜/ isis $
コード変更を生産的に統合する
統合サーバーに戻って、統合マネージャーは新しいコードの貢献をレビューしテストする必要があります。それでは、ISISリモートリポジトリから新しいコードの変更を取得しましょう。
wendt @ integ:〜/ isis $ gitチェックアウトisis_contrib ブランチ ' isis_contrib 'に切り替えました wendt @ integ:〜/ isis $ git pull remote:オブジェクトの数を数えます:11、完了しました。 remote:オブジェクトの圧縮:100%(6/6)、完了 リモート:合計6(デルタ5)、再利用0(デルタ0) オブジェクトの開梱:100%(6/6)、完了 isis.remote.tu-berlin.de/isisより 562dbe4..b5ec6cc isis_contrib - > isis / isis_contrib 562dbe4..b5ec6ccを更新中 早送り テーマ/ベース/スタイル/ pagelayout.css | 2 + - 1ファイルが変更され、1挿入(+)、1削除( - ) @積分:〜/ isis $
あなたがコード変更のために行くなら、あなたは生産ブランチにマージして、リベースブランチの上にチェリーピックすることができます。私は自分が何をしているのかをより意識することができるので、私はコードをさりげなく選ぶのが好きです。 isis_rebase -branchの上にコードをマージする方法は他にもありますが。
wendt @ integ:〜/ isis $ gitチェックアウトisis_productive ブランチ ' isis_productive 'に切り替えました wendt @ integ:〜/ isis $ gitマージisis_contrib 562dbe4..b5ec6ccを更新中 早送り テーマ/ベース/スタイル/ pagelayout.css | 2 + - 1ファイルが変更され、1挿入(+)、1削除( - ) wendt @ integ:〜/ isis $ gitチェックアウトisis_rebase ブランチ ' isis_rebase 'に切り替えました wendt @ integ:〜/ isis $ gitチェリーピックb5ec6cc チェリーピックを1個終えました。 [isis_rebase ed9bd24]ベーステーマを更新しました 1ファイルが変更され、1挿入(+)、1削除( - ) @積分:〜/ isis $
それでは、変更をISISリモートリポジトリにプッシュします。
wendt @ integ:〜/ isis $ git push オブジェクトを数える:11、完了。 最大4スレッドを使用したデルタ圧縮。 オブジェクトの圧縮:100%(6/6)、完了 書き込みオブジェクト:100%(6/6)、517バイト、完了。 合計6(デルタ5)、再利用0(デルタ0) git://isis.remote.tu-berlin.de/isis.git 562dbe4..b5ec6cc isis_productive - > isis_productive 562dbe4..ed9bd24 isis_rebase - > isis_rebase @積分:〜/ isis $
そして最後に、再度rsyncを適用してソースコードをISISの本稼動サーバにコピーします。
wendt @ integ:〜/ isis $ gitチェックアウトisis_productive ブランチ ' isis_productive 'に切り替えました wendt @ integ:〜/ isis $ cd .. @積分:〜$ rsync -a --delete --exclude = config.php --exclude = .htaccess --exclude = .git / isis admin@www.isis.tu-berlin.de:/ var / www / admin@www.isis.tu-berlin.deのパスワード: wendt @ integ:〜$
毎週のムードルリリースをマージする
今度は、稼働中のMoodleインスタンスをサーバで実行しているので、毎週のMoodleリリースをマージする必要があります。安全のため、これらを本番ブランチに適用する前に、常に新しいテストブランチを分岐してそこでマージプロセスをテストできます。 。数ヶ月間それを練習した後に、すべてはまだ何の衝突もなくスムーズに併合します。
最初に、私たちの追跡しているMoodleブランチで最近のMoodleリリースを入手します。
wendt @ integ:〜/ isis $ gitチェックアウトMOODLE_23_STABLE 分岐 ' MOODLE_23_STABLE 'に切り替えました wendt @ integ:〜/ isis $ git pull remote:オブジェクト数を数える:4304、した。 remote:オブジェクトの圧縮:100%(776/776)、完了 リモート:合計3014(デルタ2310)、再使用2841(デルタ2155) オブジェクトを受け取る:100%(3014/3014)、733.24 KiB | 276 KiB /秒、完了。 デルタの解決:100%(2310/2310)、532のローカルオブジェクトで完了。 gitから://git.moodle.org/moodle a8d6719..9fa159e MOODLE_21_STABLE - > moodle / MOODLE_21_STABLE a8ce907..10c3c37 MOODLE_22_STABLE - > ムードル / MOODLE_22_STABLE 562dbe4..b1c5155 MOODLE_23_STABLE - > ムードル / MOODLE_23_STABLE ccd90e7..7e8ae12 master - > moodle / master 562dbe4..b1c5155を更新中 早送り admin / cli / install.php | 14 + - admin / renderer.php | 2 + - admin / tool / customlang / locallib.php | 2 + - 。 。 。 version.php | 4 + - webservice / lib.php | 2 + - 104ファイルが変更されました、2211挿入(+)、1248削除( - ) 作成モード100644 install / lang / ms / admin.php 作成モード100644 install / lang / ms / install.php 作成モード100644インストール/ lang / ms / moodle.php 削除モード100644 mod / lesson / importppt.php 削除モード100644 mod / lesson / importpptlib.php 作成モード100644 pix / f / epub.png @積分:〜/ isis $
今度は新しいリリースを私たちのisisブランチにマージします。
wendt @ integ:〜/ isis $ gitチェックアウトisis_contrib ブランチ ' isis_contrib 'に切り替えました wendt @ integ:〜/ isis $ gitマージMOODLE_23_STABLE mod / lesson / importppt.phpを削除する mod / lesson / importpptlib.phpを削除する 再帰的なマージ admin / cli / install.php | 14 + - admin / renderer.php | 2 + - admin / tool / customlang / locallib.php | 2 + - admin / tool / customlang / styles.css | 4歳以上 。 。 。 user / selector / search.php | 13 + - version.php | 4 + - webservice / lib.php | 2 + - 104ファイルが変更されました、2211挿入(+)、1248削除( - ) 作成モード100644 install / lang / ms / admin.php 作成モード100644 install / lang / ms / install.php 作成モード100644インストール/ lang / ms / moodle.php 削除モード100644 mod / lesson / importppt.php 削除モード100644 mod / lesson / importpptlib.php 作成モード100644 pix / f / epub.png wendt @ integ:〜/ isis $ gitチェックアウトisis_productive ブランチ ' isis_productive 'に切り替えました wendt @ integ:〜/ isis $ gitマージMOODLE_23_STABLE mod / lesson / importppt.phpを削除する mod / lesson / importpptlib.phpを削除する 再帰的なマージ admin / cli / install.php | 14 + - admin / renderer.php | 2 + - 。 。 。 user / selector / search.php | 13 + - version.php | 4 + - webservice / lib.php | 2 + - 104ファイルが変更されました、2211挿入(+)、1248削除( - ) 作成モード100644 install / lang / ms / admin.php 作成モード100644 install / lang / ms / install.php 作成モード100644インストール/ lang / ms / moodle.php 削除モード100644 mod / lesson / importppt.php 削除モード100644 mod / lesson / importpptlib.php 作成モード100644 pix / f / epub.png @積分:〜/ isis $
名前が示すように、我々はMOODLE_23_STABLE枝の上にisis_rebaseブランチから我々のコードの変更をリベース。
wendt @ integ:〜/ isis $ gitチェックアウトisis_rebase ブランチ ' isis_rebase 'に切り替えました @ integ:〜/ isis $ git rebase MOODLE_23_STABLE まず、頭を巻き戻して自分の作品をその上で再生します。 適用:基本テーマの更新 @積分:〜/ isis $
最後に、すべてをISISリモートリポジトリにプッシュします。
wendt @ integ:〜/ isis $ git push オブジェクトを数える:1062、完了。 最大4スレッドを使用したデルタ圧縮。 オブジェクトの圧縮:100%(159/159)、完了 書き込みオブジェクト:100%(661/661)、151.24 KiB、完了。 合計661(デルタ501)、再利用623(デルタ488) git://isis.remote.tu-berlin.de/isis.git b5ec6cc..df8a1ca isis_contrib - > isis_contrib b5ec6cc..7b75c8e isis_productive - > isis_productive ! [拒否] isis_rebase - > isis_rebase (早送りではない) エラー: 'git://isis.remote.tu-berlin.de/isis.git'への参照をプッシュできませんでした 履歴を失うことを防ぐために、早送りではない更新は拒否されました もう一度押す前に、リモートの変更内容(例えば「git pull」)をマージしてください。を参照してください 詳細については、 'git push --help'の '早送りに関する注意'セクションを参照してください。 @積分:〜/ isis $
もちろん、 isis_rebaseブランチをプッシュすると失敗するので、強制的にプッシュします。
wendt @ integ:〜/ isis $ gitプッシュ--force isis isis_rebase : isis_rebase オブジェクトを数える:11、完了。 最大4スレッドを使用したデルタ圧縮。 オブジェクトの圧縮:100%(6/6)、完了 書き込みオブジェクト:100%(6/6)、515バイト、完了。 合計6(デルタ5)、再利用0(デルタ0) git://isis.remote.tu-berlin.de/isis.git + ed9bd24 ... eeeb43f isis_rebase - > isis_rebase (強制アップデート) @積分:〜/ isis $
新しいMoodleバージョンに基づく
Moodle 2.4の開発中のブランチはMoodle 2.3.0から分岐しているため、最近の生産的ブランチと新しい開発中ブランチとのマージは競合のため失敗することになります。これが、 isis_rebaseブランチに加えてすべてのコード変更を収集する理由です。新しいMoodleリリースが出たら、私たちは単にコード変更をこのリリースの上に再び置くことができ、うまくいけば競合を扱うことが少なくなります。
wendt @ integ:〜/ isis $ gitブランチ-v MOODLE_23_STABLE e6aac11週間リリース2.3.3以降 MOODLE_24_dev 87e9331週間リリース2.4dev isis_rebase 6cc7e47 Ver- /Entschlüsselungderバックアップアーカイブ@author:Jan Eberhardt、10/08/2012 wendt @ integ:〜/ isis $ gitチェックアウトisis_rebase wendt @ integ:〜/ isis $ git rebase - MOODLE_24_dev MOODLE_23_STABLE isis_rebase @積分:〜/ isis $