SVN checkout mengabaikan folder

Jawaban:

104

Anda tidak bisa mengabaikan folder secara langsung saat checkout, tetapi Anda bisa menggunakan checkout jarang di svn 1.5. Sebagai contoh:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

Ini akan memeriksa file dan direktori dari trunk proyek Anda ke 'my_checkout', tetapi tidak masuk kembali ke direktori tersebut. Misalnya:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

Kemudian untuk menurunkan konten 'bar':

$ cd bar && svn update --set-depth infinity
Jon Topper
sumber
Catatan: ada bug di beberapa versi 1.5 yang mencegah hal ini dengansvn: Shallowing of working copy depths is not yet supported
gcb
79

Ya, Anda dapat menggunakan SVN 1.6. Anda harus melakukan pembayaran terlebih dahulu, lalu tandai folder untuk pengecualian, lalu hapus folder yang tidak diinginkan.

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

Mulai sekarang, pembaruan apa pun pada copy pekerjaan tidak akan mengisi kembali folder dokumen.

Lihat http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ dan http://subversion.apache.org/docs/release-notes/1.6.html#sparse- direktori-pengecualian untuk lebih jelasnya.

Tom

tommy_turrell
sumber
2
Dipilih karena itu menyelamatkan saya dari keharusan untuk melakukan checkout folder besar yang tidak relevan dengan pekerjaan saya.
dohpaz42
1
Itu bagus, bersama dengan pembersihan svn ini menghemat 12 GiB.
JonnyJD
1
Bukankah ini masih memeriksa semuanya pada awalnya?
Huangism
9

Dengan versi sebelum 1.5 saya telah menemukan bahwa jika Anda hanya checkout folder paling atas dan kemudian secara selektif memperbarui, sejak saat itu pembaruan hanya mempengaruhi apa yang telah Anda periksa. Yaitu.

svn co -N foo
cd foo
svn up -N bar
svn up

Bendera -N membuat operasi menjadi non-rekursif. Di atas tidak akan memeriksa apa pun di tingkat foo, mis. mengatakan ada folder lala, svn terakhir tidak akan memeriksa folder itu, tetapi akan diperbarui bar.

Tapi di lain waktu Anda bisa svn up laladan dengan demikian, menambahkannya ke kasir.

Agaknya ini juga bekerja dengan 1.5.

mxcl
sumber
6

Ini ada di TortoiseSVN klien 1.7.1 (mungkin tersedia di beberapa versi lama juga):

  • Pembayaran SVN -> Pilih URL repositori

  • Klik "Item Checkout" (di bawah Kedalaman Checkout) dan pilih hanya folder yang diperlukan!

gammay
sumber
4

Anda dapat meletakkan folder dokumen di repositori eksternal dan kemudian menggunakan svn checkout --ignore-externals.

John Millikin
sumber
Inilah yang akhirnya kami lakukan untuk melewati beberapa komponen yang sudah dibuat sebelumnya di pekerjaan sebelumnya.
Mark Bessey
2
Saya tidak mengerti apa external repositoryartinya. Bisakah Anda menjelaskannya?
Victor
4

Ya, Subversion 1.5 memiliki fitur yang disebut pemeriksaan Sparse yang dapat melakukan hal semacam ini.

Greg Hewgill
sumber
2
Dari membaca itu, sepertinya pembayaran jarang hanya membatasi kedalaman pembayaran. Mereka tidak dapat mengabaikan satu folder tertentu.
John Millikin
Tentu, Anda mungkin harus melakukan sedikit kerja keras ekstra, seperti membatasi kedalaman folder induk dengan --depth segera, lalu periksa semua folder lain kecuali yang ingin Anda abaikan. Intinya adalah, alat tersebut ada jika Anda perlu menggunakannya.
Greg Hewgill
Saya menghargai penyebutan SparseCheckouts, dan ini menarik untuk dipastikan, tetapi tanggapan ini tidak menjawab pertanyaan awal. Tentu, saya dapat memeriksa satu file pada satu waktu, dan itu akan menghasilkan salinan lokal dari file tertentu yang saya inginkan, tapi sungguh merepotkan jika harus melakukannya satu per satu. Saya yakin penulis pertanyaan ini menanyakan tentang mengabaikan folder tertentu, bukan kedalaman folder x, dan mengizinkan komputer melakukan pekerjaan - pekerjaan yang sama yang Anda rekomendasikan dapat diselesaikan secara manual.
barrypicker
Versi 1.6+ memberikan kemampuan tambahan untuk mengabaikan folder dan lebih mengontrol secara umum apa yang harus disertakan / dikecualikan dalam copy pekerjaan (di mana v1.5 sangat terbatas dalam hal ini) svnbook.red-bean.com/en/1.7/svn. advanced.sparsedirs.html
FruitBreak
3

Saya menemukan pertanyaan ini mencari cara untuk memeriksa sumber WebKit sambil mengecualikan tes regresi. Saya berakhir dengan yang berikut:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

Perhatikan bahwa Anda dapat mengubah pengecualian sesuai keinginan Anda, tetapi. * Disarankan untuk melewati direktori kerja (yang sudah diperbarui) dan semua direktori .svn.

rgov.dll
sumber
bahasa apa ini?
Pup
ini adalah perintah shell unix (mereka juga dapat disimpan dan dijalankan sebagai file skrip)
mrlem
2

Saya baru saja menyelesaikan tugas yang sama. Idenya adalah untuk mendapatkan daftar folder / file langsung di bawah repositori mengecualikan entri yang Anda butuhkan, kemudian periksa folder yang tersisa dan perbarui file langsung jika ada. Inilah solusinya:

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

Ubah ke direktori kerja sumber. Salin perintahnya. Tempel. Ubah URL yang sesuai dan kecualikan pola. Jalankan perintahnya.

Terima kasih,

bv.
sumber
1
hai apa 6 tahun untuk pengembang? Di baris terakhir, Anda memiliki $ ubrpath. Dimana set itu?
D-Klotz
1
@ D-Klotz, terima kasih, seharusnya $ rpath, yang pada gilirannya disetel ke jalur repositori. <br/> Maaf karena terlambat satu tahun
bv.
1

Tidak, abaikan hanya untuk menambahkan file.
Anda dapat menggunakan pembayaran jarang (jika Anda menggunakan svn 1.5)

Peter Parker
sumber
1

Seperti yang telah disebutkan beberapa orang lain, Anda dapat menggunakan properti svn: externals dan kemudian opsi --ignore-externals saat Anda melakukan pembayaran. Satu hal yang perlu catatan, bagaimanapun, adalah svn bahwa: eksternal tidak tidak perlu harus merujuk ke repositori lain. Ini bisa menjadi referensi ke beberapa folder lain di repo yang sama.

Nik Reiman
sumber