gpt4 book ai didi

Python:致命:不是 git 存储库停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)

转载 作者:行者123 更新时间:2023-12-05 03:45:05 27 4
gpt4 key购买 nike

当我运行时

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).

最佳答案

我的 Python 版本有点落后你的,但我能够重现这个问题,其实很简单:

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)

请注意缺少对 proc.wait() 或类似的任何调用。这意味着我们分拆了一个 git init 并且不等待它

接下来,我们运行 ls -a。在这里我们确实等待了一点——足够长的时间来读取它的输出到 EOF,这实际上是相对较长的,因为 EOF 只是因为 ls -a 完成而发生——同时 git init 仍在运行。根据 git init 工作的速度,我们可能会也可能不会在这里找到 .git 目录。如果这花费的时间足够长,git init 也可能会完成。幸运的是,我系统上的 git initls -a 慢得多,我看到的效果与您相同。 (好吧,我发现 .git 目录有时还不存在。)

最后,我们运行 git add -Agit init 可能仍在运行,也可能不在运行。事实证明,它正在 仍在运行,并且还没有达到将 .git 目录建立为 Git 存储库 的程度。所以 git add -A 提示,你观察到的错误。

如果我们在 git init 之后添加 proc.wait()——理想情况下,我们应该检查返回码,或者简单地使用 subprocess.check_callsubprocess.run 在这里——问题消失了。

关于Python:致命:不是 git 存储库停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66146181/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com