← 返回首页
BrokenPipeError on KeyboardInterrupt · Issue #427 · gitpython-developers/GitPython · 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

BrokenPipeError on KeyboardInterrupt #427

New issue
New issue

Description

I am using the latest GitPython on pip and I have bumped into a weird behavior, that seems to be buggy. I have replicated the behavior both with Python 2.7 and 3.4 and has emerged after updating to newer versions of GitPython. Consider the following snippet (assumes a git repository on the current directory):

import time from git import Repo, TagReference repository = Repo('.') current_commit = repository.head.commit tag_object = TagReference.create(repository, 'test', message='msg') try: for i in range(10): time.sleep(1) except KeyboardInterrupt: print("Interrupted. Exiting gracefully...") data = tag_object.tag.message

If you interrupt (Ctrl+C) the loop, then the last statement fails with a broken pipe exception (full stack trace below). If the code is not interrupted everything succeeds. Also removing the current_commit = repository.head.commit line, makes the problem go away, even if you interrupt a loop.

I presume that it has to do with the handling of the SIGTERM emitted with a Ctrl+C, but I am not sure if this is true.

The stack trace:

Traceback (most recent call last): File "./bugreplicate.py", line 15, in <module> data = tag_object.tag.message File "/usr/local/lib/python2.7/dist-packages/git/refs/tag.py", line 40, in tag obj = self.object File "/usr/local/lib/python2.7/dist-packages/git/refs/symbolic.py", line 176, in _get_object return Object.new_from_sha(self.repo, hex_to_bin(self.dereference_recursive(self.repo, self.path))) File "/usr/local/lib/python2.7/dist-packages/git/objects/base.py", line 65, in new_from_sha oinfo = repo.odb.info(sha1) File "/usr/local/lib/python2.7/dist-packages/git/db.py", line 40, in info hexsha, typename, size = self._git.get_object_header(bin_to_hex(sha)) File "/usr/local/lib/python2.7/dist-packages/git/cmd.py", line 984, in get_object_header return self.__get_object_header(cmd, ref) File "/usr/local/lib/python2.7/dist-packages/git/cmd.py", line 972, in __get_object_header cmd.stdin.flush() IOError: [Errno 32] Broken pipe

Some more context: I am using GitPython for experimenter link and need a way to handle KeyboardInterruptions. When a Ctrl+C is pressed, I want to be able to safely store data into the git repository.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Footer

      © 2026 GitHub, Inc.