A network of sites, tools, and technology to bring ideas into reality.
The Digital Tumbleweed
Thoughts and ramblings of an enthusiast
WoW: Versioning Your Addons
If any of you are like me, you play World of Warcraft and love your mods. I try new mods all the time in the attempt to better my UI. I tend to look at it as a constant work-in-progress. So, I’m trying to find mods that best fulfill the needs I have in the game while minimizing the overhead created on my CPU and RAM. To go along with my addiction to addons, some of the people I play with have the same mentality I do towards mods and constantly tell me to try new mods.
The problem is that you never know if the mod is going to conflict with your setup. Also, if you are upgrading to beta versions of addons you need a way to just rollback. Normally this is done by copying your SavedVariables directory out of your WoW directory. This is tedious. Enter Git.
Git
Git is a version control system generally used when trying to save time and effort on source code. However, it’s also useful on files that have settings. Essentially what version control software does is allow you to make changes to your files, and then recover older, working sets when you completely annihilate your files. Believe me, it happens. Let’s focus on just Git for now to give you an idea of how it works and we’ll apply it later to WoW specifically.
There are a lot of terms that go along with Git. Much of which are irrelevant to the masses. I’ll explain some of the basics.
A repository is the directory that all your Git information is stored. So, if I was in my WoW directory and typed “git init”, that directory is now a git repository. If I was in my Addons directory and typed “git init” I would have made my Addons directory a repository.
Branching is the notion of creating copies of the repository. These branches store the differences between your sets of repositories. When you create your repository, you are actually creating a branch, among other things. The initial branch is called “master”. You create branches by typing “git branch [new name]“. This will branch the current branch you are on. So if you are currently doing things within the “master” branch, you will create a copy of that branch. To see which branches you have and which one is active, type “git branch”. The branch that is starred is your active branch.
When you switch between branches it is understood as a checkout. So, lets assume that I created a branch called “experimental” (git branch experimental). I am not immediately in that branch, I still have to move to it so that I don’t destroy my stable state. I would type “git checkout experimental”.
To save your changes you commit. This means that you store your changes into the branch you are working in. You do this with “git commit”. Now, know that git doesn’t necessarily know about anything new you are adding to the branch without your explicit say-so. Thus, you’ll need to type “git add .”, where the ‘.’ is the current directory, and then ‘git commit -a -m”Saving mah changes!”‘. This will put all your changes into your branch.
At some point you’ll realize that your experimental branch is your preferred setup and you’ll want to make it your master branch. At that point you’ll want to merge your changes. This is easily done with “git merge experimental master”, where ‘experimental’ is the branch with changes and ‘master’ is your stable branch.
One small detail that I neglected to mention till now is that Git runs in a command line. “Oh noes!” Easy! Deep breaths. It’s ok. There are a few ways to tackle this beast (aim for the legs!). You can use the Windows installer for Git or Cygwin. Either will work. If you are using Linux or a Mac, get your terminal on. For the purposes of this I’ll go through it with the Windows installer for Git. For the rest of you the commands above should work assuming you installed Git correctly.
Open “Git Bash”, should be on your Desktop. Once there you should see a command line window (black screen, white text and a blinking cursor). This is good. Once you are here, any of the commands I described above should work.
I could go on for days describing the details that are Git, but this should be the necessary information for your success. If you are interested in learning more, check out the Git documentation.
Git with WoW
Now that we are past some of the basics, lets get into how you can use it in WoW.
When I’m working with new mods/addons/etc. I first go into my Git command line (see above). I change into my World of Warcraft directory.
cd c:
cd Program\ Files/World\ Of\ Warcraft/
Once I’ve moved into my WoW directory, I need to decide what is important in terms of layout. We have our Addons directory inside of the Interface directory, and we have our settings inside the WTF directory.
I’m going to change into my settings directory.
cd WTF/Account/AccountName/
This puts me into my actual account. From here, I want to create a repository because everything here is important to know about when it changes. Note, Auctioneer type data isn’t necessary to know, but will be included here if you use the mod. So I create my repository and then create a branch of the data so I can muck around with settings and not disrupt the stable set.
git init
git add .
git commit -m "Initial commit to stable branch"
git branch experimental
Now that I have my stable and experimental branches, I can move between them by checking each of them out.
git checkout experimental
or
git checkout master
The above allows me to move between branches without any issues.
So, if you’ve gotten this far, that means you’re now ready to version your “settings” files. But, you now need to make sure that you keep the versions going so that you can roll back anything you might mess up later. Let’s say you’ve been gaming for a while and found that your unit frames sucked being right in the screen or that grid was good enough for party frames. So you make some changes to some mods. You need to make sure you commit those changes back into the branch you are working in.
git commit -m "Removed party frames, grid is enough."
Now you’re cooking with fire? Welcome to being a mage…
You’re done with your settings. Congrats, lets move to Addons. I’m going to assume that you are in your WoW directory (see above if you’ve forgotten).
cd Interface/Addons
You need to repeat the steps above.
git init
git add .
git commit -m "Initial commit to stable branch"
git branch experimental
You can now switch between branches and add/remove/modify mods.
When you start getting into this, note that you don’t need to commit every time you leave WoW. It’s just not necessary to track every settings change unless you feel you need that level of control of your UI and the settings within.
I usually run on my master branch for a while and then when I get the urge to change the UI spend a few hours doing it. So, what I tend to do is this:
- Run on ‘master’
- Create a branch: ‘experimental’
- Work on my experimental branch till it’s finished. This includes removing addons (git rm XPerl*).
- When I remove items from my UI I usually commit the changes I’m making and state why. This allows me to be able to switch between branches should we be raiding or if I need to run an instance with someone.
- Once I’m done making my changes and am happy with the outcome, I merge the experimental back into the master.
- Rinse and repeat.
There are uses for Git here without just massive UI modifications too, but I tend to really use it for that.
How do you use Git with your WoWing? Are there any things I missed that you prefer to do? Let me know. Also, let me know if something doesn’t work for you.








This has got to be the geekiest post on the internet. All it needs is a picture of a cosplaying lolcat. I feel like this warrants some kind of trophy. Not the kind you hoist up though. The kind you cry softly into in between buffalo wings.
I laughed pretty hard at that. Thanks!
Good article. Installing GIT now, with GITextension for VS2008 for a demo here at the new job. Have issues with current versioning software. This maybe an alternative to use.
I find this post very useful not at all geeky! This was exactly what I was trying to do. I created this setup in 10 minutes this very morning and think it will be helpful in maintaining my changes to the addons which are not accepted by upstream projects.
As I run wow in wine on Ubuntu I was up and running in a few apt-get
One note about git on a Mac – GitX is a free GUI that makes commits much more fun.
– Ken
Good article.this seems to be a great alternative.thanks for the precious info