diff --git a/hgext/lfs/blobstore.py b/hgext/lfs/blobstore.py
index 0ebd94ac56d13862df511c8e56c76238c5d282d4_aGdleHQvbGZzL2Jsb2JzdG9yZS5weQ==..e7bb5fc4570cace261a2b00fdb2816bd100e59e8_aGdleHQvbGZzL2Jsb2JzdG9yZS5weQ== 100644
--- a/hgext/lfs/blobstore.py
+++ b/hgext/lfs/blobstore.py
@@ -125,7 +125,8 @@
         self.ui = ui
         baseurl, authinfo = url.authinfo()
         self.baseurl = baseurl.rstrip('/')
-        self.urlopener = urlmod.opener(ui, authinfo)
+        useragent = 'mercurial/%s git/2.15.1' % util.version()
+        self.urlopener = urlmod.opener(ui, authinfo, useragent)
         self.retry = ui.configint('lfs', 'retry')
 
     def writebatch(self, pointers, fromstore):
diff --git a/mercurial/url.py b/mercurial/url.py
index 0ebd94ac56d13862df511c8e56c76238c5d282d4_bWVyY3VyaWFsL3VybC5weQ==..e7bb5fc4570cace261a2b00fdb2816bd100e59e8_bWVyY3VyaWFsL3VybC5weQ== 100644
--- a/mercurial/url.py
+++ b/mercurial/url.py
@@ -466,7 +466,7 @@
 
 handlerfuncs = []
 
-def opener(ui, authinfo=None):
+def opener(ui, authinfo=None, useragent=None):
     '''
     construct an opener suitable for urllib2
     authinfo will be added to the password manager
@@ -512,8 +512,14 @@
     # own distribution name. Since servers should not be using the user
     # agent string for anything, clients should be able to define whatever
     # user agent they deem appropriate.
-    agent = 'mercurial/proto-1.0 (Mercurial %s)' % util.version()
-    opener.addheaders = [(r'User-agent', pycompat.sysstr(agent))]
+    #
+    # The custom user agent is for lfs, because unfortunately some servers
+    # do look at this value.
+    if not useragent:
+        agent = 'mercurial/proto-1.0 (Mercurial %s)' % util.version()
+        opener.addheaders = [(r'User-agent', pycompat.sysstr(agent))]
+    else:
+        opener.addheaders = [(r'User-agent', pycompat.sysstr(useragent))]
 
     # This header should only be needed by wire protocol requests. But it has
     # been sent on all requests since forever. We keep sending it for backwards