diff --git a/git_repo/repo.py b/git_repo/repo.py
index 006dcdf..d612ebb 100644
--- a/git_repo/repo.py
+++ b/git_repo/repo.py
@@ -32,6 +32,7 @@
     {self} [--path=<path>] [-v...] <target> (gist|snippet) delete <gist> [-f]
     {self} [--path=<path>] [-v...] <target> config [--config=<gitconfig>]
     {self} [-v...] config [--config=<gitconfig>]
+    {self} --version
     {self} --help
 
 Tool for managing remote repository services.
@@ -52,6 +53,7 @@
     <namespace>/<repo>       Repository to work with
     -p,--path=<path>         Path to work on [default: .]
     -v,--verbose             Makes it more chatty (repeat twice to see git commands)
+    --version                Show the version
     -h,--help                Shows this message
 
 Options for list:
@@ -142,7 +144,7 @@
 from .tools import print_tty, print_iter, loop_input, confirm
 from .kwargparse import KeywordArgumentParser, store_parameter, register_action
 
-from git import Repo, Git
+from git import Repo, Git, __version__ as GitPythonVersion
 from git.exc import InvalidGitRepositoryError, NoSuchPathError, BadName
 
 class GitRepoRunner(KeywordArgumentParser):
@@ -586,9 +588,39 @@ def main(args):
         return 2
 
 
+class Version:
+    def __str__(self):
+        import importlib
+        s = ['Version: {}'.format(__version__),
+             '  GitPython: {}'.format(GitPythonVersion),
+             '  Services:'
+             ]
+        services = RepositoryService.service_map.values()
+
+        for service in sorted(services, key=lambda s: s.name):
+            version = 'unknown'
+            try:
+                mod = importlib.import_module(service.__module__)
+                package = mod.SERVICE_PACKAGE
+                client = package.__name__
+            except:
+                client = 'unknown'
+            else:
+                try:
+                    version = package.__version__
+                except AttributeError:
+                    pass
+
+            s.append('  {}:'.format(service.name))
+            s.append('    {}: {}'.format(client, version))
+
+        return '\n'.join(s)
+
+
 def cli():  # pragma: no cover
     try:
-        sys.exit(main(docopt(__doc__.format(self=sys.argv[0].split(os.path.sep)[-1], version=__version__))))
+        sys.exit(main(docopt(__doc__.format(self=sys.argv[0].split(os.path.sep)[-1], version=__version__),
+                             version=Version())))
     finally:
         # Whatever happens, make sure that the cursor reappears with some ANSI voodoo
         if sys.stdout.isatty():
diff --git a/git_repo/services/ext/bitbucket.py b/git_repo/services/ext/bitbucket.py
index 651128e..3912bc2 100644
--- a/git_repo/services/ext/bitbucket.py
+++ b/git_repo/services/ext/bitbucket.py
@@ -7,6 +7,7 @@
 from ...exceptions import ResourceError, ResourceExistsError, ResourceNotFoundError
 from ...tools import columnize
 
+import pybitbucket
 from pybitbucket.bitbucket import Client, Bitbucket
 from pybitbucket.auth import BasicAuthenticator
 from pybitbucket.pullrequest import PullRequest, PullRequestPayload
@@ -26,6 +27,9 @@
 import os, json, platform
 
 
+SERVICE_PACKAGE = pybitbucket
+
+
 @register_target('bb', 'bitbucket')
 class BitbucketService(RepositoryService):
     fqdn = 'bitbucket.org'
diff --git a/git_repo/services/ext/gitbucket.py b/git_repo/services/ext/gitbucket.py
index f12c319..4a38266 100644
--- a/git_repo/services/ext/gitbucket.py
+++ b/git_repo/services/ext/gitbucket.py
@@ -9,6 +9,10 @@
 
 import github3
 
+
+SERVICE_PACKAGE = github3
+
+
 @register_target('bucket', 'gitbucket')
 class GitbucketService(GithubService):
     fqdn = "localhost"
diff --git a/git_repo/services/ext/github.py b/git_repo/services/ext/github.py
index 6e7a0ba..034c41d 100644
--- a/git_repo/services/ext/github.py
+++ b/git_repo/services/ext/github.py
@@ -13,6 +13,10 @@
 
 from datetime import datetime
 
+
+SERVICE_PACKAGE = github3
+
+
 GITHUB_COM_FQDN = 'github.com'
 
 @register_target('hub', 'github')
diff --git a/git_repo/services/ext/gitlab.py b/git_repo/services/ext/gitlab.py
index 0fdeb6b..230f6c0 100644
--- a/git_repo/services/ext/gitlab.py
+++ b/git_repo/services/ext/gitlab.py
@@ -17,6 +17,10 @@
 import dateutil.parser
 from datetime import datetime
 
+
+SERVICE_PACKAGE = gitlab
+
+
 @register_target('lab', 'gitlab')
 class GitlabService(RepositoryService):
     fqdn = 'gitlab.com'
@@ -41,6 +45,10 @@ def connect(self):
         self.gl.auth()
         self.username = self.gl.user.username
 
+    def server_version(self):
+        self.connect()
+        return self.gl.version()
+
     def create(self, user, repo, add=False):
         try:
             group = self.gl.groups.search(user)
diff --git a/git_repo/services/ext/gogs.py b/git_repo/services/ext/gogs.py
index dcee00b..7faa54e 100644
--- a/git_repo/services/ext/gogs.py
+++ b/git_repo/services/ext/gogs.py
@@ -7,6 +7,8 @@
 from ...exceptions import ResourceError, ResourceExistsError, ResourceNotFoundError
 from ...tools import columnize
 
+import gogs_client
+
 from gogs_client import GogsApi, GogsRepo, Token, UsernamePassword, ApiFailure
 from requests import Session, HTTPError
 from urllib.parse import urlparse, urlunparse
@@ -17,6 +19,10 @@
 from git import config as git_config
 from git.exc import GitCommandError
 
+
+SERVICE_PACKAGE = gogs_client
+
+
 class GogsClient(GogsApi):
     def __init__(self):
         self.session = Session()