SVN ödünç alma klasörü yoksay


Yanıtlar:


104

Bir ödünç verme işleminde klasörleri doğrudan göz ardı edemezsiniz, ancak svn 1.5'te seyrek teslim almayı kullanabilirsiniz. Örneğin:

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

Bu, proje gövdenizden 'my_checkout' içine dosya ve dizinleri kontrol edecek, ancak bu dizinlerde tekrarlanmayacaktır. Örneğin:

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

Ardından 'bar'ın içeriğini aşağı indirmek için:

$ cd bar && svn update --set-depth infinity

Not: Bazı 1.5 sürümlerinde bunu engelleyen bir hata vardısvn: Shallowing of working copy depths is not yet supported
gcb

79

Evet, SVN 1.6'yı kullanabilirsiniz. Önce bir ödeme yapmanız, ardından dışlama için klasörü işaretlemeniz ve ardından istenmeyen klasörü silmeniz gerekecektir.

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

Şu andan itibaren, çalışan kopyada yapılacak herhangi bir güncelleme, dokümanlar klasörünü yeniden doldurmayacaktır.

Http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ ve http://subversion.apache.org/docs/release-notes/1.6.html#sparse- sayfalarına bakın daha fazla ayrıntı için dizin dışlama .

Tom


2
İşimle ilgisi olmayan çok büyük bir klasörü kontrol etmeme gerek kalmadığı için oy verildi.
dohpaz42

1
Bu harika, svn temizleme ile birlikte bu bana 12 GiB tasarruf etti.
JonnyJD

1
Bu hala başlangıçta her şeyi kontrol etmiyor mu?
Huangism

9

1.5'ten önceki sürümlerde, yalnızca en üstteki klasörü teslim alır ve ardından seçici olarak güncellerseniz, o andan itibaren güncellemelerin yalnızca teslim aldığınız şeyi etkilediğini gördüm. Yani.

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

-N bayrağı işlemi yinelemesiz hale getirir. Yukarıdakiler, örneğin foo düzeyinde başka hiçbir şeyi kontrol etmeyecektir. bir klasör olduğunu söyleyin lala, son svn bu klasörü kontrol etmeyecek, ancak güncellenecektir bar.

Ancak daha sonra yapabilir svn up lalave böylece kasaya ekleyebilirsiniz.

Muhtemelen bu da 1.5 ile çalışır.


6

Bu, TortoiseSVN istemcisi 1.7.1'de bulunur (bazı eski sürümlerde de mevcut olabilir):

  • SVN checkout -> Depo URL'sini seçin

  • "Ödeme Öğeleri" ne tıklayın (Ödeme Derinliği altında) ve yalnızca gerekli klasörleri seçin!


4

Dokümanlar klasörünü harici bir depoya koyabilir ve ardından kullanabilirsiniz svn checkout --ignore-externals.


Bu, önceki bir işte önceden oluşturulmuş bazı bileşenleri atlamak için yaptığımız şeydi.
Mark Bessey

2
Ne anlama external repositorygeldiğini anlamıyorum . Bunu açıklayabilir misin?
Victor

4

Evet, Subversion 1.5 , tam olarak bu tür şeyleri yapabilen Seyrek teslim alma adı verilen bir özelliğe sahiptir .


2
Bunu okumaktan, seyrek kontroller yalnızca kasanın derinliğini sınırlıyor gibi görünüyor. Belirli bir klasörü görmezden gelemezler.
John Millikin

Elbette, üst klasörün derinliğini --depth ile sınırlamak gibi biraz fazladan çalışma yapmanız gerekebilir, ardından yok saymak istediğiniz klasör dışındaki diğer tüm klasörlere göz atın. Mesele şu ki, kullanmanız gerekirse araçlar orada.
Greg Hewgill

SparseCheckouts'tan bahsetmeyi takdir ediyorum ve kesinlikle ilginç, ancak bu yanıt orijinal soruyu ele almıyor. Elbette, her seferinde bir dosyayı teslim alabilirim ve bu, istediğim belirli dosyaların yerel kopyalarına sahip olmamla sonuçlanır, ancak her birini ayrı ayrı yapmak zorunda kalmak ne büyük bir acı. Bu sorunun yazarının x klasör derinliğini değil, belirli bir klasörü görmezden gelmeyi sorduğuna ve bilgisayarın işi yapmasına izin verdiğine inanıyorum - önerdiğiniz işin aynısı manuel olarak da yapılabilir.
barrypicker

1.6+ sürümler, klasörleri yok sayma ve çalışan bir kopyaya nelerin dahil edileceği
FruitBreak

3

Bu soruyu, regresyon testlerini hariç tutarken WebKit kaynaklarını kontrol etmenin bir yolunu ararken buldum. Aşağıdakilerle sonuçlandım:

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)

İstisnaları uygun gördüğünüz şekilde değiştirebileceğinizi unutmayın, ancak. * Çalışma dizinini (zaten güncel olan) ve .svn dizinlerinin tümünü atlamanız önerilir.


Bu hangi dil?
Yavru

bunlar unix kabuk komutlarıdır (ayrıca bir komut dosyası olarak kaydedilebilir ve çalıştırılabilir)
mrlem

2

Yakın zamanda aynı görevi çözdüm. Buradaki fikir, depo altındaki klasör / dosyaların listesini hemen almak, ihtiyacınız olan girişleri hariç tutmak, ardından kalan klasörleri kontrol etmek ve varsa hemen dosyaları güncellemektir. İşte çözüm:

    # 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"`

Kaynak çalışma dizinine geçin. Komutları kopyalayın. Yapıştırmak. Uygun URL'yi değiştirin ve kalıbı hariç tutun. Komutu çalıştırın.

Teşekkürler,


1
hey geliştiriciler için 6 yıl nedir? Son satırınızda $ ubrpath var. Bu set nerede?
D-Klotz

1
@ D-Klotz, teşekkür ederim, bunun yerine $ rpath olmalı, bu da depo yoluna ayarlanmış. <br/> Geç bir yıl için özür dilerim
bv.

1

Hayır, yok saymak yalnızca dosya eklemek içindir.
Seyrek kontrolleri kullanabilirsiniz (svn 1.5 kullanıyorsanız)


1

Diğer birkaç kişinin de bahsettiği gibi, sadece svn: externals özelliklerini ve ardından ödeme yaparken --ignore-externals seçeneğini kullanabilirsiniz. Nota bir şey, ancak, o svn geçerli: externals yok değil mutlaka başka depo başvurmak gerekir. Aynı depodaki başka bir klasöre referans olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.