Peringatan Git Checkout: tidak dapat membatalkan tautan file, izin ditolak

109

Saya mengetahui bahwa ada masalah serupa tentang git terkait dengan peringatan 'tidak dapat membatalkan tautan', tetapi saya belum dapat menggunakannya.

Perbedaan utamanya adalah ini terjadi ketika saya belum pernah berurusan dengan submodul dengan cara apa pun (saya belum pernah menangani mereka sebelumnya). Saya membuat cabang yang disebut 'upgrade', menghapus file framework lama saya, dan menyalin yang baru. Saya menggunakan git add -A, lalu melakukan semuanya. Ketika saya mencoba untuk memeriksa cabang trunk, itu merespon dengan kesalahan berikut:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

... dll. Jumlahnya ratusan.

Pada awalnya saya pikir ini hanyalah masalah izin, jadi saya menambahkan izin menulis grup ke seluruh direktori persyaratan secara rekursif, tetapi tidak ada perubahan.

Sunting: Seperti yang disarankan dalam jawaban di bawah ini, saya mencoba melakukan hal yang sama tetapi dengan yang lainnya ditutup. Saya tidak lebih beruntung dari sebelumnya.

Masalah ini sangat melemahkan karena saya tidak bisa pindah ke bagasi untuk kembali ke perkembangan normal.

Suri teladan
sumber
9
Saya menyelesaikannya dengan sederhanasudo chown -R username directory
Stephen Corwin

Jawaban:

84

Saya biasanya melihat kesalahan seperti itu ketika ada proses yang tidak melepaskan pegangan file-file itu.

Pastikan tidak ada yang berjalan, lalu coba pembayaran Anda lagi.

Catatan: ini juga dapat terkait dengan cara Git diinstal (pada Windows, UAC dapat menimbulkan masalah jika msysgit diinstal di C:\Programatau C:\Program Files, lihat " msysgit - sh.exe - fork: Izin ditolak - Vista 64 bit " dan komentar 2 dari masalah 437 )

Catatan: seperti yang diilustrasikan di bawah , penyebab umum masalah lainnya adalah masalah hak pada direktori (pemilik salah), tidak harus pada file yang tidak dapat dibatalkan tautannya.

VonC
sumber
1
Saya menggunakan Ubuntu, untuk menyelesaikannya. Dan sayangnya saya hanya berada di browser web ini dan konsol saya, yang memiliki satu tab yang terbuka ke direktori yang relevan (dan dua tab terbuka di tempat lain).
Paragon
3
@Paragon: bahkan pada unix, Anda dapat menangani masalah. Jika tidak, ini harus menjadi masalah izin. Anda harus bisa memaksa pembayaran. git checkout -f master
VonC
2
+1 dalam kasus saya itu adalah berbagi folder dengan VM aktif yang melarang membuang file di git pada sistem host. Membuatku gila, jadi terima kasih atas petunjuknya!
Jook
1
Masalah yang sama. Menjalankan Process Explorer> Ctrl + F> <filename> - akan menampilkan proses, yang membuat file ini tetap terbuka.
setevoy
1
GitExtensions menampilkan kesalahan ini saat mencoba mengambil semua ... Saya juga membuka GitKraken. Setelah saya menutup GitKraken, pengambilan semuanya bekerja tanpa kesalahan.
mkaj
99

Dalam pertemuan pertama saya dengan kesalahan ini, pengguna saya memiliki hak untuk "menulis" ke file tetapi tidak ke direktori yang memuatnya. Periksa izin direktori yang berisi file tersebut.

Elijah Lynn
sumber
95
Ya ampun, lucu sekali, saya baru saja menemukan jawaban ini hari ini dan kemudian saya menyadari bahwa itu jawaban saya! Meskipun demikian, itu berhasil lagi!
Elijah Lynn
Ok, ini terjadi pada saya di windows 10, saya pergi ke folder proyek utama. dan tambahkan UNTUK SEMUA PENGGUNA YANG MUNGKIN, semua izin. Jadi untuk sistem, administrator, pengguna, semua kemungkinan. Terapkan chnages. Dan tampaknya berhasil, entah bagaimana mungkin dengan pembaruan windows 10, bahkan jika kita tidak membuat pengguna baru, kita diancam seperti yang baru, tanpa izin. Misalnya saya punya beberapa nama wird S-1-15-32 ..... Bukan nama login yang saya miliki saat membuka kunci laptop kita.
PsychedelicSubstance
30

"Batalkan tautan" pada dasarnya berarti "hapus file" dalam kasus ini.

Kesalahan ini tidak disebabkan oleh git itu sendiri. Anda seharusnya mengalami kesalahan serupa saat menghapus file tersebut secara manual, di baris perintah atau file explorer.

rtconner
sumber
18
Dalam pertemuan pertama saya dengan kesalahan ini, pengguna saya memiliki hak untuk "menulis" ke file tersebut tetapi direktori yang berisi tidak.
Elijah Lynn
3
@Elijah: Terima kasih! Itulah bagi saya.
Jesse Lee
4
Dalam kasus saya, saya menemukan file yang dimaksud dikunci oleh aplikasi lain. Menutup aplikasi membebaskan file dan memungkinkan proses checkout.
Simon Tewsi
25

Anda tidak memiliki izin akses, mungkin karena Anda bukan pemiliknya.

Perbaiki dengan mengubah pemilik menjadi diri Anda sendiri:

sudo chown -R your_login_name /path/to/folder
Vince Yuan
sumber
2
Di mesin pengembangan lokal saya, file yang dipermasalahkan awalnya dibuat oleh server apache lokal saya, jadi dimiliki oleh pengguna www-data. Setelah saya memasukkannya ke akun saya sendiri, semuanya berfungsi normal kembali. "Izin Ditolak" adalah masalah sebenarnya. "Tidak dapat membatalkan suka" hanyalah ikan haring merah.
Dale Anderson
23

Saya mengalami masalah dengan file default-settings.php di drupal 7. Dalam kasus ini saya tidak dapat menghapus atau mengembalikannya seperti yang dikatakan @rtconner. Saya tidak memiliki aplikasi atau apa pun yang menggunakan file ini, dan itu berakhir dengan kesalahan izin.

Saya menambahkan chmod 777 *ke folder dan kemudian saya dapat mengembalikannya tanpa masalah.

Rob Erskine
sumber
3
Meskipun Anda mungkin tidak menginginkan 777folder apa pun. Ini memang menyelesaikan masalah saya, tetapi saya dengan cepat mengubahnya kembali ke default setelah diselesaikan. Terima kasih!
Bram
13

Anda dapat mengubah izin menulis untuk menyelesaikannya.

sudo chmod -R ug+w . 

Perintah ini akan memberikan 'w'izin ke semua folder di direktori saat ini.

Rajendra kumar Vankadari
sumber
6

Saya mengalami masalah ini setiap kali menjalankan "git repack" atau "git gc" di mesin OS X saya, bahkan saat menjalankan git dengan hak istimewa admin, dan saya akhirnya menyelesaikannya setelah menemukan halaman ini: http://hints.macworld.com /comment.php?mode=view&cid=1734

Cara mengatasinya adalah dengan membuka terminal, buka repo git Anda, cd ke folder .git, lalu lakukan:

chflags -R nouchg *

Jika itu masalahnya, maka setelah itu, perintah git Anda akan berfungsi seperti biasa.

Pelajari OpenGL ES
sumber
1
Tautan macworld tidak lagi valid. Berikut ref yang diperbarui: superuser.com/a/40754
webb
5

Ini juga dapat terjadi jika:

  1. Anda menjalankan proses di dalam container Docker , dan:

  2. Beberapa file dihasilkan oleh proses itu, dan:

  3. Tujuan file dipasang sebagai volume pada host Docker, dan:

  4. Anda menjalankan gitdi host Docker.


Jika demikian, tentukan file yang ingin Anda komit dan jalankan:

git diff --name-only --cached | xargs ls -l 

File yang memenuhi kriteria di atas akan diawali dengan:

-rw-r--r-- 1 root root ...

Mereka dimiliki oleh rootdan tidak dapat ditulis, itu tidak baik. Untuk memperbaiki proses itu:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

Solusi yang lebih bersih mungkin akan menggunakan --useropsi, lihat ini untuk Docker dan ini untuk penulisan Docker .

davetapley.dll
sumber
4

Bagi mereka yang menggunakan Intellij , seperti yang dikatakan @rtconner, masalah ini bukan disebabkan oleh git. Karena IDE Anda terkunci, file git tidak dapat membatalkan tautannya. Jadi, Anda perlu menutup IDE Anda dan kemudian mencoba menggabungkan (atau apa pun yang Anda suka) melalui baris perintah.

Hesam
sumber
Itu dia. Terjadi dengan Pengembangan Android, karena AndroidStudio adalah Intellij.
Kembalikan
2

Dalam kasus saya itu adalah karakter ":" dalam nama folder yang mencegah repo git untuk checkout di windows.

simonC
sumber
2

di terminal di mac saya hanya melakukan ini

sudo git checkout. (untuk membersihkan semuanya)

lalu

sudo git pull asal

Jry
sumber
2

Saya mengalami kesalahan ini di dalam mesin virtual (menjalankan Ubuntu), ketika saya mencoba melakukannya git reset --hard.

Perbaikannya hanya dengan menjalankan git reset --harddari mesin host OS X sebagai gantinya.

Henrik N
sumber
1

Tidak ada saran lain yang berhasil untuk saya, tetapi ini berhasil:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive

0x1mason
sumber
1

Dalam kasus saya, direktori Windows saya berada di bawah folder Dropbox. Ini bukan masalah khusus Git. Ketika sebuah file (dalam hal ini, file kunci) baru saja dibuat, Dropbox membutuhkan satu detik lagi untuk melakukan sinkronisasi. Selama waktu itu, file sedang digunakan oleh Dropbox, dan program pihak ketiga mana pun (dalam hal ini, Git) tidak dapat menghapus file tersebut.

Solusi saya adalah keluar dari Dropbox dan karenanya menghindari keajaiban di balik layar sinkronisasi file Dropbox.

Vincent
sumber
0

Saya mengalami kesalahan ini dan itu disebabkan oleh "pemilik / grup" yang salah dari file / folder tersebut . Anda harus meminta bantuan kepada admin server Anda untuk mengubah "pemilik / grup" dari file / folder ini dan mencoba lagi menggunakan "git pull" lagi. Atau jika Anda seorang sudoer, cukup sudo chown "nama pemilik / nama grup Anda" dan coba lagi menarik repositori Anda. Cobalah, ini berhasil 100% untuk saya!

Jeff Simons Decena
sumber
0

Pastikan bahwa setiap proses atau utas terkait tidak berjalan dan lakukan tugas akhir atau paksa berhenti jika diperlukan.

Pastikan Anda mengubah izin kepemilikan.

Creative_Cimmons
sumber
0

Secara umum, jika ini terjadi di Windows , dan Anda menggunakan tortoisegit , itu adalah cache status tortoisegit . Hentikan proses itu dan itu akan dibebaskan.

WiseStrawberry
sumber
Anda sebenarnya dapat menonaktifkan cache status TortoiseGit sepenuhnya, dan itu biasanya sesuatu yang saya rekomendasikan. Ini sering menjadi penyebab banyak file terkunci yang tidak terduga, dan cenderung lebih merepotkan daripada nilainya. Cukup gunakan git statusdari baris perintah sebagai gantinya.
0

Saya hanya perlu mengalihkan pengguna dari ubuntu ke nama pengguna saya yang sebenarnya yang pertama kali saya lakukan di bawah. Itu memperbaikinya.

Marc
sumber
dan bagaimana dengan pengguna windows?
Herr Nentu '27
OP ada di Ubuntu. Saya tidak akan berkomentar di utas Windows.
Marc
0

Dipecahkan untuk saya dengan mengatur klien git saya (GitExtensions) untuk selalu berjalan dalam mode admin.

frodo2975
sumber
0

Saya mengalami masalah itu saat menggunakan IntelliJ (14.1.3 Ultimate), saya ingin mengembalikan perubahan di beberapa file.

Diselesaikan dengan menutup Git Bashdibuka di jendela lain - percobaan pengembalian lain sedang IntelliJbekerja.

Belut Lee
sumber
0

Saya mengalami kesalahan ini dan saya pikir masalahnya adalah saya telah 'menjalankan sebagai admin' ketika saya memulai Eclipse dan membuat file, oleh karena itu file tersebut dimiliki oleh Admin (perhatikan dengan menjalankan 'ls -la' di folder). Ketika saya kemudian mencoba untuk menyimpan file, itu tidak membiarkan saya ('tidak dapat membatalkan tautan file' dan semua itu). Melakukan chmod pada file adalah perbaikan bagi saya.

LConrad
sumber
0

Yang perlu Anda lakukan adalah memberikan izin, jalankan perintah di bawah ini dari root proyek Anda:

    chmod ug+w <directory path>
Hansa
sumber
0

Saya memiliki masalah yang sama, saya mencoba beberapa alternatif seperti yang disarankan orang lain.

Tetapi akhirnya memberikan izin yang benar ke folder .git menyelesaikan masalah.

sudo chown -R "${USER:-$(id -un)}" .git
Raza Rafaideen
sumber
0

Dalam kasus saya, masalah izin diselesaikan dengan menetapkan www-datasebagai pemilik:

chown -R www-data project_folder_name
Avag Sargsyan
sumber
0

Saya pikir ini tentang izin file Anda:

sudo chmod 777 -R <your-git-folder>
Johnny Cage
sumber