【发布时间】:2017-06-16 14:30:31
【问题描述】:
关于 Sublime Text Package Control 问题:
我找出导致此错误的原因。我有包All Autocomplete 触发它。然后我去了文件夹Packages/All Autocomplete,发现它是一个 git repo synlinked。然后我删除了指向gitdir: ../.git/modules/All Autocomplete 的.git 文件并重新克隆了存储库,因此它的文件在存储库中。然后包控制停止为包 All Autocomplete 抛出错误,并开始为下一个包执行相同的错误,该包也是一个 git 子模块并且 .git 与父 git 文件夹同步。
因为All Autocomplete是一个子模块,所以它的gits文件在:
-
gitdir: ../.git/modules/All Autocomplete
现在你可以重现它,但你需要:
- 使您的 Packages 文件夹成为 git 存储库,并将
All Autocomplete添加为子模块。 - 删除它,然后使用
git clone --recursive克隆您的Package文件夹repo
这将创建 All Autocomplete 作为 git 子模块并将其文件存储在父 git 文件夹中:
gitdir: ../.git/modules/All Autocomplete
我在 git 子模块 symliked 上调用这个子进程:
我使用python解释器做了一些测试,这是proc = subprocess.Popen()的问题:
>>> import os
>>> import subprocess
>>> startupinfo = subprocess.STARTUPINFO();startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW;
>>> proc = subprocess.Popen( ['C:/Program Files (x86)/Git/bin/git.exe', 'symbolic-ref', '-q', 'HEAD'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, startupinfo=startupinfo, cwd='D:/SublimeText/Data/Packages/amxmodx', env=os.environ )
>>> proc.communicate()
(b'', None)
>>> proc = subprocess.Popen( ['C:/Program Files (x86)/Git/bin/git.exe', 'symbolic-ref', '-q', 'HEAD'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, startupinfo=startupinfo, cwd='D:/SublimeText/Data/Packages/All Autocomplete', env=os.environ )
>>> proc.communicate()
(b'refs/heads/master\n', None)
>>>
在第一个命令中,我使用包amxmodx,它有.git 文件符号链接到gitdir: ../.git/modules/amxmodx。我们得到了输出(b'', None)。
在第二个命令中,我使用包含 .git 文件夹的包 All Autocomplete,因为我只是将它克隆为 git 子模块。因此,由于它不是由git clone --recursive 安装的,所以.git 是
一个文件夹,不是与gitdir: ../.git/modules/ 的符号链接,它上面有实际的 git 文件内容。
因此我们得到了输出(b'refs/heads/master\n', None),它可以正常工作并使包控件不会抛出错误。
如何使用 subprocess.Popen() 调用符号链接的 git 子模块以正常调用未符号链接到 gitdir: ../.git/modules/ 的 git 子模块,从而生成输出 (b'refs/heads/master\n', None) 而不是符号链接子模块的 (b'', None)?
我的系统信息/版本是:
$ git --version
git version 2.13.0.windows.1
$ systeminfo | findstr /B /C:"OS Version"
OS Version: 10.0.15063 N/A Build 15063
$ python --version
Python 3.6.1 :: Anaconda 4.4.0 (32-bit)
更新
我也尝试过使用os.system:
>>> cur_dir = os.getcwd()
>>> os.chdir(r'D:/SublimeText/Data/Packages/All Autocomplete')
>>> os.getcwd()
'D:\\SublimeText\\Data\\Packages\\All Autocomplete'
>>> os.system( r'"C:/Program Files (x86)/Git/bin/git.exe" symbolic-ref -q HEAD' )
refs/heads/master
0
>>> os.chdir(r'D:/SublimeText/Data/Packages/amxmodx')
>>> os.system( r'"C:/Program Files (x86)/Git/bin/git.exe" symbolic-ref -q HEAD' )
1
>>>
我还在 git for windows 上为此打开了一个问题:
【问题讨论】:
标签: python git python-3.x subprocess sublimetext3