2017-06-16 68 views
0

论崇高文本Package Control问题:如何正确调用符号链接的git子模块?

  1. Why ignore VCS-based packages accordingly to this message?

我找出是什么原因导致这个错误。我有包All Autocomplete触发它。然后我去了文件夹Packages/All Autocomplete,并注意到它是一个git repo synlinked。然后我删除.git文件,指向gitdir: ../.git/modules/All Autocomplete并recloned存储库,因此它的文件在回购站内。然后,程序包控件停止抛出包All Autocomplete的错误,并开始为下一个也是git子模块并且.git与父git文件夹同步的包执行相同的错误。

这是因为All Autocomplete是一个子模块,因此它的控释片文件是:

  1. gitdir: ../.git/modules/All Autocomplete

现在你可以复制它,但你需要:

  1. 要使你的Packages文件夹成为一个git存储库,并将All Autocomplete作为子模块添加。
  2. 删除它,并安装有git clone --recursive

克隆你Package文件夹回购这将创建All Autocomplete作为一个git子模块,并在其上存储文件父git的文件夹:

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

在第一个命令,我做它有.git文件符号链接到gitdir: ../.git/modules/amxmodxamxmodx。我们得到了输出(b'', None)

在第二个命令中,我使用All Autocomplete包,其中包含.git文件夹,因为我只是将它克隆为git子模块。因此,由于它的安装不是git clone --recursive.git是 的一个文件夹,而且不是符号链接到gitdir: ../.git/modules/,所以它有实际的git文件内容。

因此,我们得到了输出(b'refs/heads/master\n', None),它正常工作并使包控件不会抛出错误。

如何拨打电话与subprocess.Popen()一个符号链接git的子模块,以不向符号链接gitdir: ../.git/modules/产生的符号链接子模块的输出(b'refs/heads/master\n', None),而不是(b'', None)一个git子模块的调用正常工作?


我的系统信息/版本:

$ 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 
>>> 

我也开了一个问题,这对windows的git:

  1. How to correctly call a git submodule symlinked?

回答

0

我只是想出了这个问题。当我执行git clone --recursive子模块没有签出他们的默认分支,因此命令git.exe symbolic-ref -q HEAD总是返回空。

该解决方案只是去每个子模块,并做git的结帐主或主默认分支,因此该命令将正常工作,并返回所需的值:

>>> 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') 
refs/heads/master 
0 
>>>