Putuskan tautan file Gagal. Haruskah saya coba lagi?

572

Sesuatu yang salah sedang terjadi dengan salah satu file di repositori git lokal saya. Ketika saya mencoba mengubah cabang itu tertulis:

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

Apa artinya itu?

Pol
sumber
1
Lihatlah pertanyaan ini
RDL
kemungkinan duplikat dari [Git rebase mendapat kesalahan 'batalkan tautan file gagal]] ( stackoverflow.com/questions/3698369/… )
Josh Lee
apakah jawaban yang diberikan bekerja untuk Anda, jika penampil proses tidak berfungsi maka restart dan Anda kemudian dapat menghapus file, juga Anda dapat menerima jawabannya jika itu bekerja untuk Anda
dhaval
1
Juga periksa apakah proses git memiliki izin menulis pada file itu.
boileau
5
kemungkinan duplikat Tautan file gagal
BartoszKP

Jawaban:

752

Ini bisa berarti bahwa program lain menggunakan file, yang mencegah git dari "memindahkan" file ke dalam atau keluar dari direktori kerja ketika Anda mencoba untuk mengubah cabang.

Saya pernah mengalami hal ini pada Windows Vista di mana gerhana adalah program "menggunakan" file tersebut. File tersebut mungkin sebenarnya tidak terbuka di gerhana tetapi mungkin telah dibuka oleh proses yang dijalankan oleh gerhana.

Dalam acara ini, coba tutup file dalam aplikasi apa pun yang mungkin menggunakannya. Jika itu tidak berhasil, keluar sepenuhnya dari aplikasi yang mungkin telah membuka file.

Melissa
sumber
53
Di Windows, gunakan ProcessExplorer untuk menemukan proses mana yang membuka file.
Dave C
2
Apakah ada cara untuk menulis skrip seperti "jika file ini tidak dapat dihapus (misalnya file tidak ada), lewati saja file".
2xMax
14
Dalam kasus saya itu adalah Visual Studio dan plugin Git-nya.
Michał Powaga
8
Pada Windows, jika Anda tidak memiliki ProcessExplorer yang tersedia atau tidak ingin mengunduhnya, Anda dapat menjalankan (Windows + R) "resmon", buka tab CPU dan cari nama file di kotak teks "Associated Identifiers".
Raphael
6
Jika Anda menggunakan GitKrakenAnda mungkin mendapatkan ini jika Anda melakukan perintah seperti rebase
mtpultz
285

Saya punya masalah ini dan menyelesaikannya dengan perintah: Perintah git gc di atas menghapus temp dan file yang tidak perlu. (Pengumpul sampah.)

khilo
sumber
43
git pulldimulai git gcsecara otomatis, dan gc mencoba mengakses beberapa file .pack dan .inx. Ini dipegang oleh proses "windows git", yang dimiliki git pullperintah. Berjalan git gcsecara manual dan daripada - git pullbenar - benar menyelesaikan masalah.
Nikita
4
Saat menjalankan git gcsaya mendapatkan kesalahan yang sama lagi ketika gcsedang dalam proses
Prakash K
4
"Menjalankan git gc secara manual dan dari - git pull benar - benar menyelesaikan masalah." Ini membantu. Nikita terima kasih.
sangam
Ini membantu saya juga. Jalankan ini di Windows dengan Git Bash
Ascalonian
Setelah memulai git pull saya mendapatkan kesalahan ini. Saya menekan CTRL + C untuk menghentikan tarikan, menjalankan git gc dan kemudian git menarik lagi, masalahnya telah hilang dan tidak ada yang rusak dengan mengganggu tarikan.
daniel sp
84

solusi ini dari sini bekerja untuk saya:

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

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

sepehr
sumber
2
Bekerja untukku. Berlari VS sebagai admin dan kemudian luncurkan command prompt dari VS
Sentinel
3
I: diketik Ctrl+Cuntuk mengakhiri daftar yang sangat panjang dari file yang tidak dapat dihubungkan; keluar dari gitbash, IDE saya, dan aplikasi GitHub Windows; restart gitbash dalam mode "Run as Administrator" tinggi; dan berlari git gc --aggressive. Butuh beberapa saat untuk menyelesaikan, tetapi berhasil tanpa kesalahan.
Mark McClelland
Jika Anda yakin ini adalah duplikat, Anda harus menandainya seperti itu, bukan menambahkan jawaban yang menunjuk ke jawaban lain
Liam
2
@Liam Pertanyaan ini lebih lama tetapi jawaban ini hanya ada di pertanyaan lainnya, dan tidak ada satu jawaban untuk pertanyaan ini yang membuatnya lebih sulit untuk hanya menetapkan satu sebagai duplikat.
sepehr
Ini bekerja cukup baik untuk saya. Tidak ada jawaban sebelumnya yang melakukannya. Terima kasih banyak.
Roberto Rodriguez
35

Saya mengalami masalah ini saat melakukan git pull.

Saya mencoba git gcdan itu menyelesaikan masalah saya.

Rahul Chandran
sumber
Saya mengalami masalah ini pada mesin Windows dan solusi ini pada awalnya tidak berfungsi. Namun begitu saya menjalankan perintah ini dari prompt perintah admin itu menyelesaikan masalah saya.
William W
23

Dalam kasus saya tidak ada proses menyentuh file atau direktori. Mungkin itu terjadi jika jalannya sangat panjang, karena pembatasan sistem operasi (windows). Coba aktifkan flag dukungan longpath dalam konfigurasi global git seperti yang ditunjukkan di bawah ini:

git config --global core.longpaths true

atau coba atur flag jawaban ya / tidak jika tidak menimbulkan konflik bagi Anda

set GIT_ASK_YESNO=false

Jika jalannya terlalu panjang, saya belum menemukan solusi yang berhasil.

andhdo
sumber
5
Saya tidak tahu mengapa tetapi pengaturan "git config --global core.longpaths true" sangat membantu bagi saya.
Maxim
GIT_ASK_YESNO, tidak dapat menemukan info tentang ini. Dari mana asalnya?
majkinetor
lihat: stackoverflow.com/questions/3698369/… misalnya; Saya tidak sekarang jika itu bekerja dengan versi terbaru git (2.9)
andhdo
core.longpathsdengan tambahan: reset --hard prune gc bekerja untuk saya - tetapi harus menutup AndroidStudio untuk tidak mengacaukan alat build-nya
Mike bovquier
11

Saya mencoba git gcdan itu menyelesaikan masalah saya.

Mukesh Yadav
sumber
10

Ini mungkin berguna bagi seseorang; jika semua hal di atas tidak berhasil untuk Anda, ikuti langkah-langkah ini:

  1. Tutup IDE Anda (milik saya Eclipse, tidak yakin apakah itu berlaku untuk Intellij dan lainnya) atau aplikasi lain yang mungkin menggunakan git.

  2. Buka git dari baris perintah (dalam kasus saya, saya punya git bash) dan jalankan git gcseperti yang disebutkan oleh orang lain.

Ini melakukan keajaiban bagi saya.

papigee
sumber
Ini adalah satu-satunya jawaban yang membantu dalam kasus saya, menggunakan Android Studio
0101100101
10

Ketika saya menggunakan gitkraken dan command prompt, saya mengalami masalah yang sama. Dan kemudian saya menjalankan git gcperintah itu menyelesaikan masalah saya. Jadi saya senang dan ingin berbagi beberapa poin yang mungkin bisa membantu.

Apa yang git gcakan dilakukan

git gc menghapus objek yang tidak terjangkau yang mungkin telah dibuat dari doa sebelumnya dari git add.

Kapan harus berlari git gc?

Dari doc , pengguna didorong untuk menjalankan tugas ini secara teratur dalam setiap repositori untuk mempertahankan pemanfaatan ruang disk yang baik dan kinerja operasi yang baik.

Bagaimana membuatnya dapat dikonfigurasi secara otomatis?

Beberapa perintah git dapat secara otomatis menjalankan git gc; lihat bendera --auto di bawah untuk detailnya. Jika Anda tahu apa yang Anda lakukan dan yang Anda inginkan adalah menonaktifkan perilaku ini secara permanen tanpa pertimbangan lebih lanjut, lakukan saja

git config --global gc.auto 0
Ramesh Papaganti
sumber
8

Dalam kasus saya (Win8.1, TortoiseGit berjalan), itu adalah proses yang disebut "cache status TortoiseSVN" yang mengunci file.

Membunuhnya memungkinkan saya untuk menjalankan "git gc" tanpa masalah lagi. Proses di atas dijalankan oleh TortoiseGit, jadi tidak perlu me-restart secara manual.

nickD
sumber
7

Saya memiliki masalah seperti ini pada Windows 7 dan ternyata karena beberapa git.exeproses yatim .

Untuk mengatasinya, buka Task Manager dan matikan semua git.exeproses.

Karena gitperintah berumur pendek, Anda biasanya tidak akan pernah melihatnya git.exedi Task Manager. Ketika mereka ada di sana, biasanya itu berarti ada sesuatu yang salah, dan Anda harus membunuh proses itu.

jakub.g
sumber
7

Saya mendapat masalah ini di Windows. Saya menutup IDE (Android Studio) dan memilih YES di git shell. Itu berhasil.

vovahost
sumber
5

Pada Windows 8: Saya menjalankan git gc dan dikatakan git gc sudah berjalan, saya menjalankan git gc - force dan pengumpul sampah berlari.

Saya kemudian bisa berganti cabang dan bergabung tanpa masalah, coba git gc - force.

Mungkin proses gc tidak berhenti dengan anggun karena satu dan lain alasan.

Mark Howard
sumber
Ini juga berlaku untuk Windows 10.
oguzhan
4

Saya punya masalah dengan .tmpfile di /.git/objects/packfolder ini. Saya pikir ada sesuatu yang gagal selama push atau pull, jadi saya menghapus file sementara ini dan mengatur ulang HEAD ke komit terakhir saya. Tidak yakin apakah ini disarankan tetapi itu berhasil untuk saya. Juga git count-objects -vmemberi saya daftar .tmpfile yang tidak termasuk dalam folder paket.

Atau untuk menekan pesan y / n di windows git open cmd.exedan menjalankan:

SETX GIT_ASK_YESNO false

terlihat di sini: https://twitter.com/petercamfield/status/494805475733807104

bluberi
sumber
Setelah dijalankan git gc, git count-objects -vmembantu mengidentifikasi objek temp yang tersisa di packfolder.
mistaecko
4

Saya dapat menyelesaikan ini dengan membuka Powershell sebagai Administrator dan dari sana git checkout <branch_name>

Bar Horing
sumber
Terima kasih @ bar-horing. Ini membantu saya mengidentifikasinya sebagai masalah izin. Setelah saya memperbaiki izin windows untuk folder itu berfungsi.
Kumar
3

Saya menghadapi masalah yang sama saat melakukan 'git pull'. Saya mencoba manual housekeeping perintah git 'git gc' dan itu menyelesaikan masalah saya.

kerjakan dengan benar
sumber
4
Meskipun ini merupakan upaya jawaban, itu tidak menambahkan apa pun yang belum dicakup oleh jawaban lain (seperti yang ini ). Jika Anda mencoba mengonfirmasi bahwa solusi ini berfungsi, atau ingin mengucapkan terima kasih kepada penulis atas jawaban itu, jangan posting jawaban untuk melakukannya. Setelah Anda mendapatkan lebih banyak reputasi , Anda akan mendapatkan cukup hak untuk upvote jawaban Anda suka, yang merupakan cara Stack Overflow mengucapkan terima kasih.
Scott Weldon
2

Setelah mencoba berbagai solusi akhirnya git clean -fmembantu saya.

EDIT: Saya memukul masalah lagi beberapa kali - menutup semua proses tergantung pada git tampaknya membantu (seperti gitbash, Eclipse IDE, dll.)

FazoM
sumber
2

Seperti yang dinyatakan di atas, ada hal lain yang menahan file. Masalahnya adalah program itu tidak terlihat mencurigakan bagi kita. Saya mencoba melakukan git pull dari konsol, sementara GitKraken dibuka. Menutup GitKraken memperbaiki masalahnya.

100r
sumber
2

Setelah menjalankan perintah

git rm -rf foo.bar

Saya melihat kesalahan

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

Karena program lain menggunakan file ini . Misalnya, ketika saya menjalankan aplikasi web Java dalam model debug atau menjalankan aplikasi web di server, saya tidak bisa menghapus file log. Matikan aplikasi sever (atau matikan proses debug), coba lagi

git rm -rf foo.bar

Saya melihat file telah dihapus.

Apakah Nhu Vy
sumber
1

Ini mungkin jendela gitk terpisah yang berjalan untuk melihat beberapa riwayat git.

Tutup saja jendela itu untuk memperbaiki masalah itu.

Weinerk
sumber
1

Saya mengalami masalah ini dengan menjalankan git Bash dan Eclipse EGit pada saat yang sama. Solusi: tutup Eclipse. Juga tidak ada salahnya untuk menjalankan git gcseperti yang disebutkan @khilo.

jhyry
sumber
1

Saya mengalami masalah ini di Windows, Anda mungkin ingin menjalankan git bash sebagai administrator dan kemudian melakukan perintah keinginan, yang memecahkan masalah bagi saya.

Pablo Fallas
sumber
1

Jika Anda mengembangkan aplikasi web, alasan umum adalah lupa mematikan server. Misalnya ini bisa berupa proses Node.js sederhana, atau di windows proses IIS Anda berjalan lebih tidak mengganggu sebagai proses latar belakang.

alex3683
sumber
1

Saya mencoba setiap tip di halaman ini dan tidak ada yang membantu. Saya sedang melakukan git fetchdan git reset --hard origin/developmentmemberi saya kesalahan unkink. Saya tidak dapat mengatur ulang ke komit terbaru.

Yang membantu adalah memeriksa cabang lain dan kemudian memeriksa cabang sebelumnya. Sangat aneh tapi itu menyelesaikan masalah.

T3rm1
sumber
1

Jika menutup IDE Anda dan menjalankan berbagai perintah git yang tercantum di sini tidak akan membantu, coba matikan secara manual semua proses Java yang berjalan. Saya memiliki proses Java yang mungkin tersisa dari gerhana yang entah bagaimana membuat file konfigurasi tetap terbuka.

Marc
sumber
1

Jika Anda menggunakan Docker dan menjalankan Windows 10, Anda mungkin ingin menghentikan wadah tempat file itu sedang berjalan. Untuk menunjukkan status wadah Anda, jalankan

docker ps -a

Untuk menghentikannya, jalankan saja

docker stop <container name or container id>

Ini berfungsi untuk saya karena saya menjalankan file lokal saya menggunakan file .sh

Ujung Cukur
sumber
1

Bekerja untuk saya, Mencoba di windows:

Hentikan server Anda dari IDE atau tutup IDE Anda

Intellij / Ecllipse atau apa pun, itu akan berhasil.

Codiee
sumber
0

Di Windows, lihat kesalahan ini pada git clonerepo (yang cukup besar). Ditutup SmartGit dan menjeda perangkat lunak cadangan saya (CrashPlan), dan setelah itu berhasil. Tidak yakin yang mana dari 2 yang berhasil, tetapi jika berjalan, ini juga bisa untuk Anda.

Frederik Struck-Schøning
sumber
0

Saya memiliki masalah yang sama ketika melakukan git pull dan seperti yang dinyatakan di atas, itu karena sebuah program yang menyimpan file-file itu dan tidak mengizinkan git pull. Menutup program membantu. Biasanya, IDE (seperti Eclipse) dari tempat file sedang diperiksa akan menahannya di latar belakang. Menutup git pull yang sama dan menjalankannya kembali memecahkan masalah untuk saya.

Somesh Rao
sumber
0

Saya memiliki kesalahan yang sama dan menutup aplikasi yang memiliki file terbuka menyelesaikannya. Saya bisa kembali dan menekan "Y"

Paul McDaniel
sumber