การยกเลิกการเชื่อมโยงไฟล์ล้มเหลว


169

ฉันพยายามดึง git และฉันได้รับข้อผิดพลาดต่อไปนี้:

การยกเลิกการเชื่อมโยงไฟล์ 'lib / xxx.jar' ล้มเหลว ฉันควรลองใหม่อีกครั้ง (y / n)

ไม่ว่าฉันจะเลือก y หรือ n เป็นไปไม่ได้ที่จะเข้าสู่สถานะที่ฉันสามารถดึงหรือดันได้


คุณตรวจสอบว่าคุณมีสิทธิ์ในการเขียนไฟล์ดังกล่าวหรือไม่?
Raphael Michel

1
เรียกใช้ขวาchmodและ / หรือchownไฟล์ดังกล่าว
Not_a_Golfer

ฉันควรมีสิทธิ์มิฉะนั้นฉันจะ chown / chmod มัน!
marko


คำตอบ:


204

ซึ่งโดยปกติจะหมายถึงกระบวนการที่ยังคงใช้ไฟล์เฉพาะนั้น (ยังมีตัวจัดการอยู่)
(บน Windows ProcessExplorerก็ดีในการติดตามกระบวนการชนิดนั้น)

ลองปิดโปรแกรมอื่น ๆ git pullของคุณและลองอีกครั้งของคุณ

โปรดทราบว่าคุณมีทางเลือกที่ตัวแปรGIT_ASK_YESNO


อัปเดตมกราคม 2019:

สิ่งนี้น่าจะแก้ไขได้มากขึ้นด้วย Git 2.21 (ไตรมาสที่ 1 ปี 2019) เนื่องจาก " git gc" และ " git repack" ไม่ได้ปิด packfiles ที่เปิดซึ่งพบว่าไม่จำเป็นก่อนที่จะลบออกซึ่งไม่สามารถใช้งานบนแพลตฟอร์มที่ไม่สามารถลบไฟล์ที่เปิดได้
สิ่งนี้ได้รับการแก้ไขแล้ว

ดูกระทำ 5bdece0 (15 ธันวาคม 2018) โดยโยฮันเน Schindelin (dscho )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 5104f8f , 18 มกราคม 2019)

gc/ repack: ปล่อยแพ็คเมื่อจำเป็น

บน Windows ไม่สามารถลบหรือเปลี่ยนชื่อไฟล์ได้หากยังคงมีการจัดการโดยกระบวนการ
เพื่อแก้ไขปัญหานั้นเราได้แนะนำclose_all_packs()ฟังก์ชั่น

ก่อนหน้านี้เราตรวจสอบให้แน่ใจว่ามีการวางจำหน่ายชุดก่อนหน้าgit gcนี้ในกรณีที่gcต้องการลบชุดที่ไม่ต้องการแล้วออก

แต่นักพัฒนาซอฟต์แวร์คนนี้ลืมไปว่าgcตัวเองต้องปล่อยแพ็คออกไปเช่นเมื่อรวมชุดทั้งหมดผ่าน--aggressiveตัวเลือก

ในทำนองเดียวกันgit repack -dต้องการลบแพ็คที่ล้าสมัยและดังนั้นจึงจำเป็นต้องปิดที่จับแพ็คทั้งหมดด้วย


อัปเดตมกราคม 2559

ควรแก้ไขใน Git 2.8 (มีนาคม 2016) (และดู Git 2.19, Q3 2018 ด้านล่าง)

ดูกระทำ d562102 , กระทำ dcacb1b , กระทำ df617b5 , กระทำ 0898c96 (13 มกราคม 2016) โดยโยฮันเน Schindelin (dscho )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 3c80940 , 26 มกราคม 2016)

fetch: ปล่อยไฟล์แพ็คก่อนการรวบรวมขยะ

ก่อนทำการ gc'ing อัตโนมัติเราต้องตรวจสอบให้แน่ใจว่าไฟล์แพ็คได้รับการปล่อยตัวในกรณีที่จำเป็นต้องทำการบรรจุใหม่และเก็บขยะ

codepaths จำนวนมากที่เรียกใช้ " gc --auto" ก่อนที่จะออกจากที่เก็บ packfiles จะถูกแม็พและปล่อยให้ตัวอธิบายไฟล์เปิดอยู่ซึ่งไม่เป็นมิตรกับระบบที่ไม่สามารถลบไฟล์ที่เปิดอยู่ได้
ตอนนี้พวกเขาปิดแพ็คก่อนที่จะทำ

ว่าการแก้ไขgit-for-widowsออก 500

มองไปที่การทดสอบที่ใช้ในการตรวจสอบว่าวิธีการใหม่ในการแก้ปัญหาที่เป็นไปได้ (ตั้งแต่ Git 2.8 ยังไม่ออก) gc.autoPackLimitจะเป็นที่จะยกระดับเทียม

git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value

git 2.8.4 (มิถุนายน 2016)ไม่พูดถึงปัญหา 755ซึ่งควรบรรเทาปัญหา ( กระทำ 2db0641 ):

ตรวจสอบให้แน่ใจว่าการจัดการไฟล์ชั่วคราวไม่ได้รับการสืบทอดโดยกระบวนการลูก


ที่จริงgit-for-windowsปัญหา 500 ที่กล่าวถึงข้างต้นได้รับการแก้ไขจริง ๆ ด้วย Git 2.19, Q3 2018
โปรดดูที่ " Git - การยกเลิกการเชื่อมโยงไฟล์.idxและ.packล้มเหลว (กระบวนการเดียวที่เป็นเจ้าของการจัดการกับไฟล์นี้คือgit.exe " )


5
เป็นไปได้มากที่ JVM จะทำงานโดยใช้ไฟล์ jar นั้น
Thorbjørn Ravn Andersen

2
ในกรณีของฉันมันคือ Skype ก่อนหน้านี้ฉันจะโอนไฟล์ให้ผู้อื่นและบางคนยังไม่ยอมรับหรือยกเลิก
Vivek Kodira

6
ฉันพบว่า Windows Explorer เป็นผู้ร้าย เป็นไปได้มากที่สุดเนื่องจากไอคอนซ้อนทับของ TortoiseGit หรือ TGitCache การปิดโฟลเดอร์ที่เปิดอยู่ทั้งหมดนั้นเป็นการหลอกลวง แต่คุณอาจจำเป็นต้องปิดโฟลเดอร์โครงการหากเปิดอยู่
อัลลัน Bogh

4
ในกรณีของฉันมันเป็น VS2013 เพราะมันถูกผูกไว้กับโซลูชั่นแบบเปิด
BrotherOdin

2
Explorer.exe เป็นปัญหาของฉัน - ฉันไม่มี TortoiseGit ฉันฆ่า explorer.exe จากที่ Task Manager และกลับกลายเป็นหนึ่งใหม่โดยใช้ CTRL-ALT-Delete => Task Manager => file => Run งานใหม่ => "explorer.exe" (ไม่ทราบราคา)
joehanna

57

นี่เป็นคำตอบเฉพาะของ Windows ดังนั้นฉันจึงทราบว่าไม่เกี่ยวข้องกับคุณ ... ฉันแค่รวมไว้เพื่อประโยชน์ของผู้ค้นหาในอนาคต

ในกรณีของฉันเป็นเพราะฉันใช้ Git จากบรรทัดคำสั่งที่ไม่ผ่านการตรวจสอบ "Run as Administrator" แก้ไขให้ฉัน


4
ฉันพบปัญหานี้ใน Windows 7 เมื่อทำการดึงและคอมไพล์ทำ auto pack มันบ่นไฟล์ "idx" ฉันเปิดหน้าต่างคอนโซลในฐานะผู้ดูแลระบบและรัน git gc และไม่มีปัญหา นี่เป็นทางออกที่ดี
grahamesd

1
git gc ทำเพื่อฉันใน Windows 7 มันเกิดขึ้น b / c ฉันทำ git pull บน cmder ในขณะที่ทำการผลัก WebStorm
Alessandro

2
ว้าว. ขอบคุณ NeilD มันแก้ไขให้ฉันด้วย มันจะดีถ้าพอร์ต GIT กับ Windows อีกเล็กน้อย
Martin Dobšík

ดี ... มันต้องการเมื่อ 6 ปีก่อน ตอนนี้? ใครจะรู้? ¯_ (ツ) _ / ¯
NeilD

30

สำหรับฉันมันเป็นเพราะ Visual Studio พยายามโหลดไฟล์ที่เปลี่ยนแปลงทั้งหมดจากการดึง git gcมีการรีเฟรชภาพสตูดิโอแล้วเรียกใช้


3
คล้ายกันสำหรับฉัน Eclipse ต้องถูกปิดก่อนที่จะรัน git gc
alfoks

5

บน Windows โดยใช้ GitHub สำหรับ Windows ฉันมีข้อผิดพลาดคล้ายกันในเชลล์เมื่อทำงานgit gc:

Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)

ฉันแก้ไขมันโดยปิด GitHub GUI


2

ลองรีสตาร์ท Apache หรือเว็บเซิร์ฟเวอร์อื่น ๆ เพราะอาจล็อคไฟล์บางไฟล์ได้


2

ปิด Visual Studio และ Rubymine และไม่ได้รับข้อผิดพลาดอีกครั้ง หนึ่งในนั้นคือผู้ร้าย



1

ฉันมีปัญหานี้ด้วย แต่ฉันพบว่ามันเป็น UltraEdit เนื่องจากฉันใช้ UE เพื่อจัดระเบียบและแก้ไขพื้นที่ทำงานของ eclipse ของฉัน ~~

อาจเป็นเพราะ UE มีหมายเลขอ้างอิงสำหรับไฟล์เฉพาะรุ่นเก่า Git จึงไม่สามารถยกเลิกการเชื่อมโยงได้

หลังจากฉันปิด UltraEdit ปัญหาจะไม่เกิดขึ้นอีก



0

ปัญหาเกิดขึ้นเนื่องจากคุณมีโปรแกรมที่จัดการไฟล์เหล่านี้ ฉันมีข้อเสนอแนะที่คุณควรใช้ Unlocker เพื่อค้นหาโปรแกรมที่จัดการ:

Unlocker


0

ฉันเคยมีสิ่งนี้เกิดขึ้นใน Windows XP ทั้งที่มีข้อความติดอยู่ในลูปและสามารถลบออกได้โดยการตอบกลับ

ปัญหาที่ติดค้างอยู่ในวงถูกล้างออกโดยการปิด Git-GUI (ฉันใช้ git merge -i ใน bash shell)

เหตุการณ์อื่น ๆ ที่เกิดขึ้นอาจเป็นเพราะไฟล์จำนวนมากในที่เก็บของฉัน มันเกิดขึ้นส่วนใหญ่กับไฟล์. cod ซึ่งภายหลังฉันแยกออกจากการควบคุมเวอร์ชัน (ฉันมีเหตุผลในการติดตามอย่างตั้งใจ) ฉันเชื่อว่าสาเหตุอาจเกี่ยวข้องกับอัตราที่ Git ใช้ตัวจัดการไฟล์

ฉันสงสัยว่าปัญหาที่สามารถตอบได้โดยการตอบกลับเป็นเรื่องเกี่ยวกับ Windows หรือไม่เนื่องจากผู้โพสต์ก่อนหน้าสองคนพูดถึง Windows และไม่มีใครบอกว่าพวกเขามีปัญหากับระบบปฏิบัติการอื่น



0

ฉันมีปัญหาเดียวกันและฉันปิดโปรแกรมที่เกี่ยวข้องทั้งหมดจาก Window Task Manager อย่างไรก็ตามมันก็ยังไม่ทำงาน ส่วนที่น่าสนใจคือฉันใช้ "Git rebase" แทน "Git pull" และใช้งานได้!


0

ไม่มีคำตอบข้างต้นไม่ได้ผลสำหรับฉัน แต่ฉันใช้คำสั่ง git gc พร้อมตัวเลือกบังคับและมันแก้ไขกรณีของฉัน

'git gc --force'

[Windows 7, Run As Administrator => พร้อมรับคำสั่ง]


0

ลองเรียกใช้ตัวแก้ไขบรรทัดคำสั่งในโหมดผู้ดูแลและเรียกใช้คำสั่ง ช่วยและแก้ปัญหา :)


0

ในกรณีของฉันฉันมีวิธีการตัดแท็กเก่าทำให้เกิดปัญหา ฉันแก้ไขได้โดยยกเลิกการตั้งค่าดั้งเดิม:

git config --global --unset remote.origin.fetch '\+refs/tags/\*:refs/tags/\*'

จากนั้นเพิ่มสิ่งนี้เพื่อตัดกิ่งไม้ที่ถูกลบบนเซิร์ฟเวอร์:

git config --global fetch.pruneTags true

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