SVN ile bir dizini nasıl yok sayabilirim?


760

SVN kullanmaya yeni başladım ve kaynak kontrolü altında ihtiyacım olmayan bir önbellek dizinim var. SVN ile tüm dizini / klasörü nasıl yoksayabilirim?

OS X ve komut satırında Sürümler ve TextMate kullanıyorum .


3
Benzer soru burada cevaplandı [SVN checkout klasörü yoksay] [1] [1]: stackoverflow.com/questions/192824/svn-checkout-ignore-folder
mloskot

Olası yinelenen Subversion dosyaları görmezden nasıl? (Çoğaltmanın hangi yöne gittiğini pek umursamıyorum; hiçbir cevap seti açıkça diğerinden daha iyi değil.)
Jeffrey Bosboom

Yanıtlar:


796

svn:ignoreÜst dizinin özelliğini ayarlayın :

svn propset svn:ignore dirname .

Yok sayılacak birden çok şeyiniz varsa, özellik değerinde yeni satırlarla ayırın. Bu durumda, harici bir düzenleyici kullanarak özellik değerini düzenlemek daha kolaydır:

svn propedit svn:ignore .

2
@Kouber: Sorununuz, kabuk genişletmesinin svn: ignore özelliklerini bilmemesi. Bu nedenle '*' parametresini explicityl olarak kullanmak tmp komutunu command komutuna geçirir. 'Svn commit -m "Daha fazla aksan" gibi bir şey deneyin.
MarkusSchaber

4
Cevap için teşekkürler. Editör olarak Pico: svn propedit svn: ignore. --editor-cmd pico
hade

157
Not: Dizin zaten "in" svn ise bu çalışmaz. svn rm --keep-local dirnameilk. (Svn stat
çıkışım

10
Birden fazla dosya / klasörü yoksaymak istiyorsanız, tüm adlarını bir txt dosyasına, her biri bir satır olacak şekilde ekleyin ve aşağıdaki varyantı kullanın:svn propset svn:ignore -F file.txt .
petervaz

2
Benim yaptığım gibi svn:ignoredeğil, ayarladığına dikkat et svn::ignore. Rasgele özellikler ayarlayabilirsiniz, böylece sonuncusu TAMAM olarak ayarlanır ve özelliği görebilir ve düzenleyebilirsiniz, ancak SVN listelediğiniz dosyaları yoksaymaz.
Richard Turner

406

Örnek bir dizin yapısı:

\project
    \source
    \cache
    \other

İçinde bulunduğunuzda projectönbellek dizininizin eklenmediğini ve böyle göründüğünü görürsünüz.

> svn st
M  source
?  cache

İgnore özelliğini ayarlamak için

svn propset svn: önbelleği yoksay.

burada svn:ignoreayarladığınız mülkün adı, mülkün cachedeğeri ve .bu mülkü ayarladığınız dizindir. Özelliğe cacheihtiyaç duyan dizinin üst dizini olmalıdır .

Hangi özelliklerin ayarlandığını kontrol etmek için:

> svn proplist
Properties on '.':
  svn:ignore

Değerini görmek için svn:ignore:

> svn propget svn:ignore
cache

Önceden ayarlanmış özellikleri silmek için:

svn propdel svn:ignore

17
Burada tökezlediğim zor bir nokta. Emin do olun değil sonuna bir eğik çizgi ekleyin dirname. Örneğin, yazarken svn propset svn:ignore dirname, (bash) kabuğunun sizin için dirname doldurmasına izin verirseniz, o sondaki eğik çizgiyi ekler ve sizi komutla bırakır svn propset svn:ignore dirname/ve bu da klasörün yok sayılmasına neden olmaz. En azından benim deneyimimdi.
David Weinraub

4
'Cache' dizini hala 'svn st'de listelenir. Görünümden kaldırmanın bir yolu var mı? (diskten silmeden)
Tom Brito

131

Bahsetmek önemli:

Komut satırında kullanamazsınız

svn add *

Bu, yok sayılan dosyaları da ekleyecektir, çünkü komut satırı genişler *ve bu nedenle svn addtüm dosyaların eklenmesini istediğinize inanır. Bu nedenle bunun yerine şunu kullanın:

svn add --force .

aynen @binco'nun söylediği gibi yapın: svn add --force *ÇALIŞMAYIN. Yıldızı değil, noktayı kullanın.
manuell

80

Bu işe almak için çalışırken bir süre harcadığım için, dosyalar zaten SVN'de varsa, svn deleteonlara ihtiyacınız ve svn:ignoreözelliği düzenlemek gerekir .

Bunun açık göründüğünü biliyorum, ancak ?listemde olduğu gibi görünmeye devam svn statusettiler, sadece yerel olarak görmezden geleceğini düşündüğümde.


8
Dosyaları yalnızca yoksaymak ve gerçekten silmek istemiyorsanız dosyaları silerken --keep-local seçeneğini kullanmayı unutmayın.
Dylan Holmes

71

Hafifçe genişletmek için bunu svn komut satırı aracıyla yapıyorsanız, şunu yazmak istersiniz:

svn propedit svn:ignore path/to/dir

seçtiğiniz metin düzenleyicinizi açacak, ardından içindeki her şeyi yoksaymak için '*' yazıp kaydet + quit - bu dizinin kendisini svn'de içerecek, ancak içindeki tüm dosyaları yok sayacak, dizini yok saymak için üst yolunu tıklatın ve dosyaya dizinin adını yazın. Kaydettikten sonra bir güncelleme çalıştırın ('svn up') ve ardından uygun yolu kontrol edin.


8
Çok iyi bir nokta, teşekkür ederim. Tüm diğer cevaplar iç içe geçmiş dizinleri kaçırdı. Böylece yukarıdaki örnek (çalışıyor) sonra editör ignored_directory (yol / to / dir yolunun bir düzey altında olduğu varsayılır) yazarsınız. Bu işe yaramaz: svn propedit svn: ignore. ve ardından editörde / to / dir / ignored_directory yolunu yazın. IOW: SVN, nesneleri her seferinde bir seviye aşağıya eşleştirir.
greenoldman

30

svn:ignoreÖzelliği üst dizinde ayarlayın :

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

Bu, öğesinin şu anki değerinin üzerine yazılır svn:ignore. Değeri şu şekilde düzenlersiniz:

$ svn pe svn:ignore .

Hangi editörünüzü açar. Her satıra bir tane olmak üzere birden çok desen ekleyebilirsiniz.

Geçerli değeri şununla görüntüleyebilirsiniz:

$ svn pg svn:ignore .

Bir GUI kullanıyorsanız, bunu yapmak için bir menü seçeneği olmalıdır.


3
svn ps svn:ignore . 'cachedir'ile sonuçlanır cachedir is not under version control. svn ps svn:ignore 'cachedir' .benim için çalıştı
DiCaprio

21

Yukarıdaki tüm katkılar için teşekkürler. Dosyaları görmezden gelirken deneyimlerimden bazı ek bilgileri paylaşmak istiyorum.


Klasörler zaten revizyon kontrolü altında olduğunda

Svn alma ve sonra svn co biz genellikle ilk kez ne dosyalar,.

Tüm çalışma zamanı önbelleği, ek klasörleri sürüm kontrolü altında olacaktır. yani önce svn ps svn: yoksaymadan , onu depodan silmemiz gerekir.

Yukarıdaki SVN sürüm 1.5 ile svn del --keep-local your_folder , ancak önceki bir sürüm için benim çözümüm:

  1. svn klasörlerinizin temiz bir kopyasını dışa aktarın (.svn gizli klasör )
  2. svn del yerel ve depo,
  3. svn ci
  4. Klasörleri geri kopyalayın
  5. Do svn st ve klasörlerin '?' Olarak işaretlendiğini onaylıyor ?
  6. Şimdi çözümlere göre svn ps yapabiliriz

Yok sayılmak için birden fazla klasöre ihtiyacımız olduğunda

  • Bir dizinde şu şekilde ayarlanması gereken iki klasör var: svn:ignore
  • Birini ayarlarsak, diğeri kaldırılır.
  • Sonra svn pe'ye ihtiyacımız olduğunu merak ediyoruz

svn pemetin dosyasını düzenlemeniz gerekir ve vi kullanarak metin düzenleyicinizi ayarlamak için gerekirse bu komutu kullanabilirsiniz :

export SVN_EDITOR=vi
  1. "O" ile yeni bir satır açabilirsiniz
  2. Yoksaymak istediğiniz tüm klasör adlarını yazın
  3. Düzenleme modundan çıkmak için 'esc' tuşuna basın
  4. ": Wq" yazıp Enterkaydetmek ve çıkmak için tuşuna basın

Dosya basitçe şöyle görünür:

runtime
cache
attachments
assets

svn propset svn:ignore -F .ignorethesefiles .dosyanın içeriğini kullanacak şekilde de kullanabilirsiniz . Etrafta saklamayı seviyorum, böylece neyin ihmal edildiğini biliyorsun. Düzenlemeler için takip desteği gerekir.
Gerard ONeill

20

Önce kaldırın ...

Dizininiz foozaten sürüm kontrolü altındaysa, önce dizini kaldırın:

svn rm --keep-local foo

... sonra görmezden gelin:

svn propset svn:ignore foo .

12

... ve birden fazla dizini (diyelim build/ temp/ve *.tmpdosyalar) yok saymak isterseniz , iki adımda (ilk ilki yok sayılır ve yoksayma özelliklerini düzenler (burada diğer yanıtlara bakınız)) ya da biri gibi bir şey yazabilirsiniz

svn propset svn:ignore "build
temp
*.tmp" .

komut satırında.



9

Birden çok girişi yok sayma komutu biraz zor ve ters eğik çizgi gerektirir.

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

Bu komut adındaki bir şey yok sayacaktır cache, tmp, nullve and_so_ongeçerli dizinde.


6
Ve sadece açıklığa kavuşturmak için: Buradaki ters eğik çizgi svn'nin bir özelliği değildir; bu, kabuğa çok satırlı bir dize girmenin bir yoludur. Ayrıca bir düzenleyici kullanabilir ve birden çok satır yazabilirsiniz.
sleske

Bash için ters eğik çizgi gerekmez. bash bir "açık olduğunu ve satır işlemek değil bilmek yeterince akıllı. Yapmanız gereken tek şey önbellek, tmp ve null sonra enter tuşuna basmak olduğunu göreceksiniz. Bir alternatif komutu yazmaya başlamaktır (svn), sonra esc tuşuna basın, sonra v. editörde komutu girmenize izin verir.Komutu yürütmek için bittiğinde ZZ tuşuna basın. ve idam etmek istemiyorum, o zaman: q !.
Michael Potter

1
svn propset svn:ignore -F .ignorethesefiles .bir dosya kullanmanıza izin verir. Ve belirtildiği gibi, her zaman propaganda yaptınız.
Gerard ONeill

5

Yuvalanmış dizinleri göz ardı etmekte sorun yaşadım; yoksaymak istediğim üst dizin 'svn status' ile gösterilmezdi, ancak tüm alt dizinler bunu gösterdi. Bu muhtemelen herkese açıktır, ancak paylaşacağımı düşündüm:

MİSAL:

/ gövde

/ Gövde / önbellek

/ Gövde / cache / subdir1

/ Gövde / cache / subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

4

"Teşekkür ederim" tür iğrenç, sahte ve dosyaları görmezden gelmenin zor yolu için svn.

Bu yüzden bir komut dosyası yazdım svn-ignore-all :

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Ayrıca, belirli dosya / yol adları listesini yok saymak için bu svn-ignore değişkenini kullanabiliriz . Sanırım svn-ignore-all gerçekten xargs svn-ignore gibi olmalı.

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Bir şey daha var: Ben svn check-out'larımı birçok rastgele dosya ile kirletme eğilimindeyim. İşlem yapma zamanı geldiğinde, bu dosyaları 'eski' bir alt dizine taşıyorum ve svn'ye 'eski' yoksaymasını söylüyorum.


Hey Sam, bu güzel bir senaryo. Kafamda soru ortaya çıktı: Belki de sorun, deponun bir parçası olan bir klasörün tamamını görmezden gelmenin işe yaramamasından kaynaklanıyor olabilir mi? yoksayma listesine eklediğimiz klasörlerde temelde değiştirilmiş dosyalar olan dosyalar? Her zaman çalıştırmak için sıkıcı olacağından, betiğinizin etrafında bir yol olup olmadığını merak ediyorum. Yapıyor musun?
SquareCat

hayır, gerçekten kullanmıyorum! dosyalarımı temizlemeye çalışın
Sam Watkins

4

Birden fazla yoksayma için basma oneliner:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

3

Proje dizininiz / Project olarak adlandırılmışsa ve önbellek dizininiz / Project / Cache olarak adlandırılmışsa, / Project üzerinde bir subversion özelliği ayarlamanız gerekir. Özellik adı "svn: ignore" ve özellik değeri "Cache" olmalıdır.

Özellikler hakkında daha fazla bilgi için Subversion kılavuzundaki bu sayfaya bakın .


3

Jason'ın cevabı hile yapacak. Ancak, svn: yerine "." önbellek dizininde, önbellek dizininin her zaman mevcut olmaması durumunda üst yöneticinin svn: ignore özelliğine "önbellek" eklemek isteyebilirsiniz . Bunu bir dizi "takas" klasöründe yapıyorum.


3

SVN'İN OLACAĞI DİREKTÖRLERİ TUTMAK İÇİN:

  1. bu, dosyaları depodan siler, ancak dizini SVN denetimi altında tutar:

svn delete --keep-local path / directory_to_keep / *

  1. ardından dizini (ve tüm içeriği) göz ardı edecek şekilde ayarlayın:

svn propset svn: "*" yolunu yoksay / directory_to_keep


2

TortoiseSVN gibi SVN için bir ön uç veya bir çeşit IDE entegrasyonu kullanıyorsanız, aynı menüde taahhüt / ekleme işlemi gibi bir yoksayma seçeneği de olmalıdır.


1

Svn: ignore özelliğini ayarlayın . Çoğu UI svn aracının, bunun yanı sıra bağlantıdaki komut satırı tartışmasının bir yolu vardır.


1

Sürümler kullandığınız için bu gerçekten çok kolay:

  • Teslim alınmış kopyanıza göz atın
  • Yoksaymak için dizini tıklayın
  • Sağ taraftaki "Yoksayılan kutusunda Düzenle'yi tıklayın
  • Tüm dosyaları yoksaymak için *. * Yazın (veya yalnızca jpg dosyaları için * .jpg vb.)

1

Sondaki eğik çizgileri de izleyin. images/*Yoksayma ayar dosyasına dahil etmenin görmezden geldiğini buldum ./images/. Koştuğumda svn status -uhala gösterdi ? images. Bu yüzden yoksayma ayarını sadece imageseğik çizgi olarak değiştirdim. Bir durum kontrolü yaptım ve temizlendi.


1

Eclipse ile Çözüldü sonraki şekilde :

Her şeyden önce, klasörünüzü projeyle senkronize edin:

ekibi -> senkronize et

Sonraki görünümde, ekip görünümünde, SVN sunucusuna taahhüt edebileceğiniz tüm kaynakları görebilirsiniz.

Bu nedenle, yoksaymak istediğiniz kaynağın kaynak klasörünü seçin ve ardından kullanarak yok sayabilirsiniz.

ekibi -> ekle svn:ignore.

Bundan sonra, onay penceresinde ilk seçeneği belirleyin: "ada göre yoksay".

Örneğin, hedef klasörü ve .class kaynaklarını yok saymak istersem senkronize edeceğim ve senkronizasyon görünümünde hedef klasörü seçeceğim. Bundan sonra, seçeceğim

ekibi-> eklenti

için svn:ignoreve sonra onaylama penceresinde ilk seçeneği onaylamak edeceğiz.


0

Bu basit aktivitenin nasıl yapılacağını araştırmak için çok zaman kaybettikten sonra, iyi bir açıklama bulmak zor olmadığına karar verdim.

İlk önce örnek yapıyı bırakın

$ svn st? proje / gövde / hedef? / Gövde / myfile.x proje

1 - önce düzenleyiciyi yapılandır, mycase vim dışa aktarma SVN_EDITOR = vim

2 - “svn propedit svn: ignore project / trunk /” yeni bir dosya açacak ve dosyalarınızı ve alt dizininizi bize ekleyebilirsiniz.

$ svn st? / Gövde / myfile.x proje

Teşekkürler.

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.