more robust update; will also init submodules if they haven't yet been checked out