簡體   English   中英

如何正確調用git子模塊符號鏈接?

[英]How to correctly call a git submodule symlinked?

關於Sublime Text Package Control問題:

  1. 為什么要根據此消息忽略基於VCS的軟件包?

我找出導致此錯誤的原因。 我已經觸發了All Autocomplete軟件包。 然后我去了Packages/All Autocomplete文件夾,發現它是一個git repo synlink。 然后,我刪除了指向gitdir: ../.git/modules/All Autocomplete.git文件gitdir: ../.git/modules/All Autocomplete .git gitdir: ../.git/modules/All Autocomplete並重新克隆了存儲庫,因此其文件位於存儲庫中。 然后,程序包控件停止為該程序包All Autocomplete拋出錯誤,並開始對下一個程序包(也是git子模塊,並將.git同步鏈接到父git文件夾)執行相同的錯誤。

這是因為“ All Autocomplete是一個子模塊,因此其gits文件位於:

  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子模塊上調用此子進程:

我使用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 ,該包具有鏈接到gitdir: ../.git/modules/amxmodx.git文件gitdir: ../.git/modules/amxmodx . .git gitdir: ../.git/modules/amxmodx 然后我們得到了輸出(b'', None)

在第二個命令中,我使用其中包含.git文件夾的軟件包All Autocomplete ,因為我只是將其克隆為git子模塊。 因此,由於其安裝不是通過git clone --recursive.git是一個文件夾,並且不是與gitdir: ../.git/modules/鏈接的gitdir: ../.git/modules/ .git gitdir: ../.git/modules/ ,因此它具有實際的git文件內容。

因此,我們得到了輸出(b'refs/heads/master\\n', None) ,它可以正常工作,並使程序包控件不會引發錯誤。

如何使用subprocess.Popen()來調用gitdir: ../.git/modules/鏈接的git子模塊,使其作為未gitdir: ../.git/modules/鏈接到gitdir: ../.git/modules/的git子模塊的調用而正常工作gitdir: ../.git/modules/ git (b'refs/heads/master\\n', None)會產生輸出(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
>>>

我也在Windows的git上為此打開了一個問題:

  1. 如何正確調用git子模塊符號鏈接?

我只是想出了問題。 當我執行git clone --recursive ,子模塊不在其默認分支上簽出,因此命令git.exe symbolic-ref -q HEAD返回始終為空。

解決方法是轉到每個子模塊並執行git checkout master或main默認分支,因此該命令將正常運行並返回所需的值:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM