ไม่พบการแมป submodule ใน. gitmodule สำหรับเส้นทางที่ไม่ใช่ submodule


335

ฉันมีโครงการที่มี submodule ที่ lib/three20

.gitmoduleไฟล์ของฉันมีลักษณะเช่นนี้:

[submodule "lib/three20"]
    path = lib/three20
    url = git://github.com/facebook/three20.git

ฉันได้โคลนสิ่งนี้ในอดีตโดยไม่มีข้อผิดพลาด ( git submodule initตามมาด้วยgit submodule update) และมันใช้งานได้ระยะหนึ่งแล้ว

ฉันพยายามโคลนสิ่งนี้กับเครื่องใหม่และตอนนี้ฉันได้รับข้อผิดพลาดนี้ในgit submodule init:

No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'

เส้นทางนั้นเป็นเพียงโฟลเดอร์ว่างใน Xcode ที่ฉันใช้เพื่อบ้านโครงการจากไดเรกทอรีอื่น มันไม่ได้เป็นส่วนหนึ่งของ.gitmodulesไฟล์ดังนั้นฉันไม่เห็นว่าเส้นทางมาจากที่ใด

ความคิดใด ๆ


1
ดูเหมือนว่าคุณอาจจัดการเพื่อเพิ่มเส้นทางนั้นเป็น gitlink - submodule เป็นการรวมกันของ gitlink และรายการในไฟล์. gitmoddules และ. git / config มีคำถามเมื่อเร็ว ๆ นี้เกี่ยวกับเรื่องนี้; พยายามที่จะหามัน ...
Cascabel


@Jefromi - ฉันไม่สามารถพูดถึงเส้นทางที่ใดก็ได้ใน.gitโฟลเดอร์ การทำgrep -r "Classes/Support/Three20" *.*ไม่ส่งผลใด ๆ เช่นกัน
Ben Scheirman

2
@Ben: ทำไมคุณค้นหาข้อความนั้นในโฟลเดอร์. git นั่นไม่ใช่วิธีที่คอมไพล์จัดเก็บเนื้อหา หากคุณต้องการตรวจสอบว่าคอมไพล์คิดอย่างไรลองgit ls-tree HEAD Classes/Supportและถ้ามันบอกว่า Three20 เป็นคอมมิทจะมี gitlink อยู่ที่นั่น หากมีให้ทำตามคำแนะนำที่เหมาะสมจากคำถาม VonC ที่ลิงก์ด้านบนเพื่อเปลี่ยนเป็น submodule ที่เหมาะสมหรือเปลี่ยนเป็นเนื้อหาที่ติดตามเป็นประจำ
Cascabel

2
สำหรับผู้เข้าชมในอนาคตในกรณีที่ปัญหาของคุณเชื่อมโยงกับ submodule ที่ลบแล้วและ heroku โยนข้อผิดพลาดให้ติดตั้ง heroku-repo จากgithub.com/heroku/heroku-repoและ heroku repo: รีเซ็ต -a appname
fadomire

คำตอบ:


310

ต่อไปนี้คำตอบของrajibchowdhury (upvoted) ใช้คำสั่งที่แนะนำสำหรับการลบรายการพิเศษในดัชนีที่ระบุว่า submodule ('โฟลเดอร์' ด้วยโหมดพิเศษ) git rm160000

หากเส้นทางรายการพิเศษนั้นไม่ได้ถูกอ้างถึงใน.gitmodule(เช่น ' Classes/Support/Three20' ในคำถามเดิม) คุณต้องลบออกเพื่อหลีกเลี่ยงข้อความแสดงข้อผิดพลาด" ไม่พบการแมป submodule ใน.gitmodulesเส้นทาง "

คุณสามารถตรวจสอบรายการทั้งหมดในดัชนีซึ่งอ้างอิง submodules:

git ls-files --stage | grep 160000

คำตอบก่อนหน้า (พฤศจิกายน 2010)

เป็นไปได้ว่าคุณยังไม่ได้ประกาศ submodule เริ่มต้นของคุณอย่างถูกต้อง (เช่นไม่มีส่วนท้าย '/' ในตอนท้ายตามที่อธิบายไว้ในคำตอบเก่าของฉันแม้ว่าคุณจะ.gitmoduleมีเส้นทางที่ดูโอเคอยู่ก็ตาม)

หัวข้อนี้กล่าวถึง:

คุณได้รับข้อผิดพลาดเดียวกันเมื่อเรียกใช้ 'git submodule init' จากโคลนนิ่งใหม่
ถ้าเป็นเช่นนั้นคุณมีบางอย่างผิดปกติ

หากคุณไม่มี submodules ลบ.gitmodulesและการอ้างอิงใด ๆ ถึง submodules ใน. git / config และให้แน่ใจว่า Pikimal dir ไม่มี.gitdir อยู่
หากวิธีนี้แก้ไขปัญหาได้ให้ทำการเช็คอินและทำเช่นเดียวกันกับสำเนาการทำงานของการล่องเรือของคุณ

เห็นได้ชัดว่าอย่าลบ.gitmodulesไฟล์หลักของคุณแต่ดูแล.gitmodulesไฟล์พิเศษอื่น ๆในแผนผังการทำงานของคุณ


ยังอยู่ในหัวข้อ "การเริ่มต้น submodule ที่ไม่ถูกต้อง" Jefromiกล่าวถึง submodules ซึ่งจริงๆแล้วเป็น gitlinks

ดูวิธีติดตามเนื้อหาที่ไม่ได้ติดตามได้อย่างไร เพื่อที่จะแปลงไดเรกทอรีดังกล่าวเป็น submodule จริง


5
ฉันไม่มีไฟล์. gitmodules และฉันยังคงได้รับข้อความนี้ทุกครั้งที่เช็คเอาต์ ฉันจะทำอย่างไร
aaronbauman

2
พบคำตอบของฉันที่นี่: stackoverflow.com/questions/14720034/…
aaronbauman

4
@aaronbauman ใช่คุณต้องลบ gitlink ดังนั้นgit rm xxx(โดยไม่ต้องต่อท้ายสแลช) git rm --cachedช่วยให้คุณสามารถเก็บไว้ในดิสก์ในขณะที่ลบออกจากดัชนี
VonC

หลังจากรัน git ls-files --stage | grep 16000 ฉันได้พบบางรายการ ฉันจะลบสิ่งเหล่านี้ได้อย่างไร
John Mike

1
@JohnMike ถ้าคุณมี.gitmoduleการอ้างอิงถึงรายการเหล่านั้นแล้วstackoverflow.com/a/16162000/6309 ถ้าไม่เป็นเรื่องง่ายgit rm afolder(ไม่มีส่วนท้าย / สแลช)
VonC

412

ไม่พบการแมป submodule ใน. gitmodules สำหรับเส้นทาง 'OtherLibrary / MKStore' เมื่อใด

$ git submodule update --init

ฉันไม่รู้ว่าทำไมข้อผิดพลาดเกิดขึ้น หลังจากใช้เวลาสักครู่และพบคำตอบใน stackoverflow

$ git rm --cached OtherLibrary/MKStore

จากนั้นอัปเดต submodule อีกครั้ง มันทำงานได้ดี

http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules


2
มันทำงานสำหรับฉันหลังจากมีการแก้ไขไฟล์. gitmodules เพื่อเปลี่ยน https: // links โดย git: // links
Diwann

1
สิ่งนี้ใช้ได้สำหรับฉันเช่นกัน แต่ฉันต้องแน่ใจว่าไม่มีเครื่องหมายทับที่ส่วนท้ายของเส้นทาง submodule
เตอร์

ฉันไม่อยากจะเชื่อเลยว่าฉันลืมตัวเลือก init หากคุณโคลนโครงการควรเริ่ม submodules ก่อนที่จะอัปเดต
alex

ต้องเรียกใช้ในไดเรกทอรีรากของ repo แล้วทุกอย่างทำงานได้ดี ขอบคุณ!
Pwdr

ขอบคุณมากสำหรับคำสั่งrm ผมเรียกgit submodule sync | grep "mapping found"แล้วและอีกครั้งgit rm git submodule syncปัญหาหายไป!
nine9five

24

เมื่อฉันใช้ SourceTree เพื่อทำสิ่งนั้นมันจะคายข้อความนี้
ข้อความที่ฉันพบ:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree submodule update --init --recursive
No submodule mapping found in .gitmodules for path 'SampleProject/SampleProject'
Completed with errors, see above

สถานการณ์ของฉันฉันใช้ไดเรกทอรีโครงการที่มีโฟลเดอร์. git ในทางที่ผิด
SourceTree ถือว่าโฟลเดอร์นี้เป็น submodule คอมไพล์ แต่จริงๆแล้วไม่

โซลูชันของฉันคือใช้บรรทัดคำสั่งเพื่อลบ

$ git rm -r SampleProject --cached
$ git commit -m "clean up folders"

เอาขยะในคอมไพล์และทำความสะอาด


17

ฉันแก้ไขปัญหานี้ให้ฉันแล้ว ตอนแรกฉันพยายามทำสิ่งนี้:

git submodule add --branch master [URL] [PATH_TO_SUBMODULE]

มันจะเปิดออกสเปคของตัวเลือก --branch ไม่ควรใช้ในกรณีที่คุณต้องการในการโคลนสาขาต้นแบบ มันพ่นข้อผิดพลาดนี้:

fatal: Cannot force update the current branch.
Unable to checkout submodule '[PATH_TO_SUBMODULE]'

ทุกครั้งที่คุณพยายามทำ

git submodule sync

ข้อผิดพลาดนี้จะถูกโยน:

No submodule mapping found in .gitmodules for path '[PATH_TO_SUBMODULE]'

และบรรทัดที่จำเป็นใน. gitmodules จะไม่ถูกเพิ่มเข้าไป

ดังนั้นทางออกสำหรับฉันคือ:

git submodule add [URL] [PATH_TO_SUBMODULE]

9

ฉันเพิ่งพบข้อผิดพลาดนี้หลังจากพยายาม "git submodule init" เมื่อเช็คเอาต์ repo ใหม่ของฉัน ปรากฎว่าฉันได้ระบุโฟลเดอร์ย่อยของโมดูลด้วยตัวพิมพ์ผิดในตอนแรก เนื่องจากฉันใช้ Mac ที่มีระบบไฟล์เล็ก ๆ น้อย ๆ (hurr) มันจึงล้มเหลว ตัวอย่างเช่น:

git submodule add git@github.com:user/project.git MyApp/Resources/Project
Cloning into 'MyApp/Resources/Project'

สำเร็จ แต่ปัญหาคือว่าบนดิสก์เส้นทางคือ

Myapp/Resources/Project

สิ่งที่ฉันไม่เข้าใจคือสาเหตุที่ git เริ่มต้นโมดูลไปยังโฟลเดอร์ที่ไม่ถูกต้อง (ละเว้นกรณีที่ไม่ถูกต้องในคำสั่งของฉัน) แต่จากนั้นทำงานอย่างถูกต้อง


เหมือนกันที่นี่ (Windows) แม้ว่าฉันจะไม่เข้าใจว่าทำไม คุณควรระบุโฟลเดอร์ที่มีตัวเรือนที่แตกต่างกันสำหรับการชำระเงินและไม่ควรเปลี่ยนชื่อโมดูล
Xavier Poinas


5

เพิ่งมีปัญหานี้ ในขณะที่ฉันลองคำแนะนำเกี่ยวกับการลบเส้นทาง, git ลบเส้นทาง, ลบ. gitmodules, ลบรายการจาก. git / config, เพิ่ม submodule กลับไป, จากนั้นส่งและผลักดันการเปลี่ยนแปลง มันน่างงงวยเพราะดูเหมือนว่าจะไม่มีการเปลี่ยนแปลงเมื่อฉันทำ "git commit -a" ดังนั้นฉันจึงพยายามผลักเพียงแค่ลบออกจากนั้นกดปุ่ม readdition เพื่อให้ดูเหมือนการเปลี่ยนแปลง

หลังจากที่ฉันสังเกตเห็นโดยบังเอิญว่าหลังจากลบทุกอย่างถ้าฉันวิ่ง "git submodule update - init" มันมีข้อความเกี่ยวกับชื่อเฉพาะที่ git ไม่ควรมีการอ้างอิง: ชื่อของพื้นที่เก็บข้อมูลที่ submodule เชื่อมโยงกับไม่ใช่ชื่อพา ธ ที่ตรวจสอบแล้ว Grepping เปิดเผยว่าการอ้างอิงนี้อยู่ใน. git / index ดังนั้นฉันจึงวิ่ง "git rm --cache repo-name" จากนั้นอ่านโมดูลอีกครั้ง เมื่อฉันยืนยันในครั้งนี้ข้อความยืนยันได้รวมการเปลี่ยนแปลงซึ่งเป็นการลบวัตถุที่ไม่คาดคิดนี้ หลังจากนั้นก็ใช้งานได้ดี

ไม่แน่ใจว่าเกิดอะไรขึ้นฉันเดาว่ามีคนใช้คำสั่ง god submodule ในทางที่ผิด อาจเป็นฉันได้ ... หวังว่านี่จะช่วยใครซักคน!


5

ในไฟล์. gitmodulesฉันแทนที่สตริง

"path = thirdsrc\boost" 

กับ

"path = thirdsrc/boost", 

และแก้ไขได้! - -


ขอบคุณแก้ไขปัญหาของฉัน อาจเป็นปัญหาที่เกิดขึ้นใน windows ในกรณีที่เส้นทางของฉันคือ "เส้นทาง = บางสิ่งบางอย่าง \\ โฟลเดอร์"
Roozbeh G

สิ่งนี้ใช้ได้กับฉันเมื่อฉันพบข้อผิดพลาดเมื่อใช้ git-lfs แทน git บน windows (ไม่มีข้อผิดพลาดเกิดขึ้นเมื่อใช้คอมไพล์มาตรฐาน)
frage

5

การทำแผนที่โฟลเดอร์สามารถพบได้ใน.git/modulesโฟลเดอร์ (แต่ละคนมีconfigไฟล์ที่มีการอ้างอิงถึงมันworktree) เพื่อให้แน่ใจว่าโฟลเดอร์เหล่านี้สอดคล้องกับการกำหนดค่าในและ.gitmodules.git/config

ดังนั้น.gitmodulesมีเส้นทางที่ถูกต้อง:

[submodule "<path>"]
  path = <path>
  url = git@github.com:foo/bar.git

และ.git/modules/<path>/configใน[core]ส่วนที่คุณได้เส้นทางที่ถูกต้องที่คุณ<path>เช่น

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  worktree = ../../../<path>

หากโฟลเดอร์ที่เหมาะสมในการ.git/modulesจะหายไปแล้วคุณจะไป dir submodule ของคุณและพยายามหรือgit reset HEAD --hard git checkout master -fในกรณีนี้จะไม่ช่วยคุณอาจต้องการที่จะลบข้อมูลทั้งหมดไปยัง submodule เสียและเพิ่มอีกครั้งแล้วโปรดดูที่: เปลี่ยนชื่อ submodule


3

สถานการณ์จำลอง: การเปลี่ยน submodule จากไดเร็กทอรี dirA-xxx เป็นไดเร็กทอรีอื่น dirB-xxx

  1. ย้าย dirA-xxx ไปยัง dirB-xxx
  2. แก้ไขรายการใน. gitmodules เพื่อใช้ dirB-xxx
  3. แก้ไขรายการใน. git / config เพื่อใช้ dirB-xxx
  4. แก้ไข. git / modules / dirA-xxx / config เพื่อแสดงถึงไดเรกทอรีที่ถูกต้อง
  5. แก้ไข dirA-xxx / .git เพื่อให้สะท้อนถึงไดเรกทอรีที่ถูกต้อง
  6. วิ่ง git submodule status

    หากข้อผิดพลาดการส่งคืน: ไม่พบการแมป submodule ใน. gitmodules สำหรับเส้นทาง dirA-xxx นี่เป็นเพราะ dirA-xxx ไม่มีอยู่จริง แต่มันก็ยังถูกติดตามโดย git อัปเดตดัชนี git โดย:git rm --cached dirA-xxx

    git submodule foreach git pullลองกับ ฉันไม่ได้ผ่านการศึกษาจริงของโครงสร้าง submodule git ดังนั้นขั้นตอนข้างต้นอาจทำลายบางสิ่งบางอย่าง อย่างไรก็ตามเมื่อทำตามขั้นตอนข้างต้นสิ่งต่างๆก็ดูดีในขณะนี้ หากคุณมีข้อมูลเชิงลึกหรือขั้นตอนที่เหมาะสมในการทำสิ่งต่างๆให้แชร์ที่นี่ :)


1

โดยปกติ git จะสร้างไดเรกทอรีที่ซ่อนอยู่ในไดเรกทอรีรากของโครงการ (.git /)

เมื่อคุณทำงานกับ CMS เป็นไปได้ที่คุณจะติดตั้งโมดูล / ปลั๊กอินที่มี. git / directory พร้อมกับ metadata ของ git สำหรับโมดูล / ปลั๊กอินเฉพาะ

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


1

หลังจากดูที่ของฉัน.gitmodulesมันกลับกลายเป็นว่าฉันมีตัวอักษรตัวพิมพ์ใหญ่ที่ฉันไม่ควรมี ดังนั้นโปรดจำไว้ว่า.gitmodulesไดเรกทอรีนั้นคำนึงถึงขนาดตัวพิมพ์


1
คุณแน่ใจหรือว่าคุณไม่ได้ตั้งใจ.gitmodulesแทน
Serhii Kheilyk

0

ในกรณีของฉันข้อผิดพลาดอาจเป็นเพราะการผสานที่ไม่ถูกต้องระหว่าง. gitmodules ในสองสาขาที่มีการกำหนดค่า submodules ที่แตกต่างกัน หลังจากรับคำแนะนำจากฟอรัมนี้ฉันแก้ไขปัญหาการแก้ไขไฟล์. gitmodules ด้วยตนเองการเพิ่มรายการ submodule ที่หายไปนั้นค่อนข้างง่าย หลังจากนั้นคำสั่ง git submodule update --init --recursive ทำงานได้โดยไม่มีปัญหา


0

ปัญหาสำหรับเราคือการเพิ่มรายการ submodule ซ้ำลงใน. gitmodules (อาจมาจากการรวม) เราค้นหาเส้นทางคอมไพล์บ่นเกี่ยวกับใน. โมดูลและพบว่าทั้งสองส่วนที่เหมือนกัน การลบส่วนใดส่วนหนึ่งช่วยแก้ปัญหาให้เราได้

สำหรับสิ่งที่มีค่า git 1.7.1 ให้ข้อผิดพลาด "no submodule mapping" แต่ git 2.13.0 ดูเหมือนจะไม่สนใจ

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