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?


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.


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.


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


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.


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.


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.


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


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.


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.


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.


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


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 :)


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.


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.


3

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

Itu diperbaiki dengan checkout baru.


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.


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 !!


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 ...


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.


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.


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 ???)


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


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


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


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.


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.


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.


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.

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.


1

Untuk melakukan pembersihan

  1. Hapus folder .svn.

  2. Lakukan svncheckout di folder root.

  3. Coba lakukan operasi pembersihan.

Ini menyelesaikan masalah saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.