← 返回首页
fix(refs): handle quoted branch names · gitpython-developers/GitPython@f21630b · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

Commit f21630b

Browse files
committed
fix(refs): handle quoted branch names
Fixes #550
1 parent 0691441 commit f21630b

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

‎git/refs/head.py‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88
__all__ = ["HEAD", "Head"]
99

1010

11+
def strip_quotes(string):
12+
if string.startswith('"') and string.endswith('"'):
13+
return string[1:-1]
14+
return string
15+
16+
1117
class HEAD(SymbolicReference):
1218

1319
"""Special case of a Symbolic Reference as it represents the repository's
@@ -152,7 +158,7 @@ def tracking_branch(self):
152158
from .remote import RemoteReference
153159
reader = self.config_reader()
154160
if reader.has_option(self.k_config_remote) and reader.has_option(self.k_config_remote_ref):
155-
ref = Head(self.repo, Head.to_full_path(reader.get_value(self.k_config_remote_ref)))
161+
ref = Head(self.repo, Head.to_full_path(strip_quotes(reader.get_value(self.k_config_remote_ref))))
156162
remote_refpath = RemoteReference.to_full_path(join_path(reader.get_value(self.k_config_remote), ref.name))
157163
return RemoteReference(self.repo, remote_refpath)
158164
# END handle have tracking branch

‎git/test/test_refs.py‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,18 @@ def test_heads(self, rwrepo):
119119
assert head.tracking_branch() == remote_ref
120120
head.set_tracking_branch(None)
121121
assert head.tracking_branch() is None
122+
123+
124+
special_name = 'feature#123'
125+
special_name_remote_ref = SymbolicReference.create(rwrepo, 'refs/remotes/origin/%s' % special_name)
126+
gp_tracking_branch = rwrepo.create_head('gp_tracking#123')
127+
special_name_remote_ref = rwrepo.remotes[0].refs[special_name] # get correct type
128+
gp_tracking_branch.set_tracking_branch(special_name_remote_ref)
129+
assert gp_tracking_branch.tracking_branch().path == special_name_remote_ref.path
130+
131+
git_tracking_branch = rwrepo.create_head('git_tracking#123')
132+
rwrepo.git.branch('-u', special_name_remote_ref.name, git_tracking_branch.name)
133+
assert git_tracking_branch.tracking_branch().name == special_name_remote_ref.name
122134
# END for each head
123135

124136
# verify REFLOG gets altered

0 commit comments

Comments
 (0)

Footer

© 2026 GitHub, Inc.