diff --git a/git_guilt/guilt.py b/git_guilt/guilt.py
index 23a748a..3b400c5 100644
--- a/git_guilt/guilt.py
+++ b/git_guilt/guilt.py
@@ -78,13 +78,14 @@ class GitRunner(object):
                 raise GitError("Malformed Git version")
 
         raw_version = self.run_git(GitRunner._version_args)
-        if not (raw_version and
-                1 == len(raw_version) and
-                raw_version[0].startswith('git version')
-                ):
-            raise GitError("Couldn't determine Git version %s" % raw_version)
+        version_re = re.compile(r'^git version (\d+.\d+.\d+)')
 
-        return version_string_to_tuple(raw_version[0].split()[-1])
+        if raw_version and 1 == len(raw_version):
+            match = version_re.match(raw_version[0])
+            if match:
+                return version_string_to_tuple(match.group(1))
+
+        raise GitError("Couldn't determine Git version %s" % raw_version)
 
     def _get_git_root(self):
         # We should probably go beyond just finding the root dir for the Git

Git version detection fails on MacOS
Here's what a friendly user had to report:

> my MACBOOK running latest 10.10.3 comes preinstalled with
```
Laurences-MacBook-Pro:security Laurence$ git version
git version 2.3.2 (Apple Git-55)
```

The parsing code that consumes the output of `git version` should be made more robust.
diff --git a/test/test_guilt.py b/test/test_guilt.py
index 1433e33..3abda65 100644
--- a/test/test_guilt.py
+++ b/test/test_guilt.py
@@ -306,6 +306,27 @@ class GitRunnerTestCase(TestCase):
         )
         mock_process.reset_mock()
 
+    @patch('git_guilt.guilt.subprocess.Popen')
+    def test_mac_version(self, mock_process):
+        mock_process.return_value.communicate = Mock(
+            return_value=(b'git version 2.3.2 (Apple Git-55)', None)
+        )
+        mock_process.return_value.returncode = 0
+        mock_process.return_value.wait = \
+                Mock(return_value=None)
+
+        version_tuple = self.runner._get_git_version()
+
+        mock_process.assert_called_once_with(
+            ['nosuchgit', '--version'],
+            cwd='/my/arbitrary/path',
+            stderr=-1,
+            stdout=-1
+        )
+        mock_process.reset_mock()
+
+        self.assertEquals((2,3,2), version_tuple)
+
     def test_version_comparison(self):
         self.assertEquals((1, 0, 0), self.runner.version)
 

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov
apt-get update apt-get install -y gcc
3.4
requirements-3.4.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
astroid==2.11.7
attrs==22.2.0
Babel==2.11.0
certifi==2021.5.30
charset-normalizer==2.0.12
coverage==6.2
coveralls==3.3.1
dill==0.3.4
docopt==0.6.2
docutils==0.18.1
-e git+https://github.com/mattboyer/git-guilt.git@58f92d3e37a115596a890ad3e2fe674636c682ee#egg=git_guilt
idna==3.10
imagesize==1.4.1
importlib-metadata==4.8.3
iniconfig==1.1.1
isort==5.10.1
Jinja2==3.0.3
lazy-object-proxy==1.7.1
MarkupSafe==2.0.1
mccabe==0.7.0
mock==5.2.0
nose==1.3.7
packaging==21.3
pep8==1.7.1
platformdirs==2.4.0
pluggy==1.0.0
py==1.11.0
Pygments==2.14.0
pylint==2.13.9
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
pytz==2025.2
requests==2.27.1
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinx-argparse==0.3.2
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
tomli==1.2.3
typed-ast==1.5.5
typing_extensions==4.1.1
urllib3==1.26.20
wrapt==1.16.0
zipp==3.6.0

name: git-guilt
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - argparse==1.4.0
      - astroid==2.11.7
      - attrs==22.2.0
      - babel==2.11.0
      - charset-normalizer==2.0.12
      - coverage==6.2
      - coveralls==3.3.1
      - dill==0.3.4
      - docopt==0.6.2
      - docutils==0.18.1
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - isort==5.10.1
      - jinja2==3.0.3
      - lazy-object-proxy==1.7.1
      - markupsafe==2.0.1
      - mccabe==0.7.0
      - mock==5.2.0
      - nose==1.3.7
      - packaging==21.3
      - pep8==1.7.1
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pygments==2.14.0
      - pylint==2.13.9
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytz==2025.2
      - requests==2.27.1
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinx-argparse==0.3.2
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - tomli==1.2.3
      - typed-ast==1.5.5
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - wrapt==1.16.0
      - zipp==3.6.0
prefix: /opt/conda/envs/git-guilt

test/test_guilt.py::GitRunnerTestCase::test_mac_version
test/test_guilt.py::DeltaTestCase::test_comparison test/test_guilt.py::DeltaTestCase::test_eq test/test_guilt.py::DeltaTestCase::test_repr test/test_guilt.py::BinaryDeltaTestCase::test_comparison test/test_guilt.py::BinaryDeltaTestCase::test_eq test/test_guilt.py::BinaryDeltaTestCase::test_repr test/test_guilt.py::ArgTestCase::test_bad_args test/test_guilt.py::ArgTestCase::test_help test/test_guilt.py::GitRunnerTestCase::test_get_delta_files test/test_guilt.py::GitRunnerTestCase::test_get_delta_no_files test/test_guilt.py::GitRunnerTestCase::test_get_git_root_exception test/test_guilt.py::GitRunnerTestCase::test_populate_rev_tree test/test_guilt.py::GitRunnerTestCase::test_run_git test/test_guilt.py::GitRunnerTestCase::test_run_git_cwd test/test_guilt.py::GitRunnerTestCase::test_run_git_exception test/test_guilt.py::GitRunnerTestCase::test_run_git_no_output_error test/test_guilt.py::GitRunnerTestCase::test_run_git_no_output_no_error test/test_guilt.py::GitRunnerTestCase::test_run_git_non_zerp test/test_guilt.py::GitRunnerTestCase::test_run_git_stderr test/test_guilt.py::GitRunnerTestCase::test_version_comparison test/test_guilt.py::GitRunnerTestCase::test_version_retrieval test/test_guilt.py::TextBlameTests::test_blame_locs test/test_guilt.py::TextBlameTests::test_blame_locs_bad_encoding test/test_guilt.py::TextBlameTests::test_blame_locs_empty_file test/test_guilt.py::TextBlameTests::test_blame_locs_exception test/test_guilt.py::TextBlameTests::test_blame_locs_file_missing test/test_guilt.py::TextBlameTests::test_text_blame_repr test/test_guilt.py::BinaryBlameTests::test_bin_blame_repr test/test_guilt.py::BinaryBlameTests::test_blame_bytes test/test_guilt.py::BinaryBlameTests::test_blame_bytes_empty_file test/test_guilt.py::BinaryBlameTests::test_blame_bytes_file_missing test/test_guilt.py::BinaryBlameTests::test_blame_bytes_locs_exception test/test_guilt.py::GuiltTestCase::test_file_not_in_since_rev test/test_guilt.py::GuiltTestCase::test_file_not_in_until_rev test/test_guilt.py::GuiltTestCase::test_map_binary_blames test/test_guilt.py::GuiltTestCase::test_map_text_blames test/test_guilt.py::GuiltTestCase::test_populate_trees test/test_guilt.py::GuiltTestCase::test_reduce_locs test/test_guilt.py::GuiltTestCase::test_show_run test/test_guilt.py::FormatterTestCase::test_get_width_not_tty test/test_guilt.py::FormatterTestCase::test_get_width_tty test/test_guilt.py::FormatterTestCase::test_green test/test_guilt.py::FormatterTestCase::test_red test/test_guilt.py::FormatterTestCase::test_show_binary_guilt test/test_guilt.py::FormatterTestCase::test_show_text_guilt
git_guilt/guilt.py
git_guilt/guilt.py