Dengan TortoiseSVN, saya bisa memindahkan file ke daftar perubahan abaikan-komit, sehingga ketika saya komit seluruh pohon, perubahan pada file itu tidak dapat dilakukan.
Apakah ada cara untuk melakukan sesuatu seperti itu menggunakan alat baris perintah svn?
EDIT: Terima kasih atas saran yang digunakan svn:ignore
, tetapi itu tidak cukup apa yang saya cari.
svn:ignore
memengaruhi hal-hal seperti svn add
& svn import
. Ini memberikan daftar pola nama file untuk diabaikan.
Saya memiliki file yang sudah di bawah kendali sumber, tetapi saya ingin membuat perubahan sementara pada file itu yang saya tidak ingin komit nanti ketika saya mengkomit seluruh pohon sumber. Saya membuat banyak perubahan lain dan saya bisa menempel catatan di monitor saya mengatakan kepada saya untuk mengembalikan file itu sebelum saya komit pohon, tapi alangkah baiknya jika svn bisa secara otomatis melewati file itu.
sumber
Jawaban:
Subversion tidak memiliki fitur "tidak berkomitmen" / "abaikan komitmen" bawaan, pada Februari 2016 / versi 1.9. Jawaban ini adalah solusi baris perintah yang tidak ideal
Seperti yang dinyatakan OP, TortoiseSVN memiliki daftar perubahan bawaan, "ign-on-commit", yang secara otomatis dikecualikan dari komit. Klien baris perintah tidak memiliki ini, jadi Anda perlu menggunakan beberapa daftar perubahan untuk mencapai perilaku yang sama (dengan peringatan) :
Karena ada preseden dengan TortoiseSVN, saya menggunakan "abaikan-komit" dalam contoh saya untuk file yang tidak ingin saya komit. Saya akan menggunakan "kantor" untuk file yang saya lakukan, tetapi Anda dapat memilih nama yang Anda inginkan.
Pertama, tambahkan semua file ke daftar perubahan bernama "work". Ini harus dijalankan dari akar copy pekerjaan Anda:
Ini akan menambahkan semua file dalam copy pekerjaan secara rekursif ke daftar perubahan bernama "work". Ada kelemahan untuk ini - karena file baru ditambahkan ke copy pekerjaan, Anda harus secara khusus menambahkan file baru atau mereka tidak akan disertakan. Kedua, jika Anda harus menjalankan ini lagi, Anda perlu menambahkan kembali semua file "abaikan-komit" Anda lagi. Tidak ideal - Anda dapat mulai memelihara daftar 'abaikan' Anda sendiri dalam file seperti yang dilakukan orang lain.
Kemudian, untuk file yang ingin Anda kecualikan:
Karena file hanya dapat berada dalam satu daftar perubahan, menjalankan penambahan ini setelah penambahan "work" Anda sebelumnya akan menghapus file yang ingin Anda abaikan dari daftar perubahan "work" dan memasukkannya ke daftar perubahan "abaikan komitmen".
Saat Anda siap untuk mengkomit file yang dimodifikasi yang ingin Anda komit, Anda kemudian cukup menambahkan "--cl work" ke komit Anda:
Inilah contoh sederhana di komputer saya:
Alternatifnya adalah dengan menambahkan setiap file yang ingin Anda komit ke daftar perubahan 'pekerjaan', dan bahkan tidak mempertahankan daftar abaikan, tetapi ini juga banyak pekerjaan. Sungguh, satu-satunya solusi ideal yang sederhana adalah jika / ketika ini diimplementasikan dalam SVN itu sendiri. Ada masalah lama tentang ini di pelacak masalah Subversion, SVN-2858 , jika terjadi perubahan di masa depan.
sumber
$svn st --- Changelist 'ignore-on-commit': M database.php M config.php
dan masih, mereka telah dikirim ke repo on commit. Ada yang tahu apa yang saya lakukan salah?Aku sudah secara konsisten menemukan diri dalam situasi ini juga: dan daftar perubahan tidak bekerja untuk saya - saya ingin membuat daftar pendek file yang saya tidak ingin berkomitmen, daripada mempertahankan daftar besar file yang saya lakukan inginkan untuk melakukan!
Saya bekerja di command-line linux: jadi solusi saya adalah membuat skrip / usr / bin / svnn (ya, dengan dua 'n!) Sebagai berikut:
Jelas, ini disesuaikan dengan situasi saya - tetapi ubah saja DIR dan IGNORE_FILES agar sesuai dengan pengaturan dev Anda. Ingat untuk mengubah skrip menjadi executable dengan:
..kemudian Anda hanya menggunakan "svnn" alih-alih "svn" untuk menjalankan subversi tanpa takut memeriksa perubahan lokal pada file pada daftar IGNORE_FILES. Saya harap ini membantu!
sumber
svnn ignore configs/*
- dengan wildcard, dan bel dan peluit. Saya rasa saya menulis sesuatu seperti itu sendiri, dan kemudian kembali ke sini!svnn
, pertimbangkan untuk memanggilnyasvn
dan menempatkan skrip ini di sesuatu yang bisa di awal PATH Anda, seperti${HOME}/bin
. Dari skrip itu sendiri, Anda akan menelepon/usr/bin/svn
.Saya tidak percaya ada cara untuk mengabaikan file di repositori. Kami sering mengalami hal ini dengan web.config dan file konfigurasi lainnya.
Meskipun tidak sempurna, solusi yang paling sering saya lihat dan gunakan adalah memiliki file .default dan tugas yang diperlukan untuk membuat salinan lokal.
Sebagai contoh, dalam repo adalah file bernama
web.config.default
yang memiliki nilai default. Kemudian buat tugas lama yang akan mengganti nama semuaweb.config.default
fileweb.config
yang kemudian dapat disesuaikan dengan nilai-nilai lokal. Tugas ini harus dipanggil ketika copy pekerjaan baru diambil atau build dijalankan.Anda juga harus mengabaikan
web.config
file yang dibuat agar tidak dikomit ke repositori.sumber
Lihat daftar perubahan , yang dapat memberi Anda opsi untuk memfilter file yang telah Anda ubah tetapi tidak ingin melakukan. SVN tidak akan secara otomatis melewatkan file kecuali Anda menyuruhnya - dan cara Anda mengatakannya bahwa file ini berbeda dengan file lain adalah dengan meletakkannya di daftar perubahan.
Memang membutuhkan lebih banyak pekerjaan untuk Anda, dan Anda hanya dapat menerapkan daftar perubahan ke copy pekerjaan Anda (jelas, bayangkan kekacauan yang dapat terjadi jika Anda bisa menerapkan properti 'tidak pernah diperbarui' ke revisi!).
sumber
Saya datang ke utas ini mencari cara untuk membuat komit "atom" hanya dari beberapa file dan alih-alih mengabaikan beberapa file pada komit saya pergi ke arah lain dan hanya mengkomit file yang saya inginkan:
Mungkin, itu akan membantu seseorang.
sumber
svn ci
hanya alias untuksvn commit
. Komit komit memungkinkan untuk membuat komit tertentu dari file yang ditentukanKawan, saya baru menemukan solusi. Mengingat bahwa TortoiseSVN bekerja seperti yang kita inginkan, saya mencoba menginstalnya di Linux - yang berarti, berjalan di Wine. Anehnya itu bekerja! Yang harus Anda lakukan adalah:
(Alasan mengapa perlu mengecualikan file oleh CLI adalah karena entri menu untuk melakukan itu tidak ditemukan, tidak yakin mengapa. Bagaimanapun, ini bekerja dengan baik!)
sumber
File konflik tidak diizinkan untuk dikomit. Anda bisa memanfaatkan ini untuk menjaga perubahan pribadi Anda dari repositori. Ini berfungsi baik dengan sejumlah kecil file.
Untuk mendapatkan konflik
a-file
, copy pekerjaan Anda (WC) tidak memiliki pembaruana-file
dari repositori, dan bahwaa-file
di WC Anda memiliki perubahan yang berada di lokasi yang sama dengan perubahan dalam repositori (perubahan yang Anda tidak perbarui belum). Jika Anda tidak ingin menunggu kondisi di atas, Anda dapat membuat konflika-file
seperti ini:Di copy pekerjaan 1 (WC1), tambahkan baris teks ke atas
a-file
, seperti "buat konflik di sini" . Gunakan sintaks yang diperlukan agar Anda tidak merusak repositori. Berkomitmena-file
dari WC1. Di WC2, tambahkan baris teks yang berbeda ke atasa-file
, seperti "saya ingin konflik" . Perbarui dari WC2, dan sekarang file-harus dalam konflik.sumber
Saya lebih suka menulis skrip bash pembantu yang berjalan
svn commit
di semua file yang Anda butuhkan dan tidak ada yang tidak. Dengan cara ini Anda memiliki lebih banyak kendali.Misalnya, dengan satu baris, Anda dapat mengkomit semua file dengan ekstensi
.h
dan.cpp
yang Anda buat perubahan (dan yang tidak menyebabkan konflik):Ubah / tambahkan ekstensi ke
[h|cpp]
bagian. Tambahkan pesan log di antara tanda kutip-m ""
jika diperlukan.sumber
Beberapa ide yang diusulkan dapat diimplementasikan seperti ini:
Di Windows di PowerShell
tambahkan semua ke list.ps1 default
tambahkan ke abaikan list.ps1
Sekarang, Anda dapat alias
svn ci --changelist default
sehingga Anda tidak perlu menentukannya setiap kali. Manfaat tambahan adalah Anda dapat menyimpan daftar abaikan saat berkomitmen (jika Anda mau) di repositori.Saya melakukan ini untuk beberapa file yang terus diperbarui tetapi jarang benar-benar berubah dengan tangan. Misalnya saya menambahkan nomor revisi ke file konfigurasi saya pada placeholder tertentu sehingga file diubah pada setiap komit, namun perubahan manual jarang terjadi.
sumber
Saya bosan menunggu ini dibangun di SVN. Saya menggunakan tortoiseSVN dengan abaikan-komit, tapi itu muncul kotak dialog pengguna yang Anda tidak bisa menekan dari baris perintah, dan ketika saya menjalankan skrip build saya dan pergi dan membuat secangkir teh, saya benci ketika Saya kembali untuk mengetahui sedang menunggu input pengguna 10% dari keseluruhan.
Jadi, inilah skrip Windows PowerShell yang hanya melakukan file yang tidak ada dalam daftar perubahan:
sumber
Pembaruan skrip user88044.
Idenya adalah untuk mendorong file di daftar perubahan jangan-komit dan menjalankan skrip jahat.
Skrip mengekstrak file jangan-jangan-komit dari perintah: svn status - daftar perubahan 'jangan-jangan-komitmen'
Script ditempatkan di / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)
status svnn, svnn commit, dll ...
sumber
Anda dapat mengonfigurasi daftar perubahan "abaikan-komitmen" langsung dengan TortoiseSVN. Tidak perlu mengkonfigurasi daftar perubahan lain termasuk semua file lainnya
1) Klik "Komitmen SVN ..." (kami tidak akan melakukan, hanya cara untuk menemukan menu grafis untuk daftar perubahan) 2) Pada daftar Klik kanan pada file yang ingin Anda kecualikan. 3) Menu: pindah ke daftar perubahan> abaikan-komit
Lain kali Anda melakukan SVN Commit ... File akan muncul tidak dicentang di akhir daftar, di bawah kategori abaikan-komit.
Diuji dengan: TortoiseSVN 1.8.7, Build 25475 - 64 Bit, 2014/05/05 20:52:12, Subversion 1.8.9, -release
sumber
Ini sudah terlambat untuk permainan, tetapi saya menemukan perintah baris perintah yang paling mengagumkan untuk masalah ini. Selesai menggunakan bash. Nikmati.
Ok, jadi inilah penjelasan dari perintahnya. Beberapa hal perlu diubah berdasarkan kasus penggunaan Anda.
Saya mendapatkan daftar semua file. Mereka semua akan mulai dengan karakter status tersebut (?,!, A, dll). Masing-masing berada di jalurnya sendiri
Saya menggunakan grep untuk memfilter daftar. Ini dapat digunakan secara normal (untuk memasukkan) atau dengan flag -v (untuk mengecualikan). Dalam hal ini, ini digunakan untuk mengecualikan, dengan frasa "mengecualikan" menjadi apa yang akan dikecualikan.
Sekarang saya menghapus karakter status dan spasi putih di awal setiap baris, dan kemudian mengutip setiap baris, menggunakan sed. Beberapa nama file saya memiliki spasi di dalamnya, karenanya kutipan.
Dengan menggunakan tr, saya mengganti semua baris baru dengan spasi. Sekarang seluruh daftar file yang saya komit ada dalam satu baris.
Terakhir, saya menggunakan xargs untuk menjalankan perintah komit saya dengan pesan. Itu melakukan komit, dan menjatuhkan daftar file yang saya kutip sebagai argumen terakhir.
Hasilnya adalah semuanya pada akhirnya bekerja seperti yang saya inginkan. Aku masih agak benci karena memaksaku melompati lingkaran-lingkaran sialan ini, tetapi aku bisa hidup dengan ini. Saya kira.
sumber
Ketika saya menghadapi masalah yang sama persis, dan Google saya terus memberi saya apa-apa, saya pikir saya menemukan solusi. Inilah yang saya lakukan, sepertinya berfungsi untuk saya, tetapi karena saya terjebak dengan versi SVN lama (<1,5, karena tidak memiliki opsi --ke-lokal) dan saya bukan ahli dalam hal itu Saya tidak yakin ini solusi universal. Jika berhasil juga untuk Anda, beri tahu saya!
Saya berurusan dengan instalasi Prestashop yang saya dapatkan dari SVN, karena orang lain sudah mulai mengerjakannya. Karena pengaturan DB dilakukan untuk server lain, saya mengubahnya di beberapa file di folder / config. Karena folder ini sudah diversi, pengaturannya di svn: diabaikan tidak akan mencegah modifikasi lokal saya di dalamnya dilakukan. Inilah yang saya lakukan:
Sekarang saya bisa menjalankan svn add --force. di root repo tanpa menambahkan konfigurasi saya, bahkan jika itu tidak cocok dengan versi repo (saya kira saya harus melalui semua ini lagi jika saya memodifikasinya sekali lagi, tidak menguji). Saya dapat svn memperbarui juga tanpa file saya ditimpa atau mendapatkan kesalahan.
sumber
Solusi yang tidak mengabaikan perubahan dalam properti direktori
Saya mencoba menggunakan solusi berdasarkan
changelist
, tapi saya punya beberapa masalah dengannya. Pertama, repositori saya memiliki ribuan file, sehingga daftar perubahan yang harus dikomit sangat besar, dansvn status
output saya menjadi terlalu lama dan perlu diurai agar bermanfaat. Yang paling penting adalah saya ingin melakukan perubahan yang berasal dari penggabungan, yang berarti mereka menyertakan perubahan properti. Ketika melakukan daftar perubahan, properti svn yang dilampirkan pada direktori tidak dikomit, jadi saya harus melakukan commit ekstra:Anda mungkin harus melakukan itu untuk beberapa direktori (di sini saya mencatat properti dari
DIR
dan dari direktori saat ini.
), pada dasarnya yang denganM
di kolom kedua ketika mengeluarkansvn status
perintah.Larutan
Saya menggunakan patch dan
svn patch
. Dalam pseudo-code:Seperti poster lain, saya akhirnya menggunakan skrip untuk mempertahankan daftar file yang diabaikan:
Saya biasanya menggunakannya dengan
ci
danrevert -R .
.sumber
svn:ignore
adalah jawaban andaContoh:
sumber
itu
*.xml
adalah pola file untuk diabaikan; Anda dapat menggunakan nama direktori di sini juga.sumber