Brazil's biggest MU Online portal — since 2003
Tutorial Intermediate Infrastructure

How to manage version control for your MU Online server's configuration

Structure a version control system for your MU Online server's configuration using Git, branch conventions, and a changelog — so you can revert changes safely and coordinate your team without overwriting each other's work.

RO Rodrigo · Updated on Aug 3, 2016 · ⏱ 15 min read
Quick answer

MU Online server configuration changes all the time: drop rates, skill cooldowns, seasonal events, new items, class balancing. Without a version control system, every change is a silent risk — a file edited incorrectly, with no recent backup, can crash the server or break the economy without anyone

MU Online server configuration changes all the time: drop rates, skill cooldowns, seasonal events, new items, class balancing. Without a version control system, every change is a silent risk — a file edited incorrectly, with no recent backup, can crash the server or break the economy without anyone knowing exactly what changed or how to revert it. This tutorial shows how to structure your server's configuration version control using Git, commit and branch conventions, and a changelog workflow that lets your team work in parallel without stepping on each other's work.

Why version server configuration

A typical MU server has dozens of configuration files scattered around (drop rates, skills, events, items, NPCs, spawns), often edited by more than one person — the owner, an events GM, a script developer. Without version control, the only way to know "what changed since yesterday" is to manually compare files or rely on the memory of whoever made the edit. With Git, every change is recorded with author, date, reason (commit message), and exact diff — and reverting a problematic change becomes a matter of seconds, not rebuilding everything from scratch from an old backup.

What to version and what not to version

File typeVersion in Git?Reason
Drop, skill, item configuration (.txt/.ini/.xml)YesPlain text, changes frequently, needs history
Event scripts (Lua, JS, etc.)YesCode directly benefits from version control
Database (accounts, characters, in-game items)NoChanges every second in production, doesn't fit text diffs
Large binary files (client, BMD, textures)No (or Git LFS)Size and change frequency make plain Git impractical
Secrets (database passwords, API keys, tokens)No (never in plain text)Security leak risk; use environment variables or a secrets manager

Step 1 — Structure the configuration repository

Create a dedicated repository (separate from the emulator's source code, if possible) just for the configuration your team edits frequently. A typical folder structure:

mu-config/
├── gameserver/
│   ├── drop-rates.ini
│   ├── skill-cooldown.txt
│   └── item-list.xml
├── events/
│   ├── devil-square.ini
│   └── blood-castle.ini
├── changelog/
│   └── CHANGELOG.md
└── README.md

Step 2 — Initialize Git and define .gitignore

cd mu-config
git init
git add .
git commit -m "Initial versioned configuration"

In .gitignore, exclude any file that contains secrets or volatile data:

*.log
*password*
*secret*
database-credentials.ini

Step 3 — Define a commit message convention

A simple convention avoids vague messages like "tweaks" or "fix." Suggested pattern:

PrefixUseExample
feat:New configuration/systemfeat: add level 5 socket configuration
fix:Configuration bug fixfix: correct Dark Knight stun cooldown
balance:Balancing adjustmentbalance: reduce Excellent item drop rate by 15%
event:Seasonal event configurationevent: enable double rates for the July Devil Square
revert:Reverting a previous changerevert: restore Berserker cooldown to previous value

Step 4 — Branching strategy

For servers with a team (more than one person editing configuration), a simple branch strategy works better than unnecessary complexity:

  • main — stable configuration, what's currently running in production.
  • staging — changes tested on a test server, awaiting approval to go to production.
  • feature/change-name — short-lived branches for a specific change (e.g., feature/new-halloween-event).

The flow: create the feature branch, edit and test it in a test environment, open a merge/pull request into staging, validate it, and only then merge into main and apply it to the production server.

Step 5 — Automate configuration deployment

Once a change is approved on main, ideally you have a script (or a simple CI pipeline) that copies the versioned files to the GameServer's actual directory and restarts the affected service, avoiding error-prone manual copying:

#!/bin/bash
# deploy-config.sh
git pull origin main
cp gameserver/*.ini /srv/muserver/Data/
cp gameserver/*.txt /srv/muserver/Data/
systemctl restart muserver-gameserver
echo "Configuration deployed: $(git rev-parse --short HEAD)"

Step 6 — Keep a readable changelog for the community

Besides Git's technical history, maintain a CHANGELOG.md written in player-facing language, for posting on social media and the server's website:

## [2024-06-10]
- Reduced Excellent item drop rate by 15% (economy balancing).
- Fixed Dark Knight Stun cooldown (it was 3s below configured value).
- Added special weekend event with double rates.

Step 7 — Reverting a problematic change

If a published configuration breaks something (economy, balancing, or even server boot), Git lets you revert quickly:

git log --oneline -- gameserver/drop-rates.ini
git revert <problematic-commit-hash>
./deploy-config.sh

This restores the file to its previous state without losing the history of the attempt (the revert commit stays recorded, explaining the reason).

Step 8 — Control team access and permissions

Not every GM or collaborator should have direct merge permission on main. Use protected branch permissions (available on GitHub, GitLab, and Gitea) requiring review from at least one other person before any merge to production — this prevents a poorly calculated balancing change from going live without a second set of eyes.

Common errors and fixes

SymptomLikely causeFix
Nobody knows what changed in the last weekNo version control or vague commitsAdopt a commit convention and require a changelog
A secret (database password) leaked into the repositoryCredentials file committed by mistakeRemove it from history with git filter-repo, rotate the password immediately
Deployment applied the wrong configurationManual deployment without confirming branch/commitAutomate deployment and always check the hash before applying
Two GMs overwrote each other's configurationDirect editing without branch/PRRequire a branch and review before merging to main
Revert didn't fix the problemProblematic change was spread across more than one fileReview the full commit diff, not just the suspected file

Configuration versioning checklist

  • Dedicated Git repository for configuration created.
  • .gitignore configured to exclude secrets and logs.
  • Commit message convention defined and documented.
  • Branching strategy (main/staging/feature) adopted by the team.
  • Automated deployment script tested.
  • Readable changelog maintained for the community.
  • Production branch protected with required review.
  • Revert process tested at least once in a test environment.

With version control structured, your team gains confidence to test balancing changes without fear of irreversibly breaking production. If you're still setting up the server's basic infrastructure, check out the MU Online server creation tutorial before applying this versioning workflow.

Frequently asked questions

Do I need advanced Git knowledge to version server configuration?

No. Basic usage (add, commit, push, branch, revert) already covers 90% of a MU server's needs. Advanced commands like interactive rebase are rarely needed for this kind of project.

Should I version the database along with the configuration files?

Not directly. Databases change constantly with the game in production (accounts, characters, items) and don't fit well into Git. Only version static configuration files and keep separate, scheduled backups of the database.

How do I revert a configuration that broke the server?

If you versioned it with Git, just use 'git revert' or check out the last stable commit for that specific file, restart the affected service, and confirm things are back to normal. Without version control, you depend on manual backups, which tend to be outdated.

Where should I host the configuration repository — public GitHub, private, or self-hosted?

Always in a private repository, whether on GitHub, GitLab, or a self-hosted Gitea instance. MU Online server configuration files often contain sensitive information (database passwords, keys, IPs) that should never be public.

Is it worth using separate branches for each event or season?

Yes, especially if you do seasonal balancing tests. A branch per season/event lets you test isolated changes and only merge into the main branch once approved, without risking the stable production configuration.

RO
Founder & editor-in-chief

Rodrigo has run ViciadosMU since the portal's early days. A specialist in MU Online server creation and administration, game history and the evolution of the seasons — he wrote much of the archive before 2024.

Keep reading

Related articles