Penghapusan tautan file gagal

169

Saya mencoba melakukan git pull dan saya mendapatkan kesalahan berikut:

Tautan tautan file 'lib / xxx.jar' gagal. Haruskah saya coba lagi? (y / n)

Tidak masalah jika saya memilih y atau n, tidak mungkin untuk mencapai kondisi di mana saya dapat menarik atau mendorong.

marko
sumber
Apakah Anda memeriksa apakah Anda memiliki hak untuk menulis ke file itu?
Raphael Michel
1
jalankan hak chmoddan / atau chownpada file tersebut.
Not_a_Golfer
Saya harus memiliki hak, kalau tidak saya akan chown / chmod itu!
marko

Jawaban:

204

Itu biasanya berarti suatu proses masih menggunakan file tertentu (masih memiliki pegangan di atasnya)
(pada Windows, ProcessExplorerpandai melacak proses semacam itu)

Coba tutup program Anda yang lain, dan coba lagi program Anda git pull.

Perhatikan bahwa Anda memiliki alternatif dengan GIT_ASK_YESNOvariabel .


Pembaruan Januari 2019:

Itu seharusnya bahkan lebih diperbaiki, dengan Git 2.21 (Q1 2019), karena " git gc" dan " git repack" tidak menutup paket terbuka yang mereka temukan tidak dibutuhkan sebelum menghapusnya, yang tidak berfungsi pada platform yang tidak mampu menghapus file yang terbuka.
Ini sudah diperbaiki.

Lihat commit 5bdece0 (15 Des 2018) oleh Johannes Schindelin ( dscho) .
(Digabung oleh Junio ​​C Hamano - gitster- di commit 5104f8f , 18 Jan 2019)

gc/ repack: lepaskan paket saat dibutuhkan

Pada Windows, file tidak dapat dihapus atau diganti namanya jika masih ada pegangan yang dipegang oleh suatu proses.
Untuk mengatasinya, kami memperkenalkan close_all_packs()fungsinya.

Sebelumnya, kami memastikan bahwa paket yang dirilis tepat sebelum git gclahir, jika gcingin menghapus paket yang tidak lagi dibutuhkan.

Tetapi pengembang ini lupa bahwa gcitu sendiri juga perlu melepaskan paket, misalnya ketika menggabungkan semua paket melalui --aggressiveopsi.

Demikian juga, git repack -dingin menghapus paket usang dan karena itu perlu menutup semua pegangan paket juga.


Perbarui Januari 2016

Itu harus diperbaiki di Git 2.8 (Maret 2016) (dan lihat Git 2.19, Q3 2018 di bawah)

Lihat komit d562102 , komit dcacb1b , komit df617b5 , komit 0898c96 (13 Jan 2016) oleh Johannes Schindelin ( dscho) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 3c80940 , 26 Jan 2016)

fetch: lepaskan file paket sebelum pengumpulan sampah

Sebelum auto-gc'ing, kita perlu memastikan bahwa file paket dilepas jika mereka perlu dikemas ulang dan dikumpulkan.

Banyak codepath yang menjalankan " gc --auto" sebelum keluar dari file pack tetap dipetakan dan membiarkan deskriptor file terbuka, yang tidak bersahabat dengan sistem yang tidak dapat menghapus file yang terbuka.
Mereka sekarang menutup paket sebelum melakukannya.

Itu memperbaiki git-for-widowsmasalah 500 .

Melihat tes yang digunakan untuk memvalidasi pendekatan baru itu , solusi yang mungkin (karena Git 2.8 belum keluar) akan meningkatkan secara artifisial gc.autoPackLimit.

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

git 2.8.4 (Juni 2016) tidak menyebutkan masalah 755 yang juga harus meringankan masalah ini ( komit 2db0641 ):

Pastikan pegangan file sementara tidak diwarisi oleh proses anak


Sebenarnya, git-for-windowsmasalah 500 yang disebutkan di atas benar-benar diperbaiki dengan Git 2.19, Q3 2018.
Lihat " Git - Membatalkan tautan file .idxdan .packgagal (Satu-satunya proses yang dimiliki menangani file ini adalah git.exe) "

VONC
sumber
5
Kemungkinan besar ada JVM berjalan menggunakan file jar itu.
Thorbjørn Ravn Andersen
2
Dalam kasus saya itu adalah Skype. Saya sebelumnya telah mentransfer file ke orang lain dan beberapa belum menerima atau membatalkan.
Vivek Kodira
6
Saya menemukan Windows Explorer menjadi pelakunya. Kemungkinan besar karena overlay ikon TortoiseGit atau TGitCache. Menutup semua folder terbuka memang berhasil, tetapi Anda hanya perlu menutup folder proyek jika itu terbuka.
Allan Bogh
4
Dalam kasus saya itu adalah VS2013 karena terikat dengan solusi terbuka.
BrotherOdin
2
Explorer.exe adalah masalah saya - Saya tidak punya TortoiseGit. Saya membunuh explorer.exe dari Task Manager dan menelurkan yang baru menggunakan CTRL-ALT-DELETE => Task Manager => File => Run New Task => "explorer.exe" (tanpa tanda kutip)
joehanna
57

Ini adalah jawaban khusus Windows, jadi saya sadar itu tidak relevan untuk Anda ... Saya hanya memasukkannya untuk kepentingan pencari masa depan.

Dalam kasus saya, itu karena saya menjalankan Git dari baris perintah yang tidak ditinggikan. "Jalankan sebagai Administrator" memperbaikinya untuk saya.

Tidak
sumber
4
Saya menekan masalah ini pada Windows 7 ketika melakukan tarikan dan git melakukan paket otomatis. Itu mengeluh pada file "idx". Saya kemudian membuka jendela konsol sebagai admin dan menjalankan git gc dan tidak ada masalah. Jadi ini solusi yang bagus.
grahamesd
1
git gc melakukannya untuk saya di Windows 7. Itu terjadi b / c saya sedang melakukan git pull pada cmder saat melakukan push pada WebStorm
Alessandro
2
Wow. Terima kasih, Baik. Itu memperbaikinya untuk saya juga. Akan lebih baik untuk port GIT ke Windows sedikit lebih.
Martin Dobšík
Yah ... itu diperlukan 6 tahun yang lalu. Sekarang? Siapa tahu? ¯_ (ツ) _ / ¯
NeilD
30

Bagi saya, itu karena Visual Studio sedang mencoba memuat ulang semua file yang diubah dari tarikan. Miliki visual studio refresh, lalu jalankan git gc.

Paul Nikonowicz
sumber
3
Mirip dengan saya. Gerhana harus ditutup sebelum menjalankan git gc.
alfoks
5

Di Windows menggunakan GitHub untuk Windows, saya mendapat kesalahan serupa di shell saat menjalankan git gc:

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

Saya menyelesaikannya dengan menutup GUI GitHub.

Garrett Smith
sumber
2

Cobalah untuk me-restart Apache Anda atau server web lain karena mungkin telah mengunci beberapa file Anda.

Arvind Bhardwaj
sumber
2

Ditutup Visual Studio dan Rubymine dan tidak mendapatkan kesalahan lagi. Salah satunya adalah pelakunya.

Bikey
sumber
2

Tutup IDE Anda kemudian lakukan git pull. Itu akan berhasil.

Md. Naushad Alam
sumber
1

Saya juga punya masalah ini, tapi saya tahu itu adalah UltraEdit, karena saya menggunakan UE untuk mengatur dan mengedit ruang kerja gerhana saya ~~

Mungkin karena UE memiliki pegangan pada versi lama dari file tertentu, Git tidak dapat memutuskan tautannya.

Setelah saya menutup UltraEdit, masalahnya tidak pernah terjadi lagi.

Ruobin Wang
sumber
1

Ini disebabkan dalam kasus saya oleh SimpLESS, kompiler KURANG. Anda harus menutupnya di systray.

Sebastian Thomas
sumber
0

Masalahnya adalah karena Anda memiliki beberapa program yang menangani file-file ini. Saya punya saran bahwa Anda harus menggunakan Unlocker untuk menemukan program yang menanganinya:

Unlocker

Envil
sumber
0

Saya mengalami hal ini pada Windows XP, keduanya dengan pesan tersangkut dalam satu lingkaran, dan dapat dihapus dengan membalas.

Kejadian macet-in-a-loop dibersihkan dengan menutup Git-GUI. (Saya menjalankan git merge -i di shell bash.)

Kejadian lain terjadi mungkin karena banyaknya file di repositori saya. Itu terjadi terutama dengan file .cod, yang kemudian saya kecualikan dari kontrol versi. (Saya punya alasan untuk melacak mereka secara asli.) Saya percaya penyebabnya mungkin terkait dengan tingkat di mana Git menggunakan file menangani.

Saya bertanya-tanya apakah masalah yang dapat diselesaikan dengan menjawab adalah terkait Windows, seperti dua poster sebelumnya menyebutkan Windows, dan tidak ada yang mengatakan mereka memiliki masalah dengan sistem operasi lain.

Ivan
sumber
0

Saya membuka PHPStorm, menutupnya dan semuanya baik-baik saja.

Tisch
sumber
0

Saya memiliki masalah yang sama dan saya menutup semua program terkait dari Window Task Manager. Namun, itu masih tidak berfungsi. Bagian yang menarik adalah saya menjalankan "Git rebase" bukannya "Git pull" dan berhasil!

In-young Choung
sumber
0

Tidak ada jawaban di atas yang tidak berfungsi untuk saya, tetapi saya menjalankan perintah git gc dengan opsi paksa, dan itu menyelesaikan kasus saya.

'git gc --force'

[Windows 7, Run As Administrator => Command Prompt]

Juha Hanka
sumber
0

Coba jalankan editor baris perintah dalam mode administratif dan jalankan perintah. Ini membantu dan memecahkan masalah. :)

Harshad Sindhav
sumber
0

Dalam kasus saya, saya memiliki metode pemangkasan tag lama yang menyebabkan masalah. Saya mengatasinya dengan menghapus yang asli:

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

kemudian menambahkan ini untuk memangkas cabang yang dihapus di server:

git config --global fetch.pruneTags true
Ken
sumber
0

Saya menghadapi kesalahan yang sama dan mengatasinya dengan menutup gerhana dan menarik lagi ketika file sedang digunakan.

Asing
sumber