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 GIT schema.png

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_contribisis_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_contribisis_productive
合計0(デルタ0)、再利用0(デルタ0)
git://isis.remote.tu-berlin.de/isis.git
 * [新しいブランチ] isis_contrib - > isis_productive
wendt @ integ:〜/ isis $ gitプッシュisis isis_contribisis_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_code1isis_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_rebaseisis_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 $