diff --git a/git_wrapper/repo.py b/git_wrapper/repo.py
index 889efed..f3286f3 100644
--- a/git_wrapper/repo.py
+++ b/git_wrapper/repo.py
@@ -77,18 +77,22 @@ class GitRepo(object):
         return self.repo.git
 
     @staticmethod
-    def clone(clone_from, clone_to):
+    def clone(clone_from, clone_to, bare=False):
         """Clone a repository.
 
            :param str clone_from: The url or path to clone the repo from
            :param str clone_to: The local path to clone to
-           :return git.Repo: Returns the newly created repo object
+           :param bool bare: Whether to create a bare repo
+           :return GitRepo: Returns the newly created repo object
         """
         clone_to = os.path.realpath(os.path.expanduser(clone_to))
-        logging.debug("Preparing to clone repository %s into directory %s", clone_from, clone_to)
+        logging.debug("Preparing to clone repository %s into directory %s",
+                      clone_from, clone_to)
 
         try:
-            repo = git.repo.base.Repo.clone_from(clone_from, clone_to)
+            repo = git.repo.base.Repo.clone_from(clone_from,
+                                                 clone_to,
+                                                 bare=bare)
         except git.GitCommandError as ex:
             msg = "Error cloning repository {repo}".format(repo=clone_from)
             raise_from(exceptions.RepoCreationException(msg), ex)

Provide support for bare repo cloning.
Add support in the clone method to clone a bare repo.
diff --git a/integration_tests/test_clone.py b/integration_tests/test_repo.py
similarity index 93%
rename from integration_tests/test_clone.py
rename to integration_tests/test_repo.py
index d8d83f9..df6f8a8 100644
--- a/integration_tests/test_clone.py
+++ b/integration_tests/test_repo.py
@@ -11,7 +11,7 @@ def test_clone(clone_repo_root, clone_repo_url):
     repo_url = clone_repo_url
 
     # Create a new clone
-    clone = GitRepo.clone(repo_url, repo_root)
+    clone = GitRepo.clone(repo_url, repo_root, bare=True)
 
     # Ensure repo has expected tags, some commits
     assert hasattr(clone, "repo") is True
@@ -22,6 +22,8 @@ def test_clone(clone_repo_root, clone_repo_url):
     tag = clone.repo.commit("0.1.0")
     assert tag.hexsha == "2e6c014bc296be90a7ed04d155ea7d9da2240bbc"
 
+    assert clone.repo.bare is True
+
 
 def test_clone_from_filesystem(clone_repo_root, clone_repo_url, repo_root):
     new_repo_root = clone_repo_root
@@ -35,6 +37,7 @@ def test_clone_from_filesystem(clone_repo_root, clone_repo_url, repo_root):
     clone.repo.commit("f8f7abc4ce87db051f9998c5d4dd153695e35675")
     tag = clone.repo.commit("0.1.0")
     assert tag.hexsha == "2e6c014bc296be90a7ed04d155ea7d9da2240bbc"
+    assert clone.repo.bare is False
 
 
 def test_clone_failed(clone_repo_root, clone_repo_url):
diff --git a/tests/test_repo.py b/tests/test_repo.py
index 71a9dfa..3fa434e 100644
--- a/tests/test_repo.py
+++ b/tests/test_repo.py
@@ -1,7 +1,7 @@
 #! /usr/bin/env python
 """Tests for GitRepo"""
 
-from mock import Mock, patch
+from mock import Mock, patch, ANY
 import shutil
 
 import git
@@ -129,6 +129,17 @@ def test_clone():
         assert isinstance(clone, GitRepo)
 
 
+def test_bare_clone():
+    """
+    GIVEN GitRepo without a path or repo
+    WHEN clone is called with valid parameters and bare set to True
+    THEN Repo.clone_from is called with bare=True
+    """
+    with patch('git.repo.base.Repo.clone_from') as mock_clone:
+        GitRepo.clone('./', './testclone', True)
+        mock_clone.assert_called_with('./', ANY, bare=True)
+
+
 def test_clone_failed():
     """
     GIVEN GitRepo without a path or repo
@@ -157,7 +168,9 @@ def test_destroy_and_reclone(mock_repo, monkeypatch):
     with patch('git.repo.base.Repo.clone_from') as mock_clone:
         clone.destroy_and_reclone()
         assert mock_clone.called is True
-        assert mock_clone.called_with('http://example.com', local_dir)
+        mock_clone.assert_called_with('http://example.com',
+                                      local_dir,
+                                      bare=False)
 
 
 def test_destroy_no_path_no_repo(monkeypatch):
@@ -207,7 +220,9 @@ def test_destroy_no_remote_named_origin(mock_repo, monkeypatch):
     with patch('git.repo.base.Repo.clone_from') as mock_clone:
         clone.destroy_and_reclone()
         assert mock_clone.called is True
-        mock_clone.assert_called_with('http://example.com/another', local_dir)
+        mock_clone.assert_called_with('http://example.com/another',
+                                      local_dir,
+                                      bare=False)
 
 
 def test_destroy_and_multiple_remotes(mock_repo, monkeypatch):
@@ -232,7 +247,9 @@ def test_destroy_and_multiple_remotes(mock_repo, monkeypatch):
         mock_clone.return_value = new_repo_mock
         clone.destroy_and_reclone()
         assert mock_clone.called is True
-        mock_clone.assert_called_with('http://example.com', local_dir)
+        mock_clone.assert_called_with('http://example.com',
+                                      local_dir,
+                                      bare=False)
         new_repo_mock.create_remote.assert_called_with(
             "otherremote",
             "http://example.com/another"

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-datadir pytest-runner mock>=2.0.0
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
coverage==6.2
future==1.0.0
-e git+https://github.com/release-depot/git_wrapper.git@3ac8129d75fe890d45db3911f914f6417355a405#egg=git_wrapper
gitdb==4.0.9
GitPython==3.1.18
importlib-metadata==4.8.3
iniconfig==1.1.1
mock==5.2.0
packaging==21.3
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
pytest-datadir==1.4.1
pytest-runner==5.3.2
smmap==5.0.0
tomli==1.2.3
typing_extensions==4.1.1
wrapt==1.16.0
zipp==3.6.0

name: git_wrapper
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:
      - attrs==22.2.0
      - coverage==6.2
      - future==1.0.0
      - gitdb==4.0.9
      - gitpython==3.1.18
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - mock==5.2.0
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytest-datadir==1.4.1
      - pytest-runner==5.3.2
      - smmap==5.0.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - wrapt==1.16.0
      - zipp==3.6.0
prefix: /opt/conda/envs/git_wrapper

tests/test_repo.py::test_bare_clone tests/test_repo.py::test_destroy_and_reclone tests/test_repo.py::test_destroy_no_remote_named_origin tests/test_repo.py::test_destroy_and_multiple_remotes integration_tests/test_repo.py::test_clone
tests/test_branch.py::test_on_head_only_all_new tests/test_branch.py::test_on_head_only_with_mixed tests/test_branch.py::test_on_head_only_no_new tests/test_branch.py::test_on_head_only_empty tests/test_branch.py::test_all_equivalent_changes tests/test_branch.py::test_equivalent_mixed_changes tests/test_branch.py::test_equivalent_downstream_only tests/test_branch.py::test_equivalent_no_changes tests/test_branch.py::test_rebase tests/test_branch.py::test_rebase_dirty_repo tests/test_branch.py::test_rebase_branch_not_found tests/test_branch.py::test_rebase_hash_not_found tests/test_branch.py::test_rebase_error_during_checkout tests/test_branch.py::test_rebase_error_during_rebase tests/test_branch.py::test_abort_rebase tests/test_branch.py::test_abort_rebase_error tests/test_branch.py::test_apply_patch tests/test_branch.py::test_apply_patch_wrong_branch_name tests/test_branch.py::test_apply_patch_not_a_file tests/test_branch.py::test_apply_patch_checkout_error tests/test_branch.py::test_apply_patch_apply_error tests/test_branch.py::test_apply_diff tests/test_branch.py::test_apply_diff_on_invalid_branch tests/test_branch.py::test_apply_diff_on_dirty_workspace tests/test_branch.py::test_apply_diff_no_commit_message tests/test_branch.py::test_apply_diff_not_a_file tests/test_branch.py::test_apply_diff_checkout_error tests/test_branch.py::test_apply_diff_apply_fails tests/test_branch.py::test_apply_diff_apply_nothing_to_commit tests/test_branch.py::test_abort_patch_apply tests/test_branch.py::test_abort_patch_apply_error tests/test_branch.py::test_reverse_diff tests/test_branch.py::test_reverse_diff_diff_file_doesnt_exist tests/test_branch.py::test_reverse_diff_error tests/test_branch.py::test_log_diff tests/test_branch.py::test_short_log_diff tests/test_branch.py::test_log_diff_with_pattern tests/test_branch.py::test_log_diff_no_results tests/test_branch.py::test_log_diff_invalid_hash tests/test_commit.py::test_describe_tag_and_patch tests/test_commit.py::test_describe_tag_only tests/test_commit.py::test_describe_empty tests/test_commit.py::test_describe_sha_doesnt_exist tests/test_commit.py::test_describe_with_lightweight_tags tests/test_commit.py::test_commit tests/test_commit.py::test_commit_no_changes tests/test_commit.py::test_commit_no_message tests/test_commit.py::test_commit_message_is_not_a_string tests/test_commit.py::test_revert tests/test_commit.py::test_revert_hash_not_found tests/test_commit.py::test_revert_error tests/test_commit.py::test_revert_with_message tests/test_remote.py::test_get_remotes_returns_list tests/test_remote.py::test_add_remote_adds tests/test_remote.py::test_add_remote_adds_fails tests/test_remote.py::test_add_remote_update_fails tests/test_repo.py::test_repo tests/test_repo.py::test_not_path_no_repo tests/test_repo.py::test_git_command tests/test_repo.py::test_remote_setter tests/test_repo.py::test_remote_setter_wrong_type tests/test_repo.py::test_branch_setter tests/test_repo.py::test_branch_setter_wrong_type tests/test_repo.py::test_commit_setter tests/test_repo.py::test_commit_setter_wrong_type tests/test_repo.py::test_clone tests/test_repo.py::test_clone_failed tests/test_repo.py::test_destroy_no_path_no_repo tests/test_repo.py::test_destroy_no_remotes tests/test_repo.py::test_destroy_and_remote_creation_fails integration_tests/test_repo.py::test_clone_failed integration_tests/test_repo.py::test_destroy_and_reclone
git_wrapper/repo.py
git_wrapper/repo.py