SVN: Bazı dizinleri yinelemeli olarak yoksay


106

Ben herhangi bir dizin adında istemiyoruz buildya distolursa olsun, ne kadar derin ağacında benim SVN girmek.

Mümkün mü? Gitte sadece koydum

build
dist

benim .gitignorekökümde ve yinelemeli olarak görmezden geliyor. Bunu svn ile nasıl yaparım? Lütfen bana her ebeveyn dizisinde bir propset yapmamı söyleme ...


Subversion 1.8 kullanıyorsanız yerel bir çözüm için bu yanıtı kontrol edin .
Frank Kusters

Yanıtlar:


57

Subversion 1.8'den itibaren, artık svn:global-ignoresbenzer svn:ignoreancak yinelemeli olarak çalışan özellik var (bu yüzden bunu en üst düzey dizininizde ayarlayın)


3
Ben biraz karıştı - orada global-ignoresiçinde ~/.subversion/configdosyanın, aynı zamanda kalıtımsal svn:global-ignores bir SVN repo bir dizin özellik kümesi, hem de svn:ignore- sen karşılaştırmak nasıl bu farklı seçeneklerin bir özetini ve ki? --recursiveBayrak onları da nasıl etkiliyor?
Dai

2
Kendi araştırmamı yaptım ve bu KG cevabındaki bulgularımı yayınladım: stackoverflow.com/a/86052/159145
Dai,

[Denedim ama başarısız oldum, objklasör hala görünüyor] ( stackoverflow.com/questions/50960188/… ), bir bakmama yardım edebilir misin?
Luke

"Build / *" diyebilir miyim, her derleme klasöründe aşağıdaki her şeyi yok sayabilir miyim?
Johannes Schaub -

45

svn propset--recursivebir seçenek olarak alır , böylece iki dezavantajı ile bunu yapabilirsiniz:

  1. tüm depoyu (veya en azından içindeki tüm dizinleri) kontrol etmeniz gerekir ve
  2. svn:ignoreher yeni dizin eklediğinizde özelliği ayarlamayı unutmamalısınız

42

Bunu yapmak mümkün değil. Subversion'da svn:ignore(yinelemeli olmayan) ve global-ignores(bir arşive özel olmayan ) yalnızca iki görmezden gelme mekanizması vardır .


7
svn propset --recursive svn: svn_ignore_rules'i yoksay. burada svn_ignore_rules, yok sayma kurallarını içeren bir dosyadır - satır başına bir tane
georg

3
'svn propset --recursive svn: yoksay --file svn_ignore_rules.' benim için svn-1.7.6 ile, yoksa 'svn_ignore_rules' adlı dosyaları yinelemeli olarak görmezden geliyorsunuz [düzenleme: aşağıdaki yorumda 'wytten' uyarınca]
elbeardmorez

9
Yorum yapanlara: Soruyu soranın dediği gibi, "Lütfen bana her ebeveyn için bir propset yapmamı söylemeyin ...".
Kevin Reid

5
Artık Subversion 1.8
Squirrel

17

Bu benim için çalışıyor:

 svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips>

2
Bunun için teşekkürler, harika çalışıyor ... Bu arada, hem * .txt hem de * .pdf'i görmezden gelmenin tek yolu, bu kalıpları bir dosyaya koymak ve ardından 'svn propset --file' seçeneğini kullanmaktı
wytten

13

~ / .subversion / config veya / etc / subversion / config dosyanıza ekleyin:

[miscellany]
global-ignores = build dist

Mümkünse bunu repo başına yapmayı tercih ederim
Paul Tarjan

1
Bunu repo başına yapmanın kolay bir yolu olup olmadığından emin değilim, bir ön taahhüt kancası belirli kalıpları reddedebilir, ancak bu tam bir çözüm değildir. svn: her ebeveyn dizinin çalışmasını yok sayın, ancak yinelemeli olarak değil. farklı depolarda çalışırken yapılandırma dosyanızı bir komut dosyasıyla değiştirebilirsiniz, ancak bu fazladan bir adımdır.
jspcal

1
Aslen kars ne anlama geliyor?
IgorGanapolsky

9

Dizinleri sürüm kontrolünden kaldırarak build ve dist dizinlerini yok saymak mümkündür. İşin püf noktası --keep-local seçeneğini kullanarak dizini çalışan kopyada bırakmaktır. Örneğin:

svn rm dist --keep-local
svn ci -m'removed build directory from version control'

Dizin artık alt sürüm tarafından izlenmeyecek, ancak derleyici çıktısını vb. Tutmak için çalışma kopyanızda hala orada olacaktır.

şerefe, joe


7

Örneğin klasör yapısı:

Project/
Project/dist/

cd Project
svn propset svn:ignore '*' dist/
svn ci -m "content of dist ignored"

Yoksay komutundan önce dist içeriği svn silmek iyidir, bu nedenle dallar için dist boş olacaktır.

Benim için çalıştı, bugün test edildi. İşte bunu biraz açıklayan sayfa


6

Tüm depolarda bu tür dosyaların tümünü yok saymak global-ignoresiçin, kullanıcı başına yapılandırma dosyanıza bir ekleyebilirsiniz .

Unix benzeri sistemlerde bu alan, kullanıcının ev dizininde .subversion adlı bir dizin olarak görünür. Win32 sistemlerinde, Subversion, genellikle kullanıcının profil dizininin Uygulama Verileri alanında Subversion adlı bir klasör oluşturur.

Yapılandırma Seçeneklerine Bakın

Ne yazık ki, bunu yapmak için depo başına bir seçenek yoktur. Temelde kullanıcı başına veya dizin başına, bu nedenle çoklu svn:ignores, olabildiğince sinir bozucu, muhtemelen gitmenin yoludur.


1
Mümkünse bunu repo başına yapmayı tercih ederim
Paul Tarjan

Oh, o zaman şanssızsın. @Kevin Reid'in dediği gibi - dizin başına veya kullanıcı başına var.
Blair Conrad

6

Öncelikle, çalışma kopyanızın en üst klasörüne gitmeniz ve orada bir dosya oluşturmanız gerekir (örneğin .svnignore), burada göz ardı edilmesini istediğiniz tüm kalıpları yerleştirmeniz gerekir, örneğin (bir Android projesi için):

bin
gen
proguard
.classpath
.project
local.properties
Thumbs.db
*.apk
*.ap_
*.class
*.dex

Ardından aşağıdaki komutu çalıştırırsınız (çalışan kopyanızın en üst klasöründe olmanız gerektiğini unutmayın):

svn propset svn:ignore -R -F .svnignore .

Bu, yalnızca henüz sürüm kontrolü altında olmayan klasörler ve dosyalar için çalışacaktır. Sürümü değiştirilen bir klasörün (veya dosyanın) da yok sayılmaya başlamasını istiyorsanız, şu komutu çalıştırarak onu sürüm kontrolünden kaldırın:

svn rm --keep-local <path>

Bunların hepsini, her şeyi açıklayan bu harika makaleden aldım: http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/


Bu son derece yardımcı oldu. Svn'de git benzeri görmezden gelme davranışı elde etmenin en iyi yolu bu. Çok teşekkürler.
Jonathan Wilson

6

Alt sürüm 1.8'de, mevcut depo için genel yok saymak mümkündür.

svn propset svn:global-ignores build .
svn propset svn:global-ignores dist .

Ayrıca .svnignore adlı bir klasör oluşturabilir ve koşulları yazabilirsiniz.

build
dist

satır başına bir koşulu hatırlayın, build / * veya dist / debug ayarlamak boşuna. Ardından şu komutu verin:

svn propset svn:global-ignores -F .svnignore .

kusursuz çalışıyor! ilk komutu yeni teslim alınmış depoda çalıştırın.
Gaurav

3

Bir dosya oluşturun ve göz ardı ettiklerinizi ona ekleyin

ingore-list:

file1 
directory1
file2
etc...

sonra aşağıdaki komutu uygulayın

for n in directory; do svn propset svn:ignore -F ignore-list $n; done

dizin dizininizin adıdır, dizini / alt dizini alt kategorilere ayırabilirsiniz. Veya altında bulunduğunuz geçerli dizini not etmek için * kullanın.

Bu, kabuğunuz olarak bash kullandığınızı varsayar


Buradaki $ n nedir ?
IgorGanapolsky

1
@igor Ganapolsky - $ n, for döngüsünün değişkenidir. Döngüye girdiğiniz dizinin dizini olarak ayarlanacaktır; bu durumda yukarıdaki örnekte "dizin" ile belirtildiği gibi dizin.
jncc99

3
svn propset --recursive svn:ignore svn_ignore_rules .

svn_ignore_rules, yok sayma kurallarını içeren bir dosyadır - satır başına bir

Elbette deponuza her yeni dizin eklediğinizde yeniden çalıştırmanız gerekir.

svn_ignore_rules, depoya yazma erişimi olan diğer kullanıcılar tarafından yeniden kullanılabilir olması için depoda kontrol edilmiş olarak kabul edilebilir.


2
cd parent_dir # özyinelemeli olarak yok sayılacak klasörü içeren dizin
svn propedit svn: görmezden gelin. # svn-prop.tmp'yi açacak
klasörleri listele
^ X
Y
commit -m 'hedeflenen direcoty'yi yok say'

bana yardım etti, klasör kalıbını ayarlamada sorun yaşadım, SVN bu klasörü set EDITOR=notepadsvn propedit svn:ignore .
depoda

1

Muhtemelen bu yaygın soruna bir çözüm yok gibi göründüğünden, çözümümüzü paylaşmak istiyorum. Diğerlerinin daha önce açıkça belirttiği gibi, svn:ignoreözelliği ya kullanabilirsiniz , bu tek bir dizin için geçerlidir (ve bu nedenle yeniler için geçerli değildir) ya da global-ignorestek bir kullanıcı için geçerli olanı (ancak arşive ait olmayan) kullanabilirsiniz.

Hayatı biraz daha kolaylaştırmak için adlı bir reg dosyası oluşturdum Settings.Svn.regve bunu havuzun köküne ekledim. Artık herkes bu kayıt dosyasını bir kez çift tıklayabilir ve ayarları yaptırabilir.

REGEDIT4

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany]
"global-ignores"="obj *.suo *.bak *.pdb *.user *.Cache*"

SVN deposundaki bir çözümü gerçekten çok beğenirim, bu yüzden birisi bilirse, paylaşmak ister miydiniz?


0

Bunun bir yolu, önceden veya son teslim kancasına bir tür kontrol eklemek olabilir, ancak repo sunucusuna sahip değilseniz, bu basit bir nottur.

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.