diff --git a/AUTHORS b/AUTHORS
index 7b21b2b2..606796d9 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -43,4 +43,5 @@ Contributors are:
 -Liam Beguin <liambeguin _at_ gmail.com>
 -Ram Rachum <ram _at_ rachum.com>
 -Alba Mendez <me _at_ alba.sh>
+-Robert Westman <robert _at_ byteflux.io>
 Portions derived from other open source works and are clearly marked.
diff --git a/git/refs/tag.py b/git/refs/tag.py
index 8f88c522..4d84239e 100644
--- a/git/refs/tag.py
+++ b/git/refs/tag.py
@@ -18,7 +18,8 @@ class TagReference(Reference):
         print(tagref.tag.message)"""
 
     __slots__ = ()
-    _common_path_default = "refs/tags"
+    _common_default = "tags"
+    _common_path_default = Reference._common_path_default + "/" + _common_default
 
     @property
     def commit(self):
diff --git a/git/repo/base.py b/git/repo/base.py
index e23ebb1a..55682411 100644
--- a/git/repo/base.py
+++ b/git/repo/base.py
@@ -402,7 +402,17 @@ class Repo(object):
     def tag(self, path: PathLike) -> TagReference:
         """:return: TagReference Object, reference pointing to a Commit or Tag
         :param path: path to the tag reference, i.e. 0.1.5 or tags/0.1.5 """
-        return TagReference(self, path)
+        full_path = self._to_full_tag_path(path)
+        return TagReference(self, full_path)
+
+    @staticmethod
+    def _to_full_tag_path(path):
+        if path.startswith(TagReference._common_path_default + '/'):
+            return path
+        if path.startswith(TagReference._common_default + '/'):
+            return Reference._common_path_default + '/' + path
+        else:
+            return TagReference._common_path_default + '/' + path
 
     def create_head(self, path: PathLike, commit: str = 'HEAD',
                     force: bool = False, logmsg: Optional[str] = None

diff --git a/test/test_repo.py b/test/test_repo.py
index 8dc17833..04102b01 100644
--- a/test/test_repo.py
+++ b/test/test_repo.py
@@ -414,6 +414,16 @@ class TestRepo(TestBase):
     def test_tag(self):
         assert self.rorepo.tag('refs/tags/0.1.5').commit
 
+    def test_tag_to_full_tag_path(self):
+        tags = ['0.1.5', 'tags/0.1.5', 'refs/tags/0.1.5']
+        value_errors = []
+        for tag in tags:
+            try:
+                self.rorepo.tag(tag)
+            except ValueError as valueError:
+                value_errors.append(valueError.args[0])
+        self.assertEqual(value_errors, [])
+
     def test_archive(self):
         tmpfile = tempfile.mktemp(suffix='archive-test')
         with open(tmpfile, 'wb') as stream:

repo.tag() only accepts 'ref/tags/tagname' instead of just 'tagname'
The param comment for `tag()` in `base.py` mentions `0.1.5` and `tags/0.1.5` as valid inputs, however the call to `TagReference` calls the inherited constructor (`Reference` in reference.py) with the default `check_path=True`, which returns a `ValueError`, if the tag/path given doesnt start with `self._common_path_default + '/'`.

Either the param comment needs to be adjusted or the tag parameter cleaned up so that it only returns the tag value to `Reference.__init__`.


![pycharm64_UlSdzGazov](https://user-images.githubusercontent.com/29196542/120461092-01f2c780-c39a-11eb-8ed4-6fed9370d428.png)
![pycharm64_nnw8DMULi2](https://user-images.githubusercontent.com/29196542/120461085-00290400-c39a-11eb-9a5e-1441919e8a1f.png)

test/test_repo.py::TestRepo::test_tag_to_full_tag_path
test/test_repo.py::TestRepo::test_alternates test/test_repo.py::TestRepo::test_archive test/test_repo.py::TestRepo::test_bare_property test/test_repo.py::TestRepo::test_blame_complex_revision test/test_repo.py::TestRepo::test_blame_incremental test/test_repo.py::TestRepo::test_blame_real test/test_repo.py::TestRepo::test_clone_from_keeps_env test/test_repo.py::TestRepo::test_clone_from_pathlib test/test_repo.py::TestRepo::test_clone_from_pathlib_withConfig test/test_repo.py::TestRepo::test_commit_from_revision test/test_repo.py::TestRepo::test_commits test/test_repo.py::TestRepo::test_comparison_and_hash test/test_repo.py::TestRepo::test_config_level_paths test/test_repo.py::TestRepo::test_config_reader test/test_repo.py::TestRepo::test_config_writer test/test_repo.py::TestRepo::test_creation_deletion test/test_repo.py::TestRepo::test_daemon_export test/test_repo.py::TestRepo::test_date_format test/test_repo.py::TestRepo::test_description test/test_repo.py::TestRepo::test_empty_repo test/test_repo.py::TestRepo::test_git_cmd test/test_repo.py::TestRepo::test_git_work_tree_dotgit test/test_repo.py::TestRepo::test_git_work_tree_env test/test_repo.py::TestRepo::test_heads_should_return_array_of_head_objects test/test_repo.py::TestRepo::test_index test/test_repo.py::TestRepo::test_init test/test_repo.py::TestRepo::test_is_dirty test/test_repo.py::TestRepo::test_is_dirty_pathspec test/test_repo.py::TestRepo::test_is_dirty_with_bare_repository test/test_repo.py::TestRepo::test_leaking_password_in_clone_logs test/test_repo.py::TestRepo::test_merge_base test/test_repo.py::TestRepo::test_new_should_raise_on_invalid_repo_location test/test_repo.py::TestRepo::test_new_should_raise_on_non_existent_path test/test_repo.py::TestRepo::test_pickleable test/test_repo.py::TestRepo::test_remote_method test/test_repo.py::TestRepo::test_repo_odbtype test/test_repo.py::TestRepo::test_repr test/test_repo.py::TestRepo::test_should_display_blame_information test/test_repo.py::TestRepo::test_tag test/test_repo.py::TestRepo::test_tilde_and_env_vars_in_repo_path test/test_repo.py::TestRepo::test_tree_from_revision test/test_repo.py::TestRepo::test_trees