SVN Mengkomit file tertentu

219

Apakah ada cara untuk melakukan hanya daftar file tertentu (mis. Hanya salah satu dari daftar file yang ingin dilakukan SVN).

Saya sedang mengerjakan MAC OS X di bawah Terminal, tanpa UI apa pun.

0100110010101
sumber

Jawaban:

331

Tentu. Cukup daftarkan file:

$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png

Saya tidak mengetahui cara mengatakannya untuk mengabaikan sekumpulan file tertentu. Tentu saja, jika file yang ingin Anda komit mudah terdaftar oleh shell, Anda dapat menggunakannya:

$ svn ci -m "No longer sets printer on fire" printer-driver/*.c

Anda juga dapat meminta perintah svn membaca daftar file yang akan dikomit dari file:

$ svn ci -m "Now works" --targets fix4711.txt
beristirahat
sumber
1
jadi, pada dasarnya, saya harus memberi nama file secara eksplisit? saya tidak bisa mengatakan jangan menyentuh file khusus ini?
0100110010101
16
Anda bisa melakukannya: svn st | potong -c 9-> target.txt, lalu edit file target.txt untuk menghapus file tertentu dan gunakan parameter --targets untuk menentukan daftar file.
instal
17
Saya pikir tantangan baru saya adalah membuat bug yang membuat printer terbakar.
James Webster
3
Menyedihkan dan konyol. Tidak ada area pementasan. svn adddigunakan untuk menambahkan file ke repositori.
Kandinski
68

Gunakan daftar perubahan. Keuntungan daripada menentukan file adalah bahwa Anda dapat memvisualisasikan dan mengonfirmasi semua yang Anda inginkan sebenarnya sudah termasuk sebelum Anda melakukan.

$ svn changelist fix-issue-237 foo.c 
Path 'foo.c' is now a member of changelist 'fix-issue-237'.

Setelah selesai, svn sekarang memisahkan Anda. Ini membantu saat Anda menyulap banyak perubahan

$ svn status
A       bar.c
A       baz.c

--- Changelist 'fix-issue-237':
A       foo.c

Akhirnya, katakan padanya untuk melakukan apa yang ingin Anda ubah.

$ svn commit --changelist fix-issue-237 -m "Issue 237"
jcwenger
sumber
+1 untuk jawaban langsung. Daftar perubahan benar-benar cara untuk pergi!
Miro Markaravanes
1
Jika Anda ingin menambahkan direktori baru ke daftar perubahan, jangan lupa untuk menggunakan svn add terlebih dahulu, kemudian gunakansvn changelist fix-issue-237 --recursive path/to/directory
Fabian Schmengler
Sebenarnya daftar perubahan tidak dapat digunakan dengan direktori baru .... "Subversi saat ini tidak mendukung penggunaan daftar perubahan dengan direktori."
Fabian Schmengler
1
@fschmengler: SVN adalah alat yang mengerikan. Saya hanya berusaha melakukan yang terbaik dari pekerjaan buruk yang dilakukannya. Beralih ke git. : P
jcwenger
10
Saya beralih ke Git bertahun-tahun yang lalu dan tidak pernah melihat ke belakang. Terpaksa menggunakan svn lagi untuk klien, rasanya seperti berlari dengan bola dan rantai di kedua kaki
Fabian Schmengler
38

Anda pada dasarnya meletakkan file yang ingin Anda komit di baris perintah

svn ci file1 file2 dir1/file3
Wienczny
sumber
1
jadi, pada dasarnya, saya harus memberi nama file secara eksplisit? saya tidak bisa mengatakan jangan menyentuh file khusus ini?
0100110010101
2
jika dijalankan tanpa argumen svn melakukan semua file yang diubah jika dijalankan dengan file sebagai argumen file ini dilakukan jika dijalankan dengan direktori semua file yang diubah dalam direktori dilakukan
Wienczny
22

Karena keadaan subversi saya, saya harus menjadi kreatif. svn stditampilkan M, Adan ~status. Saya hanya ingin Mdan A...

svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt

Perintah ini mengatakan temukan semua baris keluaran dengan svn styang dimulai dengan Matau A, potong menggunakan pembatas ruang, kemudian dapatkan kolom 8 sampai akhir. Buang ke dalam target.txt dan timpa.

Kemudian modifikasi target.txt untuk memangkas daftar file lebih lanjut. Kemudian jalankan di bawah ini untuk melakukan:

svn ci -m "My commit message" --targets targets.txt

Mungkin bukan kasus penggunaan yang paling umum, tetapi mudah-mudahan ini membantu seseorang.

Eric
sumber
2
Anda juga dapat menggunakan grep -v '^~'untuk daftar hitam apa yang Anda inginkan.
Martin Konecny
10

Selain mendaftarkan file secara eksplisit seperti yang ditunjukkan oleh melepas dan Wienczny , Anda dapat mengatur daftar perubahan dan checkin ini. Ini memungkinkan Anda untuk mengelola set perubahan yang terpisah untuk copy pekerjaan yang sama.

Anda dapat membacanya di versi online dari buku SVN yang luar biasa .

sbi
sumber
7

coba skrip ini ..

#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`; 
     do LIST="${LIST} $f $NULL on"; 
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
Abhijit Dhariya
sumber
1

Saya membuat (sub) folder bernama "sembunyikan", memindahkan file yang tidak ingin saya komit di sana. Kemudian lakukan komit saya, mengabaikan keluhan tentang file yang hilang. Kemudian pindahkan file tersembunyi dari sembunyikan kembali ke ./

Saya tahu tidak ada kerugian dari taktik ini.

George Wyche
sumber