Sangat menyenangkan melihat bagaimana setiap pertanyaan sederhana (mungkin dari pengguna git) berarti banyak jawaban yang terlalu rumit. Jika ini terjadi, itu bayi Subversion.
Valerio Bozz
Jawaban:
738
(Jawaban ini telah diperbarui agar sesuai dengan perilaku SVN 1.8 dan 1.9)
Anda memiliki 2 pertanyaan:
Menandai file sebagai diabaikan:
Dengan "file yang diabaikan" Maksudku file tidak akan muncul dalam daftar bahkan sebagai "tidak berversi": klien SVN Anda akan berpura-pura file tidak ada sama sekali dalam sistem file.
Subversion, pada versi 1.8 (Juni 2013) dan yang lebih baru, mendukung 3 cara menentukan pola file. Berikut ringkasan dengan contoh:
1 - Area Konfigurasi Runtime - global-ignoresopsi:
Ini hanya pengaturan sisi klien , jadi global-ignoresdaftar Anda tidak akan dibagikan oleh pengguna lain, dan itu berlaku untuk semua repo yang Anda checkout ke komputer Anda.
Pengaturan ini didefinisikan dalam file Area Konfigurasi Runtime Anda:
Windows (berbasis file) - C:\Users\{you}\AppData\Roaming\Subversion\config
Windows (berbasis registri) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignoresbaik dalam HKLMdan HKCU.
Linux / Unix - ~/.subversion/config
2 - svn:ignoreProperti, yang ditetapkan pada direktori (bukan file):
Ini disimpan dalam repo, sehingga pengguna lain akan memiliki file abaikan yang sama. Mirip dengan cara .gitignorekerjanya.
svn:ignorediterapkan ke direktori dan tidak rekursif atau diwariskan. File atau subdirektori langsung dari direktori induk yang cocok dengan Pola File akan dikecualikan.
Sementara SVN 1.8 menambahkan konsep "properti yang diwarisi", svn:ignoreproperti itu sendiri diabaikan dalam direktori turunan tidak langsung:
cd ~/myRepoRoot # Open an existing repo.
echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt".
svn status # Check to see if the file is ignored or not.
> ? ./ignoreThis.txt
> 1 unversioned file # ...it is NOT currently ignored.
svn propset svn:ignore "ignoreThis.txt" . # Apply the svn:ignore property to the "myRepoRoot" directory.
svn status
> 0 unversioned files # ...but now the file is ignored!
cd subdirectory # now open a subdirectory.
echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt".
svn status
> ? ./subdirectory/ignoreThis.txt # ...and is is NOT ignored!
> 1 unversioned file
(Jadi file ./subdirectory/ignoreThistidak diabaikan, meskipun " ignoreThis.txt" diterapkan pada .akar repo).
Karena itu, untuk menerapkan daftar abaikan secara rekursif Anda harus menggunakan svn propset svn:ignore <filePattern> . --recursive.
Ini akan membuat salinan properti di setiap subdirektori.
Jika <filePattern>nilainya berbeda dalam direktori anak, maka nilai anak itu sepenuhnya mengesampingkan orang tua, sehingga tidak ada efek "tambahan".
Jadi jika Anda mengubah <filePattern>pada root ., maka Anda harus mengubahnya dengan --recursivemenimpanya pada anak dan direktori turunan.
Saya perhatikan bahwa sintaks baris perintah bersifat kontra-intuitif.
Saya mulai dengan asumsi bahwa Anda akan mengabaikan file di SVN dengan mengetikkan sesuatu seperti svn ignore pathToFileToIgnore.txtnamun ini bukan cara kerja fitur diabaikan SVN.
Ini mirip dengan svn:ignore, kecuali ia menggunakan fitur "properti yang diwarisi" SVN 1.8.
Bandingkan dengan svn:ignore, pola file secara otomatis diterapkan di setiap direktori turunan (bukan hanya anak-anak langsung).
Ini berarti bahwa tidak perlu diatur svn:global-ignoresdengan --recursiveflag, karena pola pengabaian yang diwarisi secara otomatis diterapkan saat mereka diwarisi.
Menjalankan set perintah yang sama seperti pada contoh sebelumnya, tetapi menggunakan svn:global-ignoressebagai gantinya:
cd ~/myRepoRoot # Open an existing repo
echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt"
svn status # Check to see if the file is ignored or not
> ? ./ignoreThis.txt
> 1 unversioned file # ...it is NOT currently ignored
svn propset svn:global-ignores "ignoreThis.txt" .
svn status
> 0 unversioned files # ...but now the file is ignored!
cd subdirectory # now open a subdirectory
echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt"
svn status
> 0 unversioned files # the file is ignored here too!
Untuk pengguna TortoiseSVN:
Keseluruhan pengaturan ini membingungkan bagi saya, karena terminologi TortoiseSVN (seperti yang digunakan dalam sistem menu Windows Explorer mereka) pada awalnya menyesatkan bagi saya - saya tidak yakin apa pentingnya menu Abaikan "Tambah secara rekursif", "Tambah *" dan "Tambah" pilihan. Saya harap posting ini menjelaskan bagaimana fitur Abaikan terkait dengan fitur Properti SVN. Yang mengatakan, saya sarankan menggunakan command-line untuk mengatur file yang diabaikan sehingga Anda bisa merasakan bagaimana cara kerjanya daripada menggunakan GUI, dan hanya menggunakan GUI untuk memanipulasi properti setelah Anda merasa nyaman dengan command-line.
Mendaftar file yang diabaikan:
Perintah svn statusakan menyembunyikan file yang diabaikan (yaitu, file yang cocok dengan global-ignorespola RGA , atau cocok dengan svn:ignorepola direktori induk langsung atau cocok dengan pola direktori ancesor apa pun) svn:global-ignores.
Gunakan --no-ignoreopsi untuk melihat file-file tersebut terdaftar. File yang diabaikan memiliki status I, kemudian menyalurkan output grepke hanya menampilkan baris yang dimulai dengan "I".
Perintahnya adalah:
svn status --no-ignore | grep "^I"
Sebagai contoh:
svn status
> ? foo # An unversioned file
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore
> ? foo # An unversioned file
> I ignoreThis.txt # A file matching an svn:ignore pattern
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore | grep "^I"
> I ignoreThis.txt # A file matching an svn:ignore pattern
Untuk menemukan file yang diabaikan: svn status -u -v --no-ign | grep "^ I" | awk "{print \ $ 2}"
Christian Madsen
3
jika Anda ingin mengabaikan file ./FolderA/FolderB/FileToIgnore, lakukan ini dari file Anda. folder: svn propset svn: abaikan "FileToIgnore" FolderA / FolderB /
jnj
8
jika Anda melakukan ssh'ing svn propedit svn:ignore .dan tidak ada editor teks yang dikonfigurasi, Anda akan mendapatkan pesan kesalahan yang mengatakan svn: E205007: Tidak ada variabel lingkungan SVN_EDITOR, VISUAL atau EDITOR yang ditetapkan, dan tidak ada opsi konfigurasi run-time 'editor-cmd' yang dijalankan ditemukan alih-alih membuat editor dibuka. Jadi tentukan saja --editor-cmd nano seperti inisvn propedit svn:ignore . --editor-cmd nano
Jonathan Morales Vélez
12
Anda juga dapat mengabaikan file dengan nama file tertentu di semua subfolder menggunakan argumen "- rekursif". yaitu svn propset svn: abaikan "* .jpg". --recursive
Templar
2
Alternatif sederhana untuk awk adalah grep:svn status | grep '^?'
Johnride
91
Gunakan perintah berikut untuk membuat daftar bukan di bawah file kontrol versi.
Kemudian edit file untuk meninggalkan hanya file yang sebenarnya ingin Anda abaikan . Kemudian gunakan yang ini untuk mengabaikan file yang tercantum dalam file:
svn propset svn:ignore -F ignoring.txt .
Perhatikan titik di akhir baris. Ini memberi tahu SVN bahwa properti sedang diset pada direktori saat ini.
Hapus file:
rm ignoring.txt
Akhirnya berkomitmen,
svn ci --message "ignoring some files"
Anda kemudian dapat memeriksa file mana yang diabaikan melalui:
Bagus. Perbaikan kecil adalah svn status | awk "/^?/ {print \$2}" > ignoring.txt.
Dirk Eddelbuettel
4
mengapa menghapus file? simpan dalam repo jika Anda perlu membuat kembali / menambah / menghapus
tgkprog
Catatan solusi ini tidak akan mengabaikan file dalam subdirektori (bahkan jika mereka muncul di ignoring.txt).
shaneb
Apakah itu akan tetap mengabaikan yang ada? Jika tidak, bagaimana melakukannya dalam satu perintah (yaitu --tidak mengabaikan dan menjaga juga garis yang didahului oleh I)?
a1an
Ini akan menimpa pengabaian Anda saat ini, coba: svn pg svn:ignore . >> ignore.txtsetelah perintah pertama untuk menambahkan pengabaian saat ini ke file.
ulitosCoder
55
.gitignore menyukai pendekatan
Anda dapat mengabaikan file atau direktori seperti .gitignore. Cukup buat file teks dari daftar direktori / file yang ingin Anda abaikan dan jalankan kode di bawah ini:
svn propset svn:ignore -F ignorelist.txt .
ATAU jika Anda tidak ingin menggunakan file teks, Anda dapat melakukannya seperti ini:
Perhatikan bahwa jika Anda kemudian memodifikasi file abaikan Anda, Anda perlu menjalankan kembali svn:ignoreperintahnya (lihat stackoverflow.com/a/58380306/189518 )
Sensei James
50
Jika Anda menggunakan TortoiseSVN , klik kanan pada file lalu pilih TortoiseSVN / Tambah untuk mengabaikan daftar . Ini akan menambahkan file / wildcard ke svn:ignoreproperti.
svn:ignoreakan diperiksa ketika Anda memeriksa file, dan file yang cocok akan diabaikan. Saya memiliki daftar abaikan berikut untuk proyek Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Anda dapat menemukan daftar ini di menu konteks di TortoiseSVN / Properties .
Jawaban ini bermanfaat. Dalam kasus saya, saya perlu mengubah "." ke sub-direktori file yang ingin saya abaikan dan hanya menentukan pola file. Juga, pertama kali, saya perlu menjalankan ini (saya di Mac): export SVN_EDITOR = "nano"
saya melakukan seperti yang Anda katakan ... tetapi ketika saya menjalankan status svn. masih menunjukkan file yang diabaikan dengan "?"
Harshit Gupta
Saya tidak pernah memeriksa dengan status svn, tetapi dengan svn add * dan setelah itu svn melakukan, mengabaikan file tidak dilakukan.
d.danailov
jika file "a.txt" sudah ada dalam kontrol versi, maka abaikan dilakukan dengan perintah seperti "svn propset svn: abaikan -F .svnignore a.txt"? Apakah itu benar ?
errakeshpd
Jika Anda menambahkan "a.txt" di file .svnignore Anda, saya tidak yakin, tetapi perintah harus benar.
d.danailov
10
Saat menggunakan propedit pastikan tidak memiliki spasi tambahan karena itu akan menyebabkan file dikeluarkan dari daftar abaikan.
Ini dimasukkan secara otomatis jika Anda telah menggunakan tab-autocomplete di linux untuk membuat file sebagai permulaan:
Juga, jika Anda menggunakan Tortoise SVN Anda dapat melakukan ini:
Dalam menu konteks pilih "TortoiseSVN", lalu "Properties"
Di jendela yang muncul klik "Baru", lalu "Lanjutan"
Di jendela yang muncul berlawanan dengan "Nama properti" pilih atau ketik "svn: abaikan", berlawanan dengan "Nilai properti" ketik nama file atau nama folder atau topeng file yang diinginkan (dalam kasus saya itu adalah "* / target"), klik "Terapkan properti secara rekursif "
Terima kasih, jawaban Anda adalah satu-satunya yang menyebutkan configfile.
Henrique de Sousa
Jawaban ini menyebutkannya juga @HenriquedeSousa stackoverflow.com/a/86052/7724 dan juga menjelaskan bahwa ini adalah cara khusus klien untuk mengabaikan file.
Saya suka jawaban bkbilly, tetapi versi ini memecah setiap baris untuk membuatnya lebih mudah dibaca, dan menghapus && yang dalam pengujian saya tidak melakukan apa-apa, karena baris pertama selalu membuat file sementara, dan file sementara yang sama ini selalu masuk ke daftar abaikan.
LivingDust
Proposisi edit akan lebih sesuai dalam kasus ini. Hargai upaya!
Jim
Saya belum memiliki reputasi yang cukup untuk menyarankan suntingan. tapi saya tidak ingin merusak protokol yang bagus. Apakah ada README sederhana pada pedoman untuk kapan sebaiknya menyarankan dan mengedit daripada mengirim jawaban baru dll?
LivingDust
1
Jika jawaban Anda persis sama dengan jawaban yang diposting satu setengah tahun yang lalu, itu cukup mudah. Anda bahkan menyalin penjelasan " Apa fungsinya ".
Jim
3
Anda juga dapat mengatur pola abaikan global dalam file konfigurasi SVN.
Gunakan status perintah svn pada copy pekerjaan Anda untuk menunjukkan status file, file yang belum di bawah kontrol versi (dan tidak diabaikan) akan memiliki tanda tanya di sebelahnya.
SVN ignoremudah dikelola di TortoiseSVN. Buka TortoiseSVN dan klik kanan pada menu file kemudian pilih Tambahkan ke daftar abaikan.
Ini akan menambahkan file di svn:ignoreproperti. Ketika kami memeriksa file maka file yang cocok dengan svn:ignoreitu akan diabaikan dan tidak akan dilakukan.
Dalam proyek Visual Studio kami telah menambahkan file berikut untuk diabaikan:
bin obj
*.exe
*.dll
*.pdb
*.suo
Kami mengelola kode sumber pada SVN dari Comparetrap menggunakan metode ini dengan sukses
Bagaimana cara saya mengabaikan file di Subversion?
1. Dalam File Explorer, klik kanan pada folder-nama proyek SVN
2. Klik pada "SVN Commit ..."
3.A "komit" akan muncul jendela
4. Klik kanan pada folder / file yang ingin Anda abaikan
5.Klik pada Tambah untuk mengabaikan daftar
6.Pilih folder / file
7.Komit "perubahan properti" ke SVN
Juga, bagaimana cara menemukan file yang tidak di bawah kontrol versi?
Setelah Langkah 3 di atas, klik "Tampilkan file tidak berversi"
Jawaban:
(Jawaban ini telah diperbarui agar sesuai dengan perilaku SVN 1.8 dan 1.9)
Anda memiliki 2 pertanyaan:
Menandai file sebagai diabaikan:
Dengan "file yang diabaikan" Maksudku file tidak akan muncul dalam daftar bahkan sebagai "tidak berversi": klien SVN Anda akan berpura-pura file tidak ada sama sekali dalam sistem file.
File yang diabaikan ditentukan oleh "pola file". Sintaks dan format pola file dijelaskan dalam dokumentasi online SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Pola File dalam Subversi".
Subversion, pada versi 1.8 (Juni 2013) dan yang lebih baru, mendukung 3 cara menentukan pola file. Berikut ringkasan dengan contoh:
1 - Area Konfigurasi Runtime -
global-ignores
opsi:global-ignores
daftar Anda tidak akan dibagikan oleh pengguna lain, dan itu berlaku untuk semua repo yang Anda checkout ke komputer Anda.C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
baik dalamHKLM
danHKCU
.~/.subversion/config
2 -
svn:ignore
Properti, yang ditetapkan pada direktori (bukan file):.gitignore
kerjanya.svn:ignore
diterapkan ke direktori dan tidak rekursif atau diwariskan. File atau subdirektori langsung dari direktori induk yang cocok dengan Pola File akan dikecualikan.Sementara SVN 1.8 menambahkan konsep "properti yang diwarisi",
svn:ignore
properti itu sendiri diabaikan dalam direktori turunan tidak langsung:(Jadi file
./subdirectory/ignoreThis
tidak diabaikan, meskipun "ignoreThis.txt
" diterapkan pada.
akar repo).Karena itu, untuk menerapkan daftar abaikan secara rekursif Anda harus menggunakan
svn propset svn:ignore <filePattern> . --recursive
.<filePattern>
nilainya berbeda dalam direktori anak, maka nilai anak itu sepenuhnya mengesampingkan orang tua, sehingga tidak ada efek "tambahan".<filePattern>
pada root.
, maka Anda harus mengubahnya dengan--recursive
menimpanya pada anak dan direktori turunan.Saya perhatikan bahwa sintaks baris perintah bersifat kontra-intuitif.
svn ignore pathToFileToIgnore.txt
namun ini bukan cara kerja fitur diabaikan SVN.3-
svn:global-ignores
Properti. Membutuhkan SVN 1.8 (Juni 2013):svn:ignore
, kecuali ia menggunakan fitur "properti yang diwarisi" SVN 1.8.svn:ignore
, pola file secara otomatis diterapkan di setiap direktori turunan (bukan hanya anak-anak langsung).svn:global-ignores
dengan--recursive
flag, karena pola pengabaian yang diwarisi secara otomatis diterapkan saat mereka diwarisi.Menjalankan set perintah yang sama seperti pada contoh sebelumnya, tetapi menggunakan
svn:global-ignores
sebagai gantinya:Untuk pengguna TortoiseSVN:
Keseluruhan pengaturan ini membingungkan bagi saya, karena terminologi TortoiseSVN (seperti yang digunakan dalam sistem menu Windows Explorer mereka) pada awalnya menyesatkan bagi saya - saya tidak yakin apa pentingnya menu Abaikan "Tambah secara rekursif", "Tambah *" dan "Tambah" pilihan. Saya harap posting ini menjelaskan bagaimana fitur Abaikan terkait dengan fitur Properti SVN. Yang mengatakan, saya sarankan menggunakan command-line untuk mengatur file yang diabaikan sehingga Anda bisa merasakan bagaimana cara kerjanya daripada menggunakan GUI, dan hanya menggunakan GUI untuk memanipulasi properti setelah Anda merasa nyaman dengan command-line.
Mendaftar file yang diabaikan:
Perintah
svn status
akan menyembunyikan file yang diabaikan (yaitu, file yang cocok denganglobal-ignores
pola RGA , atau cocok dengansvn:ignore
pola direktori induk langsung atau cocok dengan pola direktori ancesor apa pun)svn:global-ignores
.Gunakan
--no-ignore
opsi untuk melihat file-file tersebut terdaftar. File yang diabaikan memiliki statusI
, kemudian menyalurkan outputgrep
ke hanya menampilkan baris yang dimulai dengan "I".Perintahnya adalah:
Sebagai contoh:
ta-da!
sumber
svn propedit svn:ignore .
dan tidak ada editor teks yang dikonfigurasi, Anda akan mendapatkan pesan kesalahan yang mengatakan svn: E205007: Tidak ada variabel lingkungan SVN_EDITOR, VISUAL atau EDITOR yang ditetapkan, dan tidak ada opsi konfigurasi run-time 'editor-cmd' yang dijalankan ditemukan alih-alih membuat editor dibuka. Jadi tentukan saja --editor-cmd nano seperti inisvn propedit svn:ignore . --editor-cmd nano
svn status | grep '^?'
Gunakan perintah berikut untuk membuat daftar bukan di bawah file kontrol versi.
Kemudian edit file untuk meninggalkan hanya file yang sebenarnya ingin Anda abaikan . Kemudian gunakan yang ini untuk mengabaikan file yang tercantum dalam file:
Perhatikan titik di akhir baris. Ini memberi tahu SVN bahwa properti sedang diset pada direktori saat ini.
Hapus file:
Akhirnya berkomitmen,
Anda kemudian dapat memeriksa file mana yang diabaikan melalui:
sumber
svn status | awk "/^?/ {print \$2}" > ignoring.txt
.svn pg svn:ignore . >> ignore.txt
setelah perintah pertama untuk menambahkan pengabaian saat ini ke file..gitignore menyukai pendekatan
Anda dapat mengabaikan file atau direktori seperti .gitignore. Cukup buat file teks dari daftar direktori / file yang ingin Anda abaikan dan jalankan kode di bawah ini:
ATAU jika Anda tidak ingin menggunakan file teks, Anda dapat melakukannya seperti ini:
Sumber: Blog Karsten - Set svn: abaikan untuk banyak file dari baris perintah
sumber
svn:ignore
perintahnya (lihat stackoverflow.com/a/58380306/189518 )Jika Anda menggunakan TortoiseSVN , klik kanan pada file lalu pilih TortoiseSVN / Tambah untuk mengabaikan daftar . Ini akan menambahkan file / wildcard ke
svn:ignore
properti.svn:ignore
akan diperiksa ketika Anda memeriksa file, dan file yang cocok akan diabaikan. Saya memiliki daftar abaikan berikut untuk proyek Visual Studio .NET:Anda dapat menemukan daftar ini di menu konteks di TortoiseSVN / Properties .
sumber
Seperti tak seorang pun tampaknya telah menyebutkannya ...
Kemudian edit konten file untuk menentukan pola untuk diabaikan, keluar dari editor dan Anda sudah selesai.
sumber
Saya menemukan artikel .svnignore Contoh untuk Java .
Contoh: .svnignore untuk Ruby on Rails,
Dan setelah itu:
Contoh untuk .gitignore. Anda dapat menggunakan untuk .svnignore Anda
https://github.com/github/gitignore
sumber
Saat menggunakan propedit pastikan tidak memiliki spasi tambahan karena itu akan menyebabkan file dikeluarkan dari daftar abaikan.
Ini dimasukkan secara otomatis jika Anda telah menggunakan tab-autocomplete di linux untuk membuat file sebagai permulaan:
sumber
Solusi lain adalah:
atau baris demi baris
Apa fungsinya:
sumber
Juga, jika Anda menggunakan Tortoise SVN Anda dapat melakukan ini:
sumber
sumber
config
file.Jawaban bkbilly versi yang lebih mudah dibaca :
Apa fungsinya:
sumber
Anda juga dapat mengatur pola abaikan global dalam file konfigurasi SVN.
sumber
svn status
akan memberi tahu Anda file mana yang tidak ada di SVN, dan juga apa yang berubah.Lihatlah properti SVN untuk properti abaikan.
Untuk semua hal SVN, Buku Merah wajib dibaca.
sumber
Menambahkan direktori ke subversi, dan mengabaikan isi direktori
atau
sumber
Gunakan status perintah svn pada copy pekerjaan Anda untuk menunjukkan status file, file yang belum di bawah kontrol versi (dan tidak diabaikan) akan memiliki tanda tanya di sebelahnya.
Sedangkan untuk mengabaikan file Anda perlu mengedit properti svn: ign, baca bab Mengabaikan Item Tidak Berversi di svnbook di http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore. html . Buku ini juga menjelaskan lebih lanjut tentang penggunaan status svn.
sumber
SVN
ignore
mudah dikelola di TortoiseSVN. Buka TortoiseSVN dan klik kanan pada menu file kemudian pilih Tambahkan ke daftar abaikan.Ini akan menambahkan file di
svn:ignore
properti. Ketika kami memeriksa file maka file yang cocok dengansvn:ignore
itu akan diabaikan dan tidak akan dilakukan.Dalam proyek Visual Studio kami telah menambahkan file berikut untuk diabaikan:
Kami mengelola kode sumber pada SVN dari Comparetrap menggunakan metode ini dengan sukses
sumber
Apa yang berhasil untuk saya:
Bagaimana cara saya mengabaikan file di Subversion?
1. Dalam File Explorer, klik kanan pada folder-nama proyek SVN
2. Klik pada "SVN Commit ..."
3.A "komit" akan muncul jendela
4. Klik kanan pada folder / file yang ingin Anda abaikan
5.Klik pada Tambah untuk mengabaikan daftar
6.Pilih folder / file
7.Komit "perubahan properti" ke SVN
Juga, bagaimana cara menemukan file yang tidak di bawah kontrol versi?
Setelah Langkah 3 di atas, klik "Tampilkan file tidak berversi"
sumber
sumber