Open
Description
Describe the bug
When executing repo.git.execute with string-type arguments on macOS, it throws a GitCommandNotFound exception:
Traceback (most recent call last):
File "/Users/macuser/.pyenv/versions/3.12.2/lib/python3.12/site-packages/git/cmd.py", line 1262, in execute
proc = safer_popen(
^^^^^^^^^^^^
File "/Users/macuser/.pyenv/versions/3.12.2/lib/python3.12/subprocess.py", line 1026, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/Users/macuser/.pyenv/versions/3.12.2/lib/python3.12/subprocess.py", line 1953, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'git log -n 1'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/macuser/test.py", line 36, in <module>
cmd = repo.git.execute("git log -n 1")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/macuser/.pyenv/versions/3.12.2/lib/python3.12/site-packages/git/cmd.py", line 1275, in execute
raise GitCommandNotFound(redacted_command, err) from err
git.exc.GitCommandNotFound: Cmd('g') not found due to: FileNotFoundError('[Errno 2] No such file or directory: 'git log -n 1'')
I have installed git and it works well on other commands, only repo.git.execute doesn't work'
The error only occurs when passing a string-type argument to repo.git.execute
Works correctly when using string array arguments
Works correctly when using shell=True argument
for example:
# Failing case (string argument)
repo.git.execute("git log -n 1") # Throws exception
# Working case (array argument)
repo.git.execute(["git", "log", "-n", "1"]) # Executes successfully
# Working case (array argument)
repo.git.execute("git log -n 1", shell=True) # Executes successfully
Environment
- Python version: 3.12
- GitPython version: 3.1.43
- Operating System: macOS 14.3.1 (Sonoma)
- Git version: 2.46.0
- By the way, I'm using pyenv