การเลิกเชื่อมโยงไฟล์ล้มเหลว ฉันควรลองใหม่อีกครั้ง


571

มีสิ่งผิดปกติเกิดขึ้นกับไฟล์ใดไฟล์หนึ่งในที่เก็บ git ในพื้นที่ของฉัน เมื่อฉันพยายามที่จะเปลี่ยนสาขามันบอกว่า:

Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

นั่นแปลว่าอะไร?


1
ตรวจสอบคำถามนี้
RDL

ซ้ำกันที่เป็นไปได้ของข้อผิดพลาด [การรีบูต Git มีข้อผิดพลาด 'ยกเลิกการเชื่อมโยงไฟล์ล้มเหลว] ( stackoverflow.com/questions/3698369/… )
Josh Lee

คำตอบที่ได้รับนั้นทำงานให้คุณหรือไม่หากตัวแสดงกระบวนการทำงานไม่ทำงานให้รีสตาร์ทและคุณสามารถลบไฟล์ออกได้และคุณสามารถยอมรับคำตอบได้ถ้ามันทำงานได้ดี
dhaval

1
ตรวจสอบด้วยว่ากระบวนการคอมไพล์มีสิทธิ์ในการเขียนไฟล์นั้น
boileau

คำตอบ:


751

นี่อาจหมายความว่าโปรแกรมอื่นกำลังใช้ไฟล์ซึ่งกำลังป้องกันไม่ให้คอมไพล์ "ย้าย" ไฟล์เข้าหรือออกจากไดเรกทอรีทำงานเมื่อคุณพยายามเปลี่ยนสาขา

ฉันมีสิ่งนี้เกิดขึ้นใน Windows Vista โดยที่ eclipse เป็นโปรแกรม "ใช้" ไฟล์ ไฟล์อาจไม่เปิดจริง ๆ ใน eclipse แต่อาจถูกเปิดโดยกระบวนการที่ดำเนินการโดย eclipse

ในเหตุการณ์นี้ให้ลองปิดไฟล์ในแอปพลิเคชันใด ๆ ที่อาจใช้งาน หากวิธีนี้ไม่ได้ผลให้ออกจากแอปพลิเคชั่นใด ๆ ที่อาจเปิดไฟล์โดยสมบูรณ์


53
บน Windows ใช้ ProcessExplorer เพื่อค้นหากระบวนการที่เปิดไฟล์
เดฟ C

2
มีวิธีเขียนสคริปต์เช่น "ถ้าไฟล์นี้ไม่สามารถลบได้ (เช่นไฟล์ที่ไม่มีอยู่) เพียงข้ามไฟล์"
2xMax

14
ในกรณีของฉันนั่นคือ Visual Studio และปลั๊กอิน Git
Michał Powaga

8
บน Windows หากคุณไม่มี ProcessExplorer หรือไม่ต้องการดาวน์โหลดคุณสามารถเรียกใช้ (Windows + R) "resmon" ไปที่แท็บ CPU และค้นหาชื่อไฟล์ในช่องข้อความ "Associated Identifiers"
Raphael

6
หากคุณใช้GitKrakenคุณอาจได้รับสิ่งนี้หากคุณทำคำสั่งเช่น rebase
mtpultz

285

ฉันมีปัญหานี้และแก้ไขได้โดยคำสั่ง: คำสั่งgit gc ดังกล่าวลบ temp และไฟล์ที่ไม่จำเป็น (ตัวเก็บขยะ)


43
git pullเริ่มต้นgit gcโดยอัตโนมัติและ gc พยายามเข้าถึงไฟล์. pack และ. inx บางไฟล์ สิ่งเหล่านี้ถูกระงับโดยกระบวนการ "windows git" ซึ่งเป็นgit pullคำสั่งที่เป็นเจ้าของ ทำงานgit gcด้วยตนเองและ - git pullแก้ไขปัญหาได้จริง
Nikita

4
ในขณะที่ทำงานgit gcฉันได้รับข้อผิดพลาดเดียวกันอีกครั้งเมื่อgcอยู่ในระหว่างดำเนินการ
Prakash K

4
"การเรียกใช้ git gc ด้วยตนเองและการดึง git มากกว่าแก้ปัญหาได้จริง ๆ " สิ่งนี้ช่วยได้ ขอบคุณ Nikita
Sangam

สิ่งนี้ช่วยฉันเช่นกัน เรียกใช้งานบน Windows ด้วย Git Bash
Ascalonian

หลังจากเริ่มดึง git ฉันได้รับข้อผิดพลาดนี้ ฉันกด CTRL + C เพื่อหยุดการดึงใช้ git gc แล้วดึง git อีกครั้งปัญหาได้หายไปและไม่มีอะไรเสียหายโดยการขัดจังหวะการดึง
daniel sp

84

วิธีแก้ปัญหาจากที่นี่ได้ผลกับฉัน:

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

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


2
ทำงานให้ฉัน Ran VS ในฐานะผู้ดูแลระบบจากนั้นจึงเปิดใช้งานพรอมต์คำสั่งจาก VS
Sentinel

3
ฉัน: พิมพ์Ctrl+Cเพื่อยุติรายการไฟล์ที่ไม่สามารถลิงก์ได้ที่มีความยาวมาก ออกจาก gitbash, IDE ของฉันและแอปพลิเคชัน GitHub Windows รีสตาร์ท gitbash ในโหมด "Run as Administrator" ที่ยกระดับ git gc --aggressiveและวิ่ง ใช้เวลาสักครู่ในการทำให้เสร็จ แต่ทำได้โดยไม่มีข้อผิดพลาด
Mark McClelland

หากคุณเชื่อว่านี่เป็นคำซ้ำคุณควรตั้งค่าสถานะเช่นนี้อย่าเพิ่มคำตอบที่ชี้ไปยังคำตอบอื่น
Liam

2
@Liam คำถามนี้เก่ากว่า แต่คำตอบนี้มีไว้สำหรับคำถามอื่นเท่านั้นและไม่มีคำตอบเดียวสำหรับคำถามนี้ซึ่งทำให้ยากที่จะตั้งให้ซ้ำกัน
sepehr

มันใช้งานได้ดีสำหรับฉัน ไม่มีคำตอบก่อนหน้านี้เลย ขอบคุณมาก.
Roberto Rodriguez

35

ฉันพบปัญหานี้ในขณะที่ทำ git pullผมพบปัญหานี้ขณะที่ทำ

ฉันพยายามgit gcแล้วก็แก้ปัญหาได้


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

23

ในกรณีของฉันไม่มีกระบวนการที่สัมผัสไฟล์หรือไดเรกทอรี อาจเกิดขึ้นหากเส้นทางยาวมากเนื่องจากข้อ จำกัด ของระบบปฏิบัติการ (windows) ลองเปิดใช้งานการสนับสนุน longpath ในการกำหนดค่า git ทั่วโลกตามที่ระบุด้านล่าง:

git config --global core.longpaths true

หรือพยายามตั้งค่าสถานะคำตอบใช่ / ไม่ใช่หากไม่ขัดแย้งกับคุณ

set GIT_ASK_YESNO=false

หากเส้นทางยาวเกินไปฉันไม่พบวิธีแก้ปัญหาที่ประสบความสำเร็จ


5
ฉันไม่รู้ว่าทำไม แต่การตั้งค่า "git config - global core.longpath จริง" มีประโยชน์สำหรับฉัน
Maxim

GIT_ASK_YESNOไม่พบข้อมูลเกี่ยวกับอันนี้ มันมาจากไหน ?
majkinetor

ดู: stackoverflow.com/questions/3698369/…ตัวอย่างเช่น; ฉันไม่ได้ตอนนี้ถ้ามันทำงานกับ git รุ่นล่าสุด (2.9)
andhdo

core.longpathsด้วยเพิ่มเติม: รีเซ็ต - ฮาร์ดพรุน gc ใช้งานได้สำหรับฉัน - แต่ต้องปิด AndroidStudio เพื่อไม่ให้ยุ่งเหยิงกับเครื่องมือในการสร้าง
Mike bovquier


10

สิ่งนี้อาจมีประโยชน์สำหรับใครบางคน หากทั้งหมดข้างต้นไม่ได้ผลสำหรับคุณให้ทำตามขั้นตอนเหล่านี้:

  1. ปิด IDE ของคุณ (ของฉันคือ Eclipse ไม่แน่ใจว่ามันใช้กับ Intellij และอื่น ๆ ) หรือแอปอื่น ๆ ที่อาจใช้ git

  2. เปิดคอมไพล์จากบรรทัดคำสั่ง (ในกรณีของฉันฉันมีคอมไพล์ทุบตี) และทำงานgit gcตามที่ผู้อื่นกล่าวถึง

นี่เป็นเวทย์มนตร์สำหรับฉัน


นี่เป็นคำตอบเดียวที่ช่วยในกรณีของฉันโดยใช้ Android Studio
0101100101

10

ในขณะที่ฉันกำลังใช้gitkrakenและพรอมต์คำสั่งฉันพบปัญหาเดียวกัน จากนั้นฉันเรียกใช้ git gcคำสั่งเพื่อแก้ไขปัญหาของฉัน ดังนั้นฉันมีความสุขและต้องการแบ่งปันบางจุดซึ่งอาจเป็นประโยชน์

สิ่งที่git gcจะทำอย่างไร

git gc การลบวัตถุที่ไม่สามารถเข้าถึงได้ซึ่งอาจถูกสร้างขึ้นจากการร้องขอของ git add ก่อนหน้า

เมื่อใดที่จะเรียกใช้ git gc ?

จากเอกสารผู้ใช้ควรรันภารกิจนี้เป็นประจำภายในที่เก็บแต่ละแห่งเพื่อรักษาการใช้พื้นที่ดิสก์ที่ดีและประสิทธิภาพการทำงานที่ดี

จะกำหนดค่าอัตโนมัติได้อย่างไร

คำสั่ง git บางคำสั่งอาจรัน git gc โดยอัตโนมัติ ดูที่ --auto flag ด้านล่างสำหรับรายละเอียด หากคุณรู้ว่าคุณกำลังทำอะไรอยู่และสิ่งที่คุณต้องการคือปิดการใช้งานพฤติกรรมนี้อย่างถาวรโดยไม่ต้องพิจารณาอะไรเพิ่มเติม

git config --global gc.auto 0

8

ในกรณีของฉัน (Win8.1, TortoiseGit ทำงาน) มันเป็นกระบวนการที่เรียกว่า "TortoiseSVN status cache" ที่ล็อคไฟล์

การฆ่ามันทำให้ฉันเรียกใช้ "git gc" ได้โดยไม่มีปัญหาอีกต่อไป กระบวนการข้างต้นเกิดขึ้นจาก TortoiseGit ดังนั้นจึงไม่จำเป็นต้องรีสตาร์ทด้วยตนเอง


7

ฉันมีปัญหาแบบนี้ใน Windows 7 และมันกลับกลายเป็นว่าเกิดจากgit.exeกระบวนการที่ถูกกำพร้าบางอย่าง

หากต้องการแก้ปัญหาให้เปิดตัวจัดการงานและฆ่าgit.exeกระบวนการทั้งหมด

เนื่องจากgitคำสั่งมีอายุสั้นคุณจึงไม่ควรเห็นรายการใด ๆgit.exeในตัวจัดการงาน เมื่อพวกเขาอยู่ที่นั่นมักจะหมายถึงบางสิ่งผิดปกติและคุณควรฆ่ากระบวนการเหล่านั้น


7

ฉันพบปัญหานี้ใน Windows ฉันปิด IDE (Android Studio) และเลือก YES ใน git shell มันได้ผล


5

ใน Windows 8: ฉันวิ่ง git gc และมันบอกว่า git gc กำลังทำงานอยู่ฉันวิ่ง git gc --force และตัวรวบรวมขยะก็วิ่ง

ฉันสามารถสลับสาขาและรวมได้โดยไม่มีปัญหาลอง git gc --force

บางทีกระบวนการ gc ไม่ได้หยุดอย่างสง่างามด้วยเหตุผลใดเหตุผลหนึ่ง


นอกจากนี้ยังสามารถใช้ได้กับ Windows 10
oguzhan

4

ฉันมีปัญหานี้กับ.tmpไฟล์ใน/.git/objects/packโฟลเดอร์ ฉันคิดว่ามีบางอย่างล้มเหลวระหว่างการกดหรือดึงดังนั้นฉันจึงลบไฟล์ชั่วคราวเหล่านี้และรีเซ็ต HEAD เป็นความมุ่งมั่นครั้งล่าสุดของฉัน ไม่แน่ใจว่าสิ่งนี้จะได้รับคำแนะนำ แต่มันใช้ได้กับฉัน ยังgit count-objects -vให้ฉันรายการ.tmpไฟล์ที่ไม่ได้อยู่ในโฟลเดอร์ pack ด้วย

หรือเพื่อระงับข้อความ y / n ใน windows git open cmd.exeและรัน:

SETX GIT_ASK_YESNO false

เห็นที่นี่: https://twitter.com/petercamfield/status/494805475733807104


หลังจากเรียกใช้git gcแล้วgit count-objects -vช่วยในการระบุวัตถุชั่วคราวที่เหลือในpackโฟลเดอร์
mistaecko

4

ฉันสามารถแก้ไขปัญหานี้ได้ด้วยการเปิด Powershell ในฐานะผู้ดูแลระบบและจากที่นั่น git checkout <branch_name>


ขอบคุณ @ bar-horing สิ่งนี้ช่วยให้ฉันระบุว่าเป็นปัญหาการอนุญาต เมื่อฉันแก้ไขสิทธิ์ของ windows สำหรับโฟลเดอร์นั้นมันทำงานได้
Kumar

3

ฉันประสบปัญหาเดียวกันในขณะที่ทำ 'git pull' ฉันลองใช้คำสั่ง git gc 'การดูแลทำความสะอาดด้วยตนเองและแก้ไขปัญหาของฉันได้


4
แม้ว่านี่จะเป็นการพยายามตอบคำถาม แต่ก็ไม่ได้เพิ่มคำตอบอื่น ๆ ที่ยังไม่ครอบคลุม (เช่นนี้ ) หากคุณพยายามยืนยันว่าวิธีนี้ใช้งานได้หรือต้องการขอบคุณผู้เขียนคำตอบนั้นโปรดอย่าโพสต์คำตอบให้ทำ หลังจากที่คุณได้รับชื่อเสียงมากขึ้นคุณจะได้รับสิทธิ์ที่เพียงพอในการถอนคำตอบที่คุณชอบซึ่งเป็นวิธี Stack Overflow ในการกล่าวคำขอบคุณ
Scott Weldon


2

หลังจากลองใช้วิธีแก้ปัญหาต่าง ๆ ในที่สุดก็git clean -fช่วยฉัน

แก้ไข: ฉันพบปัญหาอีกครั้งสองสามครั้ง - การปิดกระบวนการทั้งหมดขึ้นอยู่กับ git ดูเหมือนจะช่วยได้ (เช่น gitbash, Eclipse IDE ฯลฯ )


2

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


2

หลังจากรันคำสั่ง

git rm -rf foo.bar

ฉันเห็นข้อผิดพลาด

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

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

git rm -rf foo.bar

ฉันเห็นไฟล์ถูกลบไปแล้ว


1

นี่อาจเป็นหน้าต่าง gitk ที่แยกต่างหากซึ่งทำงานเพื่อดูประวัติ git

เพียงปิดหน้าต่างนั้นเพื่อแก้ไขปัญหานั้น


1

ฉันพบปัญหานี้โดยใช้ git Bash และ Eclipse EGit ในเวลาเดียวกัน วิธีแก้ปัญหา: ปิด Eclipse ยังไม่เจ็บที่จะทำงานgit gcตามที่ @khilo พูดถึง



1

ฉันพบปัญหานี้ใน Windows คุณอาจต้องการรัน git bash ในฐานะผู้ดูแลระบบจากนั้นทำตามคำสั่งปรารถนาซึ่งแก้ไขปัญหาให้ฉัน


1

หากคุณกำลังพัฒนาเว็บแอปพลิเคชันสาเหตุที่พบบ่อยคือลืมปิดเซิร์ฟเวอร์ ตัวอย่างเช่นนี่อาจเป็นกระบวนการ Node.js แบบง่าย ๆ หรือบนกระบวนการ IIS ของคุณที่ทำงานโดยไม่เป็นการรบกวนเป็นกระบวนการเบื้องหลัง


1

ฉันลองทุกเคล็ดลับในหน้านี้และไม่มีอะไรช่วย ฉันทำgit fetchและgit reset --hard origin/developmentให้ข้อผิดพลาด unkink ให้ฉัน ฉันไม่สามารถรีเซ็ตการกระทำล่าสุดได้

สิ่งที่ช่วยได้คือตรวจสอบสาขาอื่นแล้วตรวจสอบสาขาก่อนหน้า แปลกมาก แต่ก็แก้ปัญหาได้


1

หากการปิด IDE ของคุณและการรันคำสั่ง git ต่าง ๆ ที่แสดงไว้ที่นี่จะไม่ช่วยให้ลองฆ่ากระบวนการ Java ทั้งหมดที่กำลังทำงานอยู่ ฉันมีกระบวนการ Java ที่อาจหลงเหลือจาก eclipse ซึ่งทำให้ไฟล์คอนฟิกูเรชันเปิดอยู่


1

หากคุณใช้ Docker และใช้งาน Windows 10 คุณอาจต้องการหยุดคอนเทนเนอร์ที่ไฟล์นั้นอาจทำงานอยู่ เพื่อแสดงสถานะของตู้สินค้าของคุณให้เรียกใช้

docker ps -a

หากต้องการหยุดพวกเขาเพียงแค่เรียกใช้

docker stop <container name or container id>

สิ่งนี้ใช้ได้กับฉันเมื่อฉันเรียกใช้ไฟล์ในเครื่องโดยใช้ไฟล์. sh


1

ทำงานให้ฉันพยายามบน windows:

หยุดเซิร์ฟเวอร์ของคุณทำงานจาก IDE หรือปิด IDE ของคุณ

Intellij / Ecllipse หรืออะไรก็ตามมันจะทำงาน


0

บน Windows เห็นข้อผิดพลาดนี้ในหนึ่งgit cloneใน repo (ค่อนข้างใหญ่) ปิดSmartGitแล้วหยุดซอฟต์แวร์สำรองข้อมูลของฉัน (CrashPlan) และหยุดทำงานชั่วคราว ไม่แน่ใจว่าผู้ใดใน 2 ที่หลอกลวง แต่ถ้าใช้ทั้งสองอย่างนี้อาจทำเพื่อคุณเช่นกัน


0

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


0

ฉันมีข้อผิดพลาดเดียวกันนี้และปิดแอปที่ไฟล์เปิดทำการแก้ไข ฉันสามารถย้อนกลับไปและกด "Y"

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