diff -urN hg-git-1.2.0-orig/hggit/git2hg.py hg-git-1.2.0/hggit/git2hg.py
--- hg-git-1.2.0-orig/hggit/git2hg.py	2025-02-08 21:36:33 +0900
+++ hg-git-1.2.0/hggit/git2hg.py	2026-03-08 23:59:47 +0900
@@ -5,8 +5,8 @@
 
 from dulwich import config as dul_config
 from dulwich.objects import Commit, Tag
+from dulwich.protocol import PEELED_TAG_SUFFIX
 from dulwich.refs import (
-    ANNOTATED_TAG_SUFFIX,
     LOCAL_BRANCH_PREFIX,
     LOCAL_TAG_PREFIX,
 )
@@ -306,7 +306,7 @@
                     raise error.RepoLookupError(msg)
     else:
         for ref, sha in refs.items():
-            if not ref.endswith(ANNOTATED_TAG_SUFFIX) and (
+            if not ref.endswith(PEELED_TAG_SUFFIX) and (
                 ref.startswith(LOCAL_BRANCH_PREFIX)
                 or ref.startswith(LOCAL_TAG_PREFIX)
                 or ref == b'HEAD'
diff -urN hg-git-1.2.0-orig/hggit/git_handler.py hg-git-1.2.0/hggit/git_handler.py
--- hg-git-1.2.0-orig/hggit/git_handler.py	2025-02-08 21:36:33 +0900
+++ hg-git-1.2.0/hggit/git_handler.py	2026-03-09 00:09:13 +0900
@@ -8,8 +8,8 @@
 from dulwich.errors import HangupException, GitProtocolError, ApplyDeltaError
 from dulwich.objects import Blob, Commit, Tag, Tree, parse_timezone
 from dulwich.pack import apply_delta
+from dulwich.protocol import PEELED_TAG_SUFFIX
 from dulwich.refs import (
-    ANNOTATED_TAG_SUFFIX,
     LOCAL_BRANCH_PREFIX,
     LOCAL_TAG_PREFIX,
 )
@@ -1631,8 +1631,8 @@
             # pull tags pointing to known revisions, including
             # annotated tags
             for ref, sha in refs.items():
-                if ref.endswith(ANNOTATED_TAG_SUFFIX) and sha in self._map_git:
-                    actual_ref = ref[: -len(ANNOTATED_TAG_SUFFIX)]
+                if ref.endswith(PEELED_TAG_SUFFIX) and sha in self._map_git:
+                    actual_ref = ref[: -len(PEELED_TAG_SUFFIX)]
                     filteredrefs.setdefault(actual_ref, refs[actual_ref])
 
             return [x for x in filteredrefs.values() if x not in self.git]
@@ -1844,7 +1844,7 @@
         repotags = self.repo.tags()
         new_refs = {}
         for k in refs:
-            if k.endswith(ANNOTATED_TAG_SUFFIX) or not k.startswith(
+            if k.endswith(PEELED_TAG_SUFFIX) or not k.startswith(
                 LOCAL_TAG_PREFIX
             ):
                 continue
@@ -2025,7 +2025,7 @@
 
         for ref_name, sha in refs.items():
             if (
-                ref_name.endswith(ANNOTATED_TAG_SUFFIX)
+                ref_name.endswith(PEELED_TAG_SUFFIX)
                 or sha not in self.git.object_store
             ):
                 # the sha points to a peeled tag; we should either
@@ -2127,8 +2127,8 @@
         )
 
         for change in changes:
-            oldfile, oldmode, oldsha = change.old
-            newfile, newmode, newsha = change.new
+            oldfile, oldmode, oldsha = change.old if change.old is not None else (None, None, None)
+            newfile, newmode, newsha = change.new if change.new is not None else (None, None, None)
             # actions are described by the following table ('no' means 'does
             # not exist'):
             #    old        new     |    action
@@ -2381,6 +2381,10 @@
                 urlobj.host,
                 urlobj.user,
             )
+            try:
+                auth = next(auth)
+            except StopIteration:
+                auth = None
 
             if self._http_auth_realm:
                 # since we've tried an unauthenticated request, and
