Adakah yang tahu cara untuk secara rekursif menghapus semua file dalam copy pekerjaan yang tidak di bawah kendali versi? (Saya membutuhkan ini untuk mendapatkan hasil yang lebih andal dalam VMware build otomatis saya.)
svn
build-automation
Stefan Schultze
sumber
sumber
hg purge --all
di Mercurial.Jawaban:
Edit:
Subversion 1.9.0 memperkenalkan opsi untuk melakukan ini:
Sebelum itu, saya menggunakan skrip python ini untuk melakukan itu:
Tampaknya melakukan pekerjaan dengan cukup baik.
sumber
svn cleanup --remove-unversioned
lebih baik. Dan untuk Subversion 1.9.0 (versi ini dari 2015). Ini stabil dan standar.ini bekerja untuk saya di pesta:
Seth Reno lebih baik:
Ini menangani folder dan spasi tidak berversi dalam nama file
Sesuai dengan komentar di bawah, ini hanya bekerja pada file yang subversi tidak tahu tentang (status =?). Apa pun yang subversi tidak tahu tentang (termasuk Diabaikan file / folder) tidak akan dihapus.
Jika Anda menggunakan subversi 1.9 atau lebih tinggi, Anda dapat menggunakan perintah pembersihan svn dengan opsi --remove-unversioned dan --remove-ignored
sumber
svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
Saya berlari melintasi halaman ini sambil mencari untuk melakukan hal yang sama, meskipun bukan untuk pembuatan otomatis.
Setelah mencari lebih banyak, saya menemukan ' Menu Konteks yang Diperluas ' di TortoiseSVN. Tahan tombol shift dan klik kanan pada copy pekerjaan. Sekarang ada opsi tambahan di bawah menu TortoiseSVN termasuk ' Hapus item tidak berversi ... '.
Meskipun mungkin tidak berlaku untuk pertanyaan khusus ini (yaitu dalam konteks pembuatan otomatis), saya pikir ini mungkin berguna bagi orang lain yang ingin melakukan hal yang sama.
sumber
Lihat: svn-clean
sumber
Jika Anda menggunakan baris perintah windows,
Versi yang ditingkatkan:
Jika Anda menggunakan ini dalam file batch, Anda perlu menggandakan
%
:sumber
Saya menambahkan ini ke profil windows PowerShell saya
sumber
--no-ignore
kesvn status
dan-Recurse
keRemove-Item
Baris perintah Linux:
Atau, jika beberapa file Anda dimiliki oleh root:
Ini berdasarkan jawaban Ken. (Jawaban Ken melewatkan file yang diabaikan; jawaban saya menghapusnya).
sumber
Lakukan saja di unix-shell dengan:
sumber
Bisakah Anda tidak hanya melakukan ekspor ke lokasi baru dan membangun dari sana?
sumber
Jika Anda memiliki TortoiseSVN di jalur Anda dan Anda berada di direktori yang benar:
Opsi dijelaskan dalam bantuan TortoiseSVN untuk
/command:cleanup
:sumber
Jika Anda menggunakan tortoise svn, ada perintah tersembunyi untuk melakukan ini. Tahan shift sambil mengklik kanan pada folder untuk meluncurkan menu konteks di windows explorer. Anda akan mendapatkan perintah "Hapus Item Tidak Berversi".
lihat bagian bawah halaman ini untuk detailnya, atau cuplikan layar di bawah ini yang menyoroti fitur tambahan dengan bintang hijau, dan salah satu yang menarik dengan persegi panjang kuning ...
sumber
Subversion 1.9.0 memperkenalkan opsi untuk menghapus item tidak berversi [1]
[1] https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
sumber
Konversi C # saya dari skrip Thomas Watnedals Python:
sumber
Ini adalah perintah shell unix untuk menghapus semua file yang tidak berada di bawah kendali subversi.
Catatan:
st
disvn st
adalah build-in alias untukstatus
, yaitu perintah setara dengansvn status
--no-ignore
juga menyertakan file non-repositori dalam output status, jika tidak mengabaikan melalui mekanisme seperti.cvsignore
dll. - karena tujuannya adalah untuk memiliki titik awal yang bersih untuk build, sakelar ini adalah suatu keharusangrep
filter output sehingga hanya file yang tidak diketahui untuk subversi yang tersisa - garis dimulai dengan?
daftar file yang tidak diketahui untuk subversi yang akan diabaikan tanpa--no-ignore
opsised
xargs
perintah diinstruksikan melalui-r
untuk tidak mengeksekusirm
, ketika daftar argumen akan kosong-d '\n'
pilihan memberitahuxargs
untuk menggunakan baris baru sebagai pembatas perintah tersebut juga bekerja untuk nama file dengan spasirm -r
digunakan jika direktori lengkap (yang bukan bagian dari repositori) perlu dihapussumber
Saya tidak bisa mendapatkan semua hal di atas untuk bekerja tanpa ketergantungan tambahan. Saya tidak ingin menambahkan ke sistem build otomatis saya di win32. Jadi saya mengumpulkan perintah Ant berikut - perhatikan ini memerlukan Ant-contrib JAR untuk diinstal (saya menggunakan versi 1.0b3, yang terbaru, dengan Ant 1.7.0).
Perhatikan ini menghapus semua file tidak berversi tanpa peringatan.
Untuk folder lain, ubah
${basedir}
referensinya.sumber
hapus gema jika Anda yakin itu yang ingin Anda lakukan.
sumber
/bin/sh
dan nrm
proses bercabang.Karena semua orang melakukannya ...
sumber
Mungkin juga menyumbangkan opsi lain
/(Configi>.ini)/ untuk tujuan saya sendiri.
Dan mungkin ide yang bagus untuk menambahkan --no-ignore ke perintah svn
sumber
Saya tersandung pada svn-clean di mesin RH5 saya. Itu terletak di / usr / bin / svn-clean
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean
sumber
Solusi cmd / bat windows murni:
sumber
Saya sudah mencoba versi Seth Reno dari jawaban ini tetapi tidak berhasil untuk saya. Saya memiliki 8 karakter sebelum nama file, bukan 9 yang digunakan dalam
cut -c9-
.Jadi ini versi saya dengan
sed
alih - alihcut
:sumber
Jika Anda keren dengan PowerShell:
Keluarkan flag -WhatIf untuk membuat perintah benar-benar melakukan penghapusan. Jika tidak, itu hanya akan menampilkan apa yang akan dilakukannya jika dijalankan tanpa -WhatIf.
sumber
Saya akan menambahkan ini sebagai komentar untuk jawaban Thomas Watnedal , tetapi belum bisa.
Masalah kecil dengannya (yang tidak akan mempengaruhi Windows) adalah ia hanya memeriksa file atau direktori. Untuk sistem mirip Unix di mana tautan simbolik mungkin ada, perlu untuk mengubah baris:
untuk
untuk juga menghapus tautan.
Bagi saya, mengubah baris terakhir
if match: removeall(match.group(1))
menjadisehingga menampilkan apa yang dihapusnya juga berguna.
Bergantung pada kasus penggunaan,
?[\?ID]
bagian dari ekspresi reguler mungkin lebih baik?[\?I]
, karenaD
juga menghapus file yang dihapus, yang berada di bawah kontrol versi. Saya ingin menggunakan ini untuk membangun di folder yang bersih dan sudah diperiksa, jadi seharusnya tidak ada file dalamD
keadaan.sumber
@zhoufei Saya menguji jawaban Anda dan berikut adalah versi terbarunya:
%
tanda di depan G dan H.%~1
dapat digunakan nama direktori apa pun, saya menggunakan ini sebagai fungsi dalam file bat, jadi%~1
parameter input pertamasumber
Jika Anda tidak ingin menulis kode apa pun, svn2.exe dari svn2svn melakukan ini, juga ada artikel tentang cara penerapannya. Folder dan file yang dihapus dimasukkan ke dalam recycle bin.
Jalankan "svn2.exe sync [path]".
sumber
Untuk orang-orang yang suka melakukan ini dengan perl, bukan python, Unix shell, java, dll. Dengan ini, skrip perl kecil yang juga melakukan jib.
Catatan: Ini juga menghapus semua direktori tidak berversi
sumber
Menggunakan TortoiseSVN: * klik kanan pada folder copy pekerjaan, sambil menahan shift-key ke bawah * pilih "hapus item tidak berversi"
Bagaimana saya bisa menghapus semua file / folder tidak berversi / diabaikan dalam copy pekerjaan saya?
sumber
Cara bersih untuk melakukan ini di PERL adalah:
sumber
Saya menggunakan ~ 3 jam untuk menghasilkan ini. Diperlukan waktu 5 menit untuk melakukannya di Unix. Masalah utama adalah: spasi dalam nama untuk folder Win, ketidakmungkinan untuk mengedit %% i dan masalah dengan mendefinisikan vars di loop cmd Win.
sumber
C # kode snipet di atas tidak bekerja untuk saya - Saya memiliki klien svn tortoise, dan baris diformat sedikit berbeda. Berikut adalah snipet kode yang sama seperti di atas, hanya ditulis ulang untuk berfungsi dan menggunakan regex.
sumber