new blag post: Mirroring MediaWiki with Git-Mediawiki and gitolite
authorRoland Hieber <rohieb@rohieb.name>
Mon, 24 Mar 2014 02:12:03 +0000 (03:12 +0100)
committerRoland Hieber <rohieb@rohieb.name>
Mon, 24 Mar 2014 02:12:03 +0000 (03:12 +0100)
blag/post/mirroring-mediawiki-with-git-mediawiki-and-gitolite.mdwn [new file with mode: 0644]

diff --git a/blag/post/mirroring-mediawiki-with-git-mediawiki-and-gitolite.mdwn b/blag/post/mirroring-mediawiki-with-git-mediawiki-and-gitolite.mdwn
new file mode 100644 (file)
index 0000000..e8fea90
--- /dev/null
@@ -0,0 +1,188 @@
+[[!meta title="Mirroring MediaWiki with Git-Mediawiki and gitolite"]]
+[[!meta author="rohieb"]]
+[[!meta license="CC-BY-SA 3.0"]]
+
+From Murphy’s Law we can deduct that Internet failures always come when you
+least expect them. In my case, the [Stratum 0 wiki][s0wiki] was offline for a
+few minutes (only, thankfully!) when I really urgently(1!11) needed to look
+something up there. If I only had an offline clone of the wiki…
+
+[s0wiki]: https://stratum0.org/wiki/ "Stratum 0 wiki"
+
+
+Enter: Git-Mediawiki
+--------------------
+
+I had already before discovered [Git-Mediawiki][], which lets you mirror certain
+or all pages of a MediaWiki instance to a local Git repository. It achieves
+this by implementing the `mediawiki::` remote handler, which lets you configure
+the URL of the remote MediaWiki instance as a Git remote, and loads the raw
+revisions from the MediaWiki API everytime you do a `git fetch`:
+
+    $ git clone mediawiki::https://stratum0.org/mediawiki/
+    Cloning into 'mediawiki'...
+    Searching revisions...
+    No previous mediawiki revision found, fetching from beginning.
+    Fetching & writing export data by pages...
+    Listing pages on remote wiki...
+    6 pages found.
+    page 1/78: Vorstand
+      Found 2 revision(s).
+    page 2/78: Atomuhr
+      Found 15 revision(s).
+    page 3/78: Corporate Identity
+      Found 6 revision(s).
+    page 4/78: Presse
+      Found 2 revision(s).
+    [...]
+    1/804: Revision #738 of Presse
+    2/804: Revision #3036 of Atomuhr
+    3/804: Revision #3053 of Atomuhr
+    4/804: Revision #3054 of Atomuhr
+    [...]
+    Checking connectivity... done.
+
+Not to mention, this can take a very long time if you try to import a whole wiki
+(say, Wikipedia (NO, DON’T ACTUALLY DO THIS! (or at least don’t tell them I told
+you how))), but you [can also][gmw-partialimport] import only single pages or
+pages from certain categories with the `-c remote.origin.pages=<page list>` and
+`-c remote.origin.categories=<category list>` options to `git-clone`.
+
+After the clone has finished, you can view the raw MediaWiki source files of
+the pages you imported from your computer. You can even edit them and push the
+changes back to the wiki if you [configure your wiki user account][gmw-auth] in
+your Git config!
+
+[Git-Mediawiki]: https://github.com/moy/Git-Mediawiki "Git-Mediawiki on GitHub"
+[gmw-partialimport]: https://github.com/moy/Git-Mediawiki/wiki/User-manual#partial-import-of-a-wiki "Git-Mediawiki: Partial imports"
+[gmw-auth]: https://github.com/moy/Git-Mediawiki/wiki/User-manual#authentication "Git-Mediawiki: Authentication"
+
+Since I had already played around with Git-Mediawiki, I had a local mirror of
+the Stratum 0 wiki on my laptop. Unfortunately, I had not pulled for a few
+weeks, and the information I needed was only added to the wiki some days ago. So
+for the future, it would be nice to have an automatically synchronising mirror…
+And not only one on my personal laptop, but also for other interested users,
+at least read-only.
+
+
+Mirroring repositores with gitolite
+-----------
+
+The best solution for me was a mirror repository on my own server, which was
+already running [gitolite][], the popular Git hosting solution. I would simply
+add a read-only repository in gitolite and let a cron job handle care of
+automatic synchronisation.
+
+[gitolite]: http://gitolite.com/gitolite/index.html "gitolite main page"
+
+Creating the new repository was easy, you simple add a line to your
+`gitolite.conf`, and when push the changes, gitolite creates the repository for
+you. But furthermore, I also wanted to configure the MediaWiki remote directly
+in my repository setup, for which I needed to specify the corresponding `remote`
+options for the Git configuration. [The appropriate setting to allow
+this][gitolite-config-keys] is in `.gitolite.rc` (gitolite’s main configuration
+file which resides in the gitolite base directory, say `/home/git/` in my case),
+you can simply add the Git config options