diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 696560a78399861f3e1d84e4d29914f5951413b6..944679aa8ecbd7732494df32af4066a086e8f5f9 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1605,6 +1605,13 @@ void GitClient::launchGitK(const QString &workingDirectory)
     tryLauchingGitK(env, workingDirectory, foundBinDir.path() + QLatin1String("/bin"), false);
 }
 
+void GitClient::launchRepositoryBrowser(const QString &workingDirectory)
+{
+    const QString repBrowserBinary = settings()->stringValue(GitSettings::repositoryBrowserCmd);
+    if (!repBrowserBinary.isEmpty())
+        QProcess::startDetached(repBrowserBinary, QStringList(workingDirectory), workingDirectory);
+}
+
 bool GitClient::tryLauchingGitK(const QProcessEnvironment &env,
                                 const QString &workingDirectory,
                                 const QString &gitBinDirectory,
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 00bad95e531d9c660ae1c5cb7a93aafba1f5abd9..434a860e091c6bb0307bbb3cd55d76a80a41696e 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -215,6 +215,8 @@ public:
                            QString *errorMessage = 0, bool *onBranch = 0);
 
     void launchGitK(const QString &workingDirectory);
+    void launchRepositoryBrowser(const QString &workingDirectory);
+
     QStringList synchronousRepositoryBranches(const QString &repositoryURL);
 
     GitSettings *settings() const;
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index b845f4db3448721f96faea0abeea076beb512849..3eec1999d89f9772b029178194397855e07a7083 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -430,6 +430,11 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
                            tr("Launch gitk"), Core::Id("Git.LaunchGitK"),
                            globalcontext, true, &GitClient::launchGitK);
 
+    m_repositoryBrowserAction
+            = createRepositoryAction(actionManager, gitContainer,
+                                     tr("Launch repository browser"), Core::Id("Git.LaunchRepositoryBrowser"),
+                                     globalcontext, true, &GitClient::launchRepositoryBrowser).first;
+
     createRepositoryAction(actionManager, gitContainer,
                            tr("Branches..."), Core::Id("Git.BranchList"),
                            globalcontext, true, SLOT(branchList()));
@@ -1031,11 +1036,19 @@ void GitPlugin::updateActions(VcsBase::VcsBasePlugin::ActionState as)
 
     foreach (QAction *repositoryAction, m_repositoryActions)
         repositoryAction->setEnabled(repositoryEnabled);
+    updateRepositoryBrowserAction();
 
     // Prompts for repo.
     m_showAction->setEnabled(true);
 }
 
+void GitPlugin::updateRepositoryBrowserAction()
+{
+    const bool repositoryEnabled = currentState().hasTopLevel();
+    const bool hasRepositoryBrowserCmd = !settings().stringValue(GitSettings::repositoryBrowserCmd).isEmpty();
+    m_repositoryBrowserAction->setEnabled(repositoryEnabled && hasRepositoryBrowserCmd);
+}
+
 void GitPlugin::showCommit()
 {
     const VcsBase::VcsBasePluginState state = currentState();
@@ -1070,6 +1083,7 @@ void GitPlugin::setSettings(const GitSettings &s)
     m_settings = s;
     m_gitClient->saveSettings();
     static_cast<GitVersionControl *>(versionControl())->emitConfigurationChanged();
+    updateRepositoryBrowserAction();
 }
 
 GitClient *GitPlugin::gitClient() const
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 75bab4fc58d4e90bc752ed86bec45279f93ed497..9ad5f2c344a61cf2d09dfdbbce64cdcfe2be6913 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -175,6 +175,7 @@ private:
                                            const Core::Context &context,
                                            bool addToLocator, GitClientMemberFunc);
 
+    void updateRepositoryBrowserAction();
     bool isCommitEditorOpen() const;
     Core::IEditor *openSubmitEditor(const QString &fileName, const CommitData &cd, bool amend);
     void cleanCommitMessageFile();
@@ -193,6 +194,7 @@ private:
     QAction *m_undoAction;
     QAction *m_redoAction;
     QAction *m_menuAction;
+    QAction *m_repositoryBrowserAction;
 
     QVector<Utils::ParameterAction *> m_fileActions;
     QVector<Utils::ParameterAction *> m_projectActions;
diff --git a/src/plugins/git/gitsettings.cpp b/src/plugins/git/gitsettings.cpp
index 177d79a270feeb8a70f4b83256ea2979b66927eb..095922306c19b83c1b3e251d5c5e85b2cd9fc4df 100644
--- a/src/plugins/git/gitsettings.cpp
+++ b/src/plugins/git/gitsettings.cpp
@@ -49,6 +49,7 @@ const QLatin1String GitSettings::winSetHomeEnvironmentKey("WinSetHomeEnvironment
 const QLatin1String GitSettings::showPrettyFormatKey("DiffPrettyFormat");
 const QLatin1String GitSettings::gitkOptionsKey("GitKOptions");
 const QLatin1String GitSettings::logDiffKey("LogDiff");
+const QLatin1String GitSettings::repositoryBrowserCmd("RepositoryBrowserCmd");
 
 GitSettings::GitSettings()
 {
@@ -70,6 +71,7 @@ GitSettings::GitSettings()
     declareKey(gitkOptionsKey, QString());
     declareKey(showPrettyFormatKey, 2);
     declareKey(logDiffKey, false);
+    declareKey(repositoryBrowserCmd, QString());
 }
 
 QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const
diff --git a/src/plugins/git/gitsettings.h b/src/plugins/git/gitsettings.h
index e381dd014a712308194b984e085a0c2320e3dd46..a6929bd5fd14b9f50a73b9c63c600d0eeeca68fe 100644
--- a/src/plugins/git/gitsettings.h
+++ b/src/plugins/git/gitsettings.h
@@ -56,6 +56,7 @@ public:
     static const QLatin1String showPrettyFormatKey;
     static const QLatin1String gitkOptionsKey;
     static const QLatin1String logDiffKey;
+    static const QLatin1String repositoryBrowserCmd;
 
     QString gitBinaryPath(bool *ok = 0, QString *errorMessage = 0) const;
 
diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp
index bcb3ecedd377861fcf99ef0ff212d2b60a9cfed8..5c023a33584d873edaa06de0d06b4756b3efc8bf 100644
--- a/src/plugins/git/settingspage.cpp
+++ b/src/plugins/git/settingspage.cpp
@@ -36,6 +36,7 @@
 #include "gitclient.h"
 
 #include <vcsbase/vcsbaseconstants.h>
+#include <utils/pathchooser.h>
 
 #include <QCoreApplication>
 #include <QDir>
@@ -65,6 +66,8 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
 #else
     m_ui.winHomeCheckBox->setVisible(false);
 #endif
+    m_ui.repBrowserCommandPathChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
+    m_ui.repBrowserCommandPathChooser->setPromptDialogTitle(tr("Git Repository Browser Command"));
 }
 
 GitSettings SettingsPageWidget::settings() const
@@ -77,6 +80,7 @@ GitSettings SettingsPageWidget::settings() const
     rc.setValue(GitSettings::promptOnSubmitKey, m_ui.promptToSubmitCheckBox->isChecked());
     rc.setValue(GitSettings::winSetHomeEnvironmentKey, m_ui.winHomeCheckBox->isChecked());
     rc.setValue(GitSettings::gitkOptionsKey, m_ui.gitkOptionsLineEdit->text().trimmed());
+    rc.setValue(GitSettings::repositoryBrowserCmd, m_ui.repBrowserCommandPathChooser->path().trimmed());
     return rc;
 }
 
@@ -89,6 +93,7 @@ void SettingsPageWidget::setSettings(const GitSettings &s)
     m_ui.promptToSubmitCheckBox->setChecked(s.boolValue(GitSettings::promptOnSubmitKey));
     m_ui.winHomeCheckBox->setChecked(s.boolValue(GitSettings::winSetHomeEnvironmentKey));
     m_ui.gitkOptionsLineEdit->setText(s.stringValue(GitSettings::gitkOptionsKey));
+    m_ui.repBrowserCommandPathChooser->setPath(s.stringValue(GitSettings::repositoryBrowserCmd));
 }
 
 QString SettingsPageWidget::searchKeywords() const
@@ -105,6 +110,8 @@ QString SettingsPageWidget::searchKeywords() const
             << sep << m_ui.promptToSubmitCheckBox->text()
             << sep << m_ui.gitkGroupBox->title()
             << sep << m_ui.gitkOptionsLabel->text()
+            << sep << m_ui.repBrowserGroupBox->title()
+            << sep << m_ui.repBrowserCommandLabel->text()
                ;
     rc.remove(QLatin1Char('&'));
     return rc;
diff --git a/src/plugins/git/settingspage.ui b/src/plugins/git/settingspage.ui
index 2453404c749c3e0c856af77847ce470536c8a1ec..b12fbe028d30208107bceb53f935c2ffbba549fd 100644
--- a/src/plugins/git/settingspage.ui
+++ b/src/plugins/git/settingspage.ui
@@ -152,6 +152,32 @@
      </layout>
     </widget>
    </item>
+   <item>
+    <widget class="QGroupBox" name="repBrowserGroupBox">
+     <property name="title">
+      <string>Repository browser</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QLabel" name="repBrowserCommandLabel">
+        <property name="text">
+         <string>Command:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="Utils::PathChooser" name="repBrowserCommandPathChooser" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
    <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
@@ -167,6 +193,18 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>Utils::PathChooser</class>
+   <extends>QWidget</extends>
+   <header location="global">utils/pathchooser.h</header>
+   <container>1</container>
+   <slots>
+    <signal>editingFinished()</signal>
+    <signal>browsingFinished()</signal>
+   </slots>
+  </customwidget>
+ </customwidgets>
  <tabstops>
   <tabstop>pathLineEdit</tabstop>
  </tabstops>