Salinan kerja XXX dikunci dan pembersihan gagal di SVN

582

Saya mendapatkan kesalahan ini ketika saya melakukan svn update:

Salinan yang berfungsi XXXXXXXX terkunci Harap jalankan perintah "Bersihkan"

Ketika saya menjalankan pembersihan, saya mengerti

Pembersihan gagal memproses jalur berikut: XXXXXXXX

Bagaimana saya keluar dari loop ini?

Dan
sumber
5
Saya mendapat pesan ini juga. Jawaban yang diberikan tampak sedikit membosankan (terutama yang tertinggi). Saya baru saja menutup VS dan membuka kembali solusinya dan saya dapat memeriksa semuanya dengan baik.
oscilatingcretin
Mengikuti komentar eakkas untuk menghapus entri dari tabel WORK_QUEUE menggunakan SQLLite Manager Firefox, memperbaiki masalah ini untuk saya.
zeppelin
12
Ada jawaban sederhana, cukup centang opsi, "buka kunci" dan itu akan membersihkan copy pekerjaan Anda
Farhan

Jawaban:

517

Satu pendekatan adalah:

  1. Salin item yang diedit ke lokasi lain.
  2. Hapus folder yang berisi jalur masalah.
  3. Perbarui folder yang berisi melalui Subversion.
  4. Salin file Anda kembali atau gabungkan perubahan yang diperlukan.
  5. Melakukan

Pilihan lain adalah menghapus folder tingkat atas dan memeriksa lagi. Semoga itu tidak terjadi.

Chuck
sumber
123
Memberi +1 kepada Anda untuk solusi ini untuk memperbaiki tidak hanya masalah OP (dan saya), tetapi juga untuk memberikan 5 langkah yang tampaknya memperbaiki masalah svn. -1 hingga subversi untuk penyelesaian yang dibutuhkan seperti itu.
pxl
34
Meskipun ini secara teknis berfungsi, ini adalah cara yang buruk untuk melakukan ini dibandingkan dengan melepas kunci sehingga layak untuk downvote.
Jukka Dahlbom
8
Saya tidak dapat melakukan langkah 3 karena ... "Salinan kerja sudah dikunci"
Evgeny
20
Pertimbangkan saran dari BradS "Bagi saya, triknya adalah menjalankan 'svn cleanup' di bagian atas copy pekerjaan saya, bukan di folder tempat saya bekerja sepanjang waktu sebelum masalah terjadi."
Marco
5
Bagi mereka yang menggunakan Tortoise SVN, Anda dapat menjalankan pembersihan pada folder root dari direktori check-out dan memaksa Break Locks. Selain itu Anda dapat meminta untuk menghapus file yang tidak berversi. Kemudian ambil pembaruan.
Obaid
476

Bagi saya, triknya adalah menjalankan svn cleanupdi bagian atas copy pekerjaan saya, bukan di folder tempat saya bekerja sepanjang waktu sebelum masalah terjadi.

BradS
sumber
biasanya berfungsi tetapi tidak lagi, tidak yakin apakah itu karena saya memutakhirkan ke SVN 1.7
Populus
4
ini bekerja untuk saya dengan klien yang menjalankan 1,7, meskipun server masih 1,6.x
Mark Hosang
Bekerja untuk saya pada 1,7 sangat dihargai
scarpacci
1
Saya telah menggabungkan petunjuk dari jawaban Intu dengan yang ini: cari folder induk yang memiliki file "kunci" di folder .svn, kemudian jalankan "svn cleanup" di sana. Itu berhasil bagi saya.
rob74
5
Ini bekerja untuk saya, jauh lebih cepat daripada cara Chuck. Jadi patut dicoba terlebih dahulu.
goamn
210

Lihat di .svnfolder Anda , akan ada file di dalamnya yang disebut lock. Hapus file itu dan Anda akan dapat memperbarui. Mungkin ada lebih banyak file kunci di .svndirektori setiap subdirektori. Mereka juga perlu dihapus. Ini bisa dilakukan sebagai batch cukup sederhana dari baris perintah dengan mis

find . -name 'lock' -exec rm -v {} \;

Perhatikan bahwa Anda mengedit file secara manual di .svnfolder. Mereka ditempatkan di sana karena suatu alasan. Alasan itu mungkin sebuah kesalahan, tetapi jika tidak, Anda bisa merusak salinan lokal Anda.

SUMBER: http://www.svnforum.org/2017/viewtopic.php?p=6068

Intu
sumber
8
+1 Saya pikir ini pendekatan yang jauh lebih baik daripada jawaban yang dipilih saat ini - Saya benci harus menyalin file di tempat lain terlebih dahulu untuk mengatasi masalah (umum!) Ini. Milik saya disebabkan oleh alat pembuat kode yang menghasilkan file dengan nama yang sama dengan yang telah ditambahkan orang lain ke SVN. Buruk saya untuk tidak "svn up" pertama saya kira ...
alpian
44
Ini tidak berfungsi lagi dengan Tortoise / SVN 1.7 (atau setidaknya saya tidak dapat menemukan file kunci karena sekarang ada DB terpusat dengan metadata).
pesche
10
di sini adalah satu-liner cepat yang harus secara rekursif menghapus semua kunci mulai dari direktori saat ini:find . | grep ".svn/lock" | xargs rm
Jesse
1
Dengan SVN 1.7, jawaban @ BradS tampaknya lebih efektif. Jawaban ini tidak berhasil untuk saya, dan BradS menjawab.
Ira Baxter
1
Dalam kasus saya tidak ada file kunci di mana pun dapat ditemukan.
Tim MB
106

Dalam kasus saya, saya memecahkannya dengan secara manual menghapus catatan dalam catatan kunci file SQLite ".svn \ wc" di tabel WC_LOCK.

Saya membuka file "WC" dengan editor SQLite dan dieksekusi

delete from WC_LOCK

tangkapan layar yang menunjukkan semua entri dibersihkan dari WC_LOCK

Mengikuti komentar eakkas , Anda mungkin perlu menghapus semua entri dari WORK_QUEUEtabel juga.

Gad D Lord
sumber
1
Ini bekerja untuk saya untuk Subversion 1.7.5 di Windows. Unduh versi uji coba SQLite Expert dari sini: sqliteexpert.com/download.html . Jalankan pernyataan "hapus" sql di atas di tab SQL.
M Katz
Ini jauh lebih baik, satu perbedaannya adalah saya mengklik tombol merah (-)
Rohit Srivastava
3
DI SQL Spy gratis juga akan membantu: yunqa.de/delphi/doku.php/products/sqlitespy/index
Ivelin Nikolaev
12
Ini juga berfungsi untuk saya, tetapi saya juga perlu membersihkan entri dalam tabel
WORK_QUEUE
6
Tidak berfungsi dengan menghapus item dari WC_LOCK - pekerjaan apa yang melihat isi gumpalan item WORK_QUEUE saya dan cukup yakin itu adalah file masalah - Saya menghapus file dari browser repo dan kemudian menghapus item work_queue - setelah ini menjalankan pembersihan dan kembali dalam bisnis!
GregM
95

Cara termudah:

  1. Pergi ke direktori Induk (Folder) dari Proyek .
  2. Pres Klik kanan
  3. Tekan pada TortoiseSVN lalu Tekan Bersihkan ...
  4. Dialog pembersihan akan muncul secara otomatis
  5. Pilih Clean up working copy status, Break locks, Fix time stamps, Vacuum pristine copies, Refresh shell overlays,Include externals
  6. Pres OK

Anda berhasil melakukan pekerjaan Anda.

Periksa tangkapan layar untuk referensi Anda.

Langkah pertama:

masukkan deskripsi gambar di sini

Langkah kedua: Aktifkan opsi Break lock (kotak centang kedua di jendela sembulan pembersihan) masukkan deskripsi gambar di sini

Semoga ini banyak membantu Anda.

Hiren Patel
sumber
10
dalam kasus saya, opsi "Break lock" sudah cukup, mungkin coba dulu hanya dengan yang satu ini
Donatello
Jawaban yang bagus. Saya memiliki kasus 'kebutaan dialog' dengan yang satu ini dan tidak pernah memeriksa opsi pembersihan. Secara historis, 'menavigasi ke root dan membersihkan' dulu berfungsi tetapi saya kira memecahkan kunci sudah cukup dalam kasus saya ..
Phil Cooper
1
Bekerja untuk saya juga!
Daniel Silva
Tidak menyangka 'mematahkan kunci' akan melakukannya, karena saya tidak membuat kunci. Tapi ternyata itu merusak kunci internal svn yang menyebabkan masalah ini. Terima kasih!
basher
Tidak bekerja untuk saya 😦
Chimpanzee
48

Seorang kolega di tempat kerja terus-menerus melihat pesan ini, dan baginya itu karena ia menghapus direktori di bawah kontrol versi SVN tanpa menghapusnya dari SVN, dan kemudian membuat direktori baru di tempatnya bukan di bawah kontrol versi, dengan nama yang sama.

Jika ini masalah Anda ...:

Ada beberapa cara untuk memperbaikinya, tergantung pada bagaimana / mengapa direktori diganti.

Bagaimanapun, Anda mungkin perlu:

A) Ubah nama direktori yang ada menjadi nama sementara

B) Lakukan pengembalian SVN untuk memulihkan direktori yang dihapus dari sistem file, tetapi tidak dari SVN

Dari sana, Anda juga akan

A) Salin file yang relevan ke direktori yang telah dihapus

B) Jika Anda memiliki perubahan yang signifikan dari isi direktori, melakukan SVN menghapus pada asli, komit, dan mengubah nama Anda direktori kembali baru ke nama yang diinginkan, diikuti oleh SVN menambahkan untuk mendapatkan yang satu di bawah kontrol versi.

Matt
sumber
1
Langkah kedua Anda B) tampaknya ide yang sangat buruk bagi saya, karena akan memecah riwayat revisi untuk item dari direktori asli yang disimpan dalam versi baru.
Dunaril
Hal-hal yang sangat buruk terjadi ketika orang tersebut menghapus direktori berversi dari sistem file tetapi tidak dari SVN. Jawaban di atas mungkin bukan pemulihan yang sempurna, tetapi itu adalah pemulihan.
Teemu Leisti
34

Bagi saya tidak ada solusi di atas yang berhasil. Saya menemukan solusi dengan memecahkan kunci. Ketika saya melakukan pembersihan svn, saya memilih "Break Locks" bersama dengan "Clean up working copy status".

masukkan deskripsi gambar di sini

LoveForDroid
sumber
Bagi saya memecahkan kunci dari browser repo Tortoise SVN bekerja. Memecahkan kunci pada folder yang diperiksa tidak melakukan apa pun.
Bhargava Mummadireddy
23

Yang ini berhasil untuk saya.

  1. Buka folder root,
  2. Klik kanan dan pembersihan
  3. Periksa semua opsi yang tersedia
  4. Tekan OK

Setelah membersihkan itu akan memungkinkan Anda untuk memperbarui ke versi terbaru.

Tombak
sumber
2
Ini juga berfungsi untuk saya. Anda perlu memeriksa semua opsi yang tersedia (6 entri dalam versi saya) untuk melanjutkan Bersihkan; itu akan gagal jika Anda hanya memeriksa opsi [Bersihkan status salin yang aktif] dan [Sertakan eksternal].
Vincent Jia
1
Ini benar-benar bekerja untuk saya ... hanya dengan klik kanan pada proyek> Tim> Pembersihan. Belum harus menghapus baris apa pun dari SQL di .svn atau yang lainnya. Hanya ini yang berhasil. Terima kasih!
msqar
Ini bekerja untuk saya juga dalam versi 1.7.4 dari TortoiseSVN. Saya pergi dengan kotak centang default yang disajikan.
slm
Membantu saya hari ini, tetapi saya tidak perlu memeriksa semua opsi yang tersedia. Tiga terakhir yang mengembalikan perubahan yang tidak saya periksa, dan tetap berhasil. Lihat juga stackoverflow.com/a/35192644/460775
EMBarbosa
1
Ini berhasil untuk saya. Saya baru saja memeriksa Clean up working copy statusdan Breaks locksdanInclude externals
Phiber
11

Bagi saya, itu sebenarnya kesalahan Tortoise, semacam. Tortoise hanya mengeluh "tidak bisa membersihkan, menjalankan pembersihan", tetapi ketika saya menjalankan baris perintah (svn cleanup), ia dengan jelas mengatakan kepada saya bahwa itu tidak dapat menghapus beberapa file yang sedang digunakan, solusi yang sudah jelas. Setelah saya menutup Visual Studio (yang membuat file tetap terbuka), maka pembersihan bekerja dengan baik.

Program lain juga dapat membuat file tetap terbuka di repo yang menyebabkan masalah ini. Excel memegang xls terbuka adalah penyebab di contoh lain sehingga mungkin bijaksana untuk menutup semua program yang mungkin menggunakan apa pun di repo atau bahkan me-reboot untuk memaksa program untuk menutup dan kemudian mencoba pembersihan lagi.

Mark Sowul
sumber
7

Saya mengalami masalah ini karena folder eksternal tidak ingin ditautkan ke folder yang ada. Jika Anda menambahkan baris properti svn: externals di mana tujuannya adalah folder yang ada (versi atau non-versi), Anda akan mendapatkan kesalahan terkunci SVN Woring Copy. Di sini pembersihan juga akan memberi tahu Anda bahwa segalanya baik-baik saja tetapi masih memperbarui tidak akan berhasil.

Solusi: Hapus folder yang bermasalah dari repositori dan buat pembaruan di folder root di mana properti svn: externals diatur. Ini akan membuat folder dan semuanya akan baik-baik saja.

Masalah ini muncul untuk saya karena svn: eksternal untuk file mengharuskan folder tujuan dikontrol versi. Setelah saya perhatikan bahwa ini tidak bekerja di repositori yang berbeda, saya bertukar dari file eksternal ke folder eksternal dan masuk ke kekacauan ini.

Oliver Zendel
sumber
6

Cara termudah untuk melakukan ini adalah menampilkan folder tersembunyi dan kemudian buka folder .SVN. Anda akan melihat file nol KB bernama "lock" menghapus ini akan memperbaiki masalah

fawefawefa
sumber
5

Saya menemukan masalah yang sama persis menggunakan SVN 1.7 dan tidak ada perbaikan yang disebutkan di atas yang berhasil.

Yang terpenting, pastikan Anda mencadangkan semua konten yang diedit.

Setelah menghabiskan beberapa jam (tidak mengunduh ulang semuanya karena ukuran cabang saya lebih dari 6gb), saya menemukan bahwa ada file db bernama "wc" di folder .svn di cabang Anda.

Buka file db menggunakan manajer db (saya menggunakan plugin manajer sqlite firefox) dan arahkan ke tabel WC_LOCK. Tabel ini akan memiliki entri untuk kunci yang diperoleh. Hapus catatan dari tabel dan Anda selesai :)

Rohan
sumber
meskipun itu adalah duplikat dari jawaban sebelumnya, saya memberi Anda suara karena Anda menyebutkan plugin firefox SQLite manager.
ehambright
3

Ketika saya memiliki masalah ini, saya menemukan menjalankan perintah pembersihan langsung di jalur masalah yang umumnya tampaknya berfungsi. Lalu saya akan menjalankan cleanup dari root lagi, dan itu akan mengeluh tentang beberapa direktori lain. dan saya ulangi saja sampai berhenti mengeluh.

stephen
sumber
1
Saya tidak dapat menemukan file kunci seperti jawaban sebelumnya, tetapi ini berhasil untuk saya :)
serenskye
3

Jika Anda menggunakan mesin Windows, Lihat repositori melalui browser dan Anda mungkin melihat dua file dengan nama file yang sama tetapi menggunakan case yang berbeda. Subversion peka huruf besar kecil dan Windows tidak sehingga Anda bisa mendapatkan kunci ketika Windows berpikir itu menarik file yang sama dan Subversion tidak. Hapus nama file duplikat di repositori dan coba lagi.

toxaq
sumber
3

Saya melakukannya dengan hanya membuat folder baru, memeriksa proyek, menyalin file yang diperbarui ke folder baru.

Itu diperbaiki dengan checkout baru.

Mengenakan
sumber
Saya melakukan hal yang sama. (Saya meletakkan akar penyebabnya ke AnkhSVN mengacaukan copy pekerjaan saya. AnkhSVN sekarang dihapus).
Scotty.NET
2

Apakah Anda menggunakan TortoiseSVN dan baru saja ditingkatkan? Saya pernah mengalami masalah itu sebelumnya saat berpindah dari 1,4 ke 1,5 dan tidak me-reboot. (Coba reboot).

Alasan Anda perlu reboot adalah karena file cache menjadi funky.

Jika tidak, untuk melanjutkan, ekspor copy pekerjaan itu ke folder baru (jangan salin folder tersembunyi .svn), periksa kembali proyek, dan pindahkan semua kode Anda kembali, kemudian lanjutkan dengan komit Anda.

Adam
sumber
Ini terjadi pada saya juga, yaitu saya hanya perlu me
Matthew Lock
2

hapus saja folder .svn, lalu jalankan pembersihan pada direktori induk. Bekerja dengan sempurna !!

Ben
sumber
3
Di SVN 1.7, ini tidak akan berfungsi karena hanya ada satu folder .svn, di bagian atas. Jika dihapus, lampiran ke repositori dihapus.
AnneTheAgile
2

Dalam Versi di bawah Mac OS: Tindakan -> Bersihkan kunci penyalinan yang ...

HotJard
sumber
2

Saya sering mendapat masalah seperti itu. Pola saya yang menyebabkan masalah pembersihan.

  1. Saya membuka file gambar di viewer.
  2. Saya menghapus file / folder gambar.
  3. Saya mencoba melakukan / memperbarui

Menutup penampil gambar di mana file yang dihapus dibuka memecahkan masalah. Mungkin perangkat lunak lain dapat memblokir pembersihan dengan cara yang sama.

Secara umum. Saya percaya me-restart komputer dapat membantu dalam kasus seperti itu.

Dmitry Borisov
sumber
1

SVN biasanya memperbarui struktur internal (.svn / prop-base) dari file dalam folder sebelum file aktual diambil dari repositori. Setelah file diambil ini akan dihapus. Seringkali kesalahan dilemparkan karena "pembaruan" gagal atau dibatalkan sebelum waktunya selama berlangsungnya pembaruan.

  1. Periksa apakah ada file yang terdaftar di direktori .svn / prop-base
  2. Hapus semua file yang tidak ada di bawah folder
  3. Membersihkan
  4. Memperbarui

Sekarang pembaruan harus bekerja.

lud0h
sumber
1

Punya masalah yang sama karena saya mengekspor folder di bawah folder yang dikendalikan versi. Harus menghapus folder dari TortoiseSVN, lalu hapus folder dari filesystem (TortoiseSVN tidak suka subfolder tidak berversi ... kenapa tidak ???)


sumber
Saya harus menambahkan bahwa saya mengekspor folder ke FOLDER YANG SAMA .. ini adalah cara Anda unversion. folder berversi.
1

Mulai Pencarian .... Kunci ... Pilih semua file yang terdaftar dan hapus .. diperbaiki

Ryan
sumber
1

yang harus dilakukan:

svn status | grep ". L" | sed 's /.* (. *) $ / \ 1 /' | awk '{panjang cetak ($ ​​1), $ 1}' | sort -nr | awk '{print "pushd" $ 2 "; svn cleanup; popd"}' | SH

pemberi bug
sumber
1

Jangan hapus solusi Anda!

dalam folder .svn Anda memiliki file bernama kunci itu dengan panjang 0 byte

Anda dapat menghapus semua file ini dari semua folder .svn di solusi Anda dan itu akan berfungsi

Ini berhasil dalam kasus saya

Para
sumber
Ini adalah solusi paling sederhana! Bekerja untuk saya
Nathan
Ya, sayangnya itu tidak berfungsi untuk versi SVN terbaru. Untuk versi terbaru Anda harus menghapusnya karena tidak ada lagi file kunci. tampaknya tidak ada lagi file yang ada seluruh struktur folder lainnya. Jika ada yang tahu jika ada sesuatu yang masih dapat dimodifikasi dengan cara yang mirip dengan yang di atas, silakan bagikan dengan kami.
Para
1

Pemecahan file di tempat, dan checkout baru ke lokasi yang sama, telah memecahkan masalah ini untuk saya.

Di TortoiseSVN, untuk melakukan unversioning di tempat, seret kanan folder root dari copy pekerjaan dari daftar file ke dirinya sendiri di pohon direktori, dan pilih "SVN Ekspor item berversi di sini" dari menu pop-up. TortoiseSVN memperhatikan bahwa tujuannya sama dengan sumbernya, dan menyarankan pembatalan copy pekerjaan.

Setelah tidak berversi, lakukan checkout baru ke folder yang sama (yang sekarang berisi salinan tidak berversi dari semua file yang Anda miliki). TortoiseSVN akan memperingatkan Anda bahwa Anda memeriksa folder yang ada, tetapi Anda bisa melanjutkan.

Setelah ini, pembersihan, pembaruan, dan operasi lainnya bekerja tanpa hambatan. Karena kedua langkah di atas mempertahankan modifikasi lokal, seharusnya tidak ada kehilangan informasi (tetapi mendukung copy pekerjaan sebelum ini mungkin merupakan ide yang baik).

Satu peringatan: Jika copy pekerjaan berisi versi campuran atau perubahan properti yang tidak dikomit, informasi tersebut AKAN hilang. Bagi saya, ini bukan kejadian umum, dan diberi pilihan copy pekerjaan yang korup atau kehilangan perubahan properti yang tidak dikomit, saya cenderung memilih yang terakhir.

Magnus
sumber
1

Saya punya masalah ini di mana "pembersihan" bekerja, tetapi "pembaruan" akan terus gagal. Solusi yang berhasil adalah menghapus folder yang dimaksud melalui Windows Explorer, bukan penghapusan TortoiseSVN (yang menandai penghapusan sebagai sesuatu untuk dikomit ke repositori, dan kemudian saya melakukan "checkout" pada dasarnya "memperbarui" folder dari respository.

Info lebih lanjut tentang perbedaan antara penghapusan O / S dan penghapusan SVN di sini: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html

Terutama:

Ketika Anda TortoiseSVN → Hapus file, itu dihapus dari copy pekerjaan Anda segera serta ditandai untuk dihapus dalam repositori pada komit berikutnya.

Dan:

Jika file dihapus melalui explorer alih-alih menggunakan menu konteks TortoiseSVN, dialog komit memperlihatkan file-file itu dan memungkinkan Anda menghapusnya dari kontrol versi juga sebelum komit. Namun, jika Anda memperbarui copy pekerjaan Anda, Subversion akan melihat file yang hilang dan menggantinya dengan versi terbaru dari repositori.

Xonatron
sumber
1

Jika Anda menggunakan Linux, coba ini:

find "/the/path/to/your/directory" -name .svn -type d | xargs chmod 0777 -R

Kemudian jalankan cleanupperintah pada direktori itu, kemudian coba perbarui.

The Love Of Ocde
sumber
1

Saya melakukan yang berikut untuk memperbaiki masalah saya:

  1. Mengganti nama folder yang menyinggung dengan menempatkan "_" di depan nama folder.
  2. Melakukan "Bersihkan" dari folder induk.
  3. Mengganti nama folder yang menyinggung kembali ke nama aslinya.
  4. Melakukan komit.
pengguna1319487
sumber
1

Di penjelajah solusi, klik kanan pada proyek, di pembukaan sub-menu klik pada subversi dan pilih pembersihan. Ini akan menyelesaikan masalah, seperti yang terjadi pada saya. Semoga ini akan berhasil.

Nadeem Jamali
sumber
1

Untuk melakukan pembersihan

  1. Hapus folder .svn.

  2. Lakukan svncheckout di folder root.

  3. Coba lakukan operasi pembersihan.

Ini menyelesaikan masalah saya.

Jayaguru
sumber