【发布时间】:2021-02-10 22:41:52
【问题描述】:
当我跑步时
proc = subprocess.Popen(['git', 'add', '-A'], stdout=subprocess.PIPE)
我收到此错误
fatal: not a git repository (or any parent up to mount point /media)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
但正在运行
os.system('git add -A')
完美地完成了这项工作。
如果您认为该文件夹没有.git 文件,
proc = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
表明它已经在cwd中了。
为什么Popen 不能暂存文件,也不能提交,而os.system 两者都可以?
更新:
这是我失败的 MWE
import subprocess
import os
cwd = os.getcwd()
proj_path = os.path.join(cwd, 'newproj')
os.makedirs(proj_path)
os.chdir(proj_path)
proc = subprocess.Popen(['git', 'init'], stdout=subprocess.PIPE)
proc = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
print(proc.stdout.read().decode('ascii'))
proc = subprocess.Popen(['git', 'add', '-A'], stdout=subprocess.PIPE)
out, err = proc.communicate()
if err:
print('Error:\n', err.decode())
print(out.decode('ascii'))
输出
.
..
.git
fatal: not a git repository (or any parent up to mount point /media)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
【问题讨论】:
-
@lesmana,如果没有设置 cwd,那么
ls -a怎么会在 cwd 上工作? -
那是……奇怪。你有minimal reproducible example吗?
-
@torek,添加了 MWE。
-
我不确定它会有什么帮助。另一个问题是类似的 git add 不起作用。这是在黑暗中拍摄的。我无法重现您的问题并且感到困惑。这是在您添加最小的工作示例之前。现在很明显这是一个竞争条件。您必须沟通或等待每个子流程。
标签: python python-3.x git git-commit python-3.8