โมดูลย่อยของ Git ดึงเข้าสู่โคลนใหม่ของซุปเปอร์โปรเจ็กต์


87

ตกลง. ก็เลยคิดว่าน่าเลีย ... แต่ตอนนี้ ....

ฉันมีโปรเจ็กต์ที่มีไลบรารีเล็ก ๆ จาก GitHub เป็นโมดูลย่อย ในเวอร์ชันดั้งเดิมของซูเปอร์โปรเจ็กต์นั้นโมดูลย่อยทำงานได้ตามที่คาดไว้

อย่างไรก็ตามฉันเพิ่งโคลน superproject ทำในสิ่งที่ฉันคิดว่าควร: "git submodule init" ทำให้ไดเร็กทอรีของโมดูลย่อยปรากฏขึ้น แต่มันว่างเปล่า

ถ้าตอนนี้ลองทำดู

git submodule update

ฉันเข้าใจ

fatal: Needed a single revision 
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'

ถ้าฉันพยายาม

git submodule foreach git pull

ฉันเข้าใจ

Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.

ใน. git / config ของฉันฉันมีสิ่งนี้:

[submodule "external_libraries/BEACHhtml"]
    url = git@github.com:interstar/BEACHhtml.git

ใน. gitmodules ของฉันฉันมีสิ่งนี้:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git

ใครมีความคิดว่ามีอะไรหายไป?

คำตอบ:


189

ดูเหมือนว่าตอนนี้ (ในปี 2019) การติดตั้งไคลเอนต์ GIT ล่าสุดสามารถแก้ปัญหาได้ตามความคิดเห็นด้านล่าง นี่น่าจะเป็นทางออกที่ดีที่สุดสำหรับตอนนี้


ฉันมีปัญหาเดียวกับคุณ นี่คือบั๊กในคอมไพล์: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

ในระยะสั้นสำหรับปัญหาของคุณลอง:

# rm -rf external_libraries/BEACHhtml
# git submodule update

ดูเหมือนว่ามีบางอย่างผิดปกติกับโฟลเดอร์ชำระเงินก่อนหน้านี้ให้ลบออกและอัปเดตอีกครั้งเพื่อแก้ปัญหา


1
สำหรับฉันมันเป็น git-fetch ที่ถูกแขวนคอซึ่งทำให้โฟลเดอร์ถูกล็อค
Mihai Timar

32
ฉันต้องลบทั้งผังงานโมดูลย่อย ( ext/blah) และโฟลเดอร์ที่ตรงกันด้านล่างGIT_DIR( .git/modules/ext/blah)
Tobu

2
ในกรณีเฉพาะของฉันgit submodule updateยังคงล้มเหลวบนเซิร์ฟเวอร์ CI ของฉันเพราะต้องการให้ใครบางคนยอมรับคีย์ RSA (โดยปกติเซิร์ฟเวอร์ ci จะใช้การเชื่อมต่อ https และนี่เป็นครั้งแรกที่โมดูลย่อยดึงการเชื่อมต่อ ssh) หวังว่าจะช่วยใครสักคนหนึ่งชั่วโมงในการเกาหัว!
Maverik

8
ในปี 2559 ข้อผิดพลาดนี้ยังคงดำเนินต่อไป :(
Paulo Neves

7
ยังคงเช็คอินในปี 2017
william.taylor

4

ฉันมีปัญหานี้ (เครือข่ายที่ไม่สม่ำเสมอดังนั้นฉันจึงทิ้งการชำระเงินโมดูลย่อยแบบนี้) และฉันแก้ไขโดยสร้างสคริปต์นี้ (ตั้งชื่อgit-submodule-fixเพื่อให้ฉันสามารถเรียกใช้เป็นgit submodule-fix)

#!/bin/bash 

for arg 
do 
  echo $arg 
  find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done

หากคุณได้รับเช่นนี้จากไฟล์ git submodule update

fatal: Needed a single revision
Unable to find current revision in submodule path 'some/submodule/path'

ทำ

git submodule-fix some/submodule/path
git submodule update

3

แก้ไขได้โดยการลบ 2 ไดเร็กทอรีและรีเฟรชโมดูลย่อย:

  1. ไปที่external_libraries/BEACHhtmlและตรวจสอบ.gitไฟล์ เนื้อหาควรมีลักษณะดังนี้gitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. ลบทั้งสองexternal_libraries/BEACHhtmlและ.git/modules/external_libraries/BEACHhtmlไดเรกทอรี

จากนี้git submodule updateไปจะทำงานโดยไม่มีข้อผิดพลาด


คุณอาจต้องเรียกใช้git submodule initก่อนgit submodule updateเพื่อให้โมดูลย่อยเริ่มต้นใหม่จากนั้นจึงจะทำงานได้
Pellet


0

ใช้เครื่องมือที่แตกต่างเพื่อเปรียบเทียบโคลนดั้งเดิมที่ใช้งานได้และอันนี้ นอกจากนี้สิ่งที่git submoduleส่งออก ตรวจสอบให้แน่ใจว่าคุณได้ชี้ไปที่สาขาเดียวกันในแต่ละ repo ก่อนที่จะทำ

ฉันสงสัยว่าคุณเปลี่ยนไปใช้สาขาหรือการแก้ไขที่เก่ากว่าโดยที่โมดูลย่อยไม่ได้กำหนดไว้

หวังว่านี่จะช่วยได้


0

ฉันมีปัญหาเดียวกันกับโมดูลย่อยในโครงการ เมื่อฉันพยายามโคลนโมดูลย่อยแยกกันมันก็ใช้ได้ดี

ฉันได้ลองคำตอบทั้งหมดข้างต้นแล้ว แต่ไม่ประสบความสำเร็จ (git submodule update, ... , ลบโฟลเดอร์ submodule, ... )

ปัญหานี้หายไปหลังจากอัปเดต git (จาก Git-1.7.11-preview20120710) เป็นเวอร์ชันล่าสุด (เป็น Git-1.8.1.2-preview20130201) ในเวลานั้น น่าแปลกที่เพื่อนร่วมงานของฉันมีรุ่นเก่ากว่าทำงานได้โดยไม่มีปัญหาใด ๆ แต่พวกเขาใช้ Mac ฉันใช้ Win7 64bit

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.