Batch Updating Submodule URLs

Posted by Jeremy Harris on Sun, Jun 26, 2011 @ 10:18am

Since I have moved all of my plugins to Github, there's obviously some updating that needs to be done on my CakePHP apps that use those plugins as git submodules. Namely, I needed to replace the old repo urls with the new ones. To do this, I first opened up my .gitmodules file using vim.

$ vim .gitmodules

Then just some regexp happiness from command mode.

:%s/git\(:\/\/\|@\)codaset\.com\(:\|\/\)jeremyharris\//git:\/\/github\.com\/jeremyharris\//g

It looks like a lot, but it's really nothing special (just a lot of character escaping). It looks for instances of my old Codaset repo urls and replaces them with the read-only Github ones. Just to note, it looks for my Codaset read+write ssh urls as well as the regular read-only http ones. Technically this isn't the cleanest regexp (no word boundaries, matches all combinations of :|@ and :|/), but because of the nature of the contents of the file there's really no need.

Finally, I had named some of my plugins using - as a space delimeter rather than _. To make it easier to clone modules into Cake apps, I've renamed them using _ in Github. To fix this in my .gitmodules file, I ran

:g/jeremyharris/s/-/_/

This command looks for lines containing my name and replaces - with _. Then just save using :wq.

After that, simply sync the new repo urls with git.

$ git submodule sync
Posted in Regexp, Git, Programming, Vim