Subversion'daki dosyaları nasıl yok sayabilirim?


645

Subversion'daki dosyaları nasıl yok sayabilirim?

Ayrıca, sürüm kontrolü altında olmayan dosyaları nasıl bulurum?


Her bir basit sorunun (muhtemelen bir git kullanıcısından) nasıl çok fazla karmaşık cevap anlamına geldiğini görmek eğlencelidir. Bu olursa, bu Subversion bebeğim.
Valerio Bozz

Yanıtlar:


738

(Bu yanıt SVN 1.8 ve 1.9'un davranışına uyacak şekilde güncellendi)

2 sorunuz var:

Dosyaları yok sayıldı olarak işaretleme:

"Yoksayılan dosya" derken, dosya "sürüm değiştirilmemiş" olarak bile listelerde görünmez: SVN istemciniz dosya dosya sisteminde hiç yokmuş gibi davranacaktır.

Yok sayılan dosyalar bir "dosya deseni" ile belirtilir. Dosya kalıplarının sözdizimi ve biçimi SVN'nin çevrimiçi belgelerinde açıklanmıştır: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Alt sürümdeki Dosya Örnekleri".

Subversion, sürüm 1.8 (Haziran 2013) ve sonrası itibariyle, dosya desenlerini belirtmenin 3 farklı yolunu desteklemektedir. İşte örneklerle bir özet:

1 - Çalışma Zamanı Yapılandırma Alanı - global-ignoresseçenek:

  • Bu yalnızca istemci tarafı bir ayardır, bu nedenle listeniz global-ignoresdiğer kullanıcılar tarafından paylaşılmaz ve bilgisayarınıza çıkış yaptığınız tüm depolar için geçerlidir.
  • Bu ayar, Çalışma Zamanı Yapılandırma Alanı dosyanızda tanımlanır:
    • Windows (dosya tabanlı) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • Pencereler (kayıt bazlı) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignoreshem de HKLMve HKCU.
    • Linux / Unix - ~/.subversion/config

2 - svn:ignoreDizinlerde ayarlanan özellik (dosyalar değil):

  • Bu depoda saklanır, böylece diğer kullanıcılar aynı yoksayma dosyalarına sahip olur. Nasıl .gitignoreçalıştığına benzer .
  • svn:ignoredizinlere uygulanır ve özyinelemesiz veya kalıtsaldır. Üst dizinin Dosya Kalıbı ile eşleşen herhangi bir dosya veya hemen alt dizini hariç tutulur.
  • SVN 1.8 "miras alınan mülkler" kavramını eklerken, svn:ignoremülkün kendisi derhal olmayan alt dizinlerde yok sayılır:

    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
    

    (Bu nedenle, ./subdirectory/ignoreThis" ignoreThis.txt" .repo köküne uygulanmış olsa bile dosya yok sayılmaz ).

  • Bu nedenle, yoksayma listesini tekrar tekrar uygulamak için kullanmalısınız svn propset svn:ignore <filePattern> . --recursive.

    • Bu, her alt dizinde özelliğin bir kopyasını oluşturur.
    • Eğer <filePattern>değer bir çocuğun dizinde farklıdır sonra çocuğun değeri tamamen anne geçersiz kılar böylece hayır "katkı maddesi" etkisi yoktur.
    • Değiştirmek Yani <filePattern>kök ., o zaman bunu değiştirmeniz gerekir --recursiveçocuk ve torun dizinleri üzerine yazmak.
  • Komut satırı sözdiziminin karşı sezgisel olduğunu unutmayın.

    • SVN'deki bir dosyayı yazarak yok sayacağınızı varsayarak başladım svn ignore pathToFileToIgnore.txt, ancak SVN'nin yoksayma özelliği bu şekilde çalışmıyor.

3- svn:global-ignoresMülkiyet. SVN 1.8 (Haziran 2013) gerektirir:

  • svn:ignoreSVN 1.8'in "miras alınan özellikler" özelliğini kullanması dışında buna benzer .
  • Buna kıyasla svn:ignore, dosya kalıbı her alt dizine otomatik olarak uygulanır (sadece hemen çocuklar değil).
    • Bu , devralınan yoksay dosya desenleri devralındıkça otomatik olarak uygulandığından svn:global-ignores, --recursivebayrakla ayarlanmanın gereksiz olduğu anlamına gelir .
  • Önceki örnekteki komut kümesinin aynısını çalıştırma, svn:global-ignoresbunun yerine şunu kullanma:

    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!
    

TortoiseSVN kullanıcıları için:

Tüm bu düzenleme benim için kafa karıştırıcıydı, çünkü TortoiseSVN'nin terminolojisi (Windows Gezgini menü sisteminde kullanıldığı gibi) başlangıçta bana yanıltıcıydı - Yoksay menüsünün "Yinelemeli ekle", "Ekle *" ve "Ekle" nin ne anlama geldiğinden emin değildim seçenekler. Umarım bu yazı Yoksay özelliğinin SVN Özellikleri özelliğine nasıl bağlandığını açıklar. Bununla birlikte, yok sayılan dosyaları ayarlamak için komut satırını kullanmanızı öneririm, böylece GUI kullanmak yerine nasıl çalıştığına dair bir fikir edinebilirsiniz ve komut satırıyla rahat olduktan sonra özellikleri değiştirmek için yalnızca GUI'yi kullanabilirsiniz.

Yok sayılan dosyaları listeleme:

Komut svn status, yok sayılan dosyaları (yani, RGA global-ignoresdeseniyle eşleşen veya hemen üst yönetici svn:ignoredizisi deseniyle eşleşen veya herhangi bir ata dizinin svn:global-ignoresdeseniyle eşleşen dosyalar) gizler .

--no-ignoreListelenen dosyaları görmek için seçeneği kullanın . Yok sayılan dosyaların durumu vardır I, daha sonra çıktıyı grepyalnızca "I" ile başlayan satırları gösterecek şekilde bağlayın.

Komut:

svn status --no-ignore | grep "^I"

Örneğin:

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

ta-da!


6
Yok sayılan dosyaları bulmak için: svn status -u -v --no-ignore | grep "^ I" | awk "{print \ $ 2}"
Christian Madsen

3
./FolderA/FolderB/FileToIgnore dosyasını yoksaymak istiyorsanız, bunu kendi hesabınızdan yapın. klasör: svn propset svn: yoksay "FileToIgnore" FolderA / FolderB /
jnj

8
ssh'ing kullanıyorsanız svn propedit svn:ignore .ve herhangi bir metin düzenleyicisi yapılandırılmamışsa, svn: E205007: SVN_EDITOR, VISUAL veya EDITOR ortam değişkenlerinden hiçbiri ayarlanmadı ve 'editor-cmd' çalışma zamanı yapılandırma seçeneği belirlenmediğini belirten bir hata iletisi alırsınız. bir editör açmak yerine bulundu . Dolayısıyla, sadece belirtmek --editor-cmd nano böylesvn propedit svn:ignore . --editor-cmd nano
Jonathan Morales Vélez

12
Ayrıca, "--recursive" bağımsız değişkenini kullanarak tüm alt klasörlerde belirli bir dosya adına sahip dosyaları yoksayabilirsiniz. yani svn propset svn: "* .jpg" yoksay. --recursive
Templar

2
Awk için daha basit bir alternatif grep:svn status | grep '^?'
Johnride

91

Sürüm kontrol dosyaları altında olmayan bir liste oluşturmak için aşağıdaki komutu kullanın.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

Ardından dosyayı, yalnızca yoksaymak istediğiniz dosyaları bırakacak şekilde düzenleyin . Ardından, dosyada listelenen dosyaları yok saymak için bunu kullanın:

svn propset svn:ignore -F ignoring.txt .

Satırın sonundaki noktaya dikkat edin. SVN'ye özelliğin geçerli dizinde ayarlandığını bildirir.

Dosyayı silin:

rm ignoring.txt

Sonunda,

svn ci --message "ignoring some files"

Ardından hangi dosyaların yoksayıldığını şu yollarla kontrol edebilirsiniz:

svn proplist -v

2
Güzel. Küçük bir gelişme svn status | awk "/^?/ {print \$2}" > ignoring.txt.
Dirk Eddelbuettel

4
neden dosyayı sileyim? u yeniden oluşturmak / eklemek / kaldırmak gerekiyorsa repo tutun
tgkprog

Bu çözümün, alt dizinlerdeki dosyaları yok saymayacağını unutmayın (ignoring.txt dosyasında görünüyor olsalar bile).
shaneb

Bu mevcut olanı göz ardı eder mi? Değilse, bir komutta nasıl yapılır (yani --no-yoksayır ve I'den önce gelen satırları da tutar)?
a1an

Bu, geçerli yoksaymalarınızın üzerine yazar, şunu deneyin: svn pg svn:ignore . >> ignore.txtGeçerli komutu eklemek için ilk komuttan sonra dosyaya yok sayar.
ulitosCoder

55

.gitignore gibi bir yaklaşım.

.Gitignore gibi bir dosyayı veya dizini yok sayabilirsiniz. Yoksaymak istediğiniz dizinlerin / dosyaların listesinden bir metin dosyası oluşturun ve aşağıdaki kodu çalıştırın:

svn propset svn:ignore -F ignorelist.txt .

VEYA bir metin dosyası kullanmak istemiyorsanız, bunu şu şekilde yapabilirsiniz:

svn propset svn:ignore "first
 second
 third" .

Kaynak: Karsten Blog - svn: set komut satırından birden fazla dosya için yoksay


1
Yoksayılan dosyanızı daha sonra değiştirirseniz, svn:ignorekomutu yeniden çalıştırmanız gerektiğini unutmayın (bkz. Stackoverflow.com/a/58380306/189518 )
Sensei James

50

TortoiseSVN kullanıyorsanız , bir dosyaya sağ tıklayın ve ardından yok saymak için TortoiseSVN / Ekle'yi seçin . Bu, dosyayı / joker karakteri svn:ignoreözelliğe ekler .

svn:ignoredosyaları iade ettiğinizde kontrol edilir ve eşleşen dosyalar yok sayılır. Bir Visual Studio .NET projesi için aşağıdaki yoksay listesi var:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

Bu listeyi TortoiseSVN / Properties içindeki bağlam menüsünde bulabilirsiniz .


26

Kimsenin bahsetmediği gibi ...

svn propedit svn:ignore .

Daha sonra yok sayılacak kalıpları belirtmek, düzenleyiciden çıkmak ve işiniz bittiğinde dosyanın içeriğini düzenleyin.


3
Bu cevap faydalı oldu. Benim durumumda "." göz ardı etmek istediğim dosyanın alt dizinine gidin ve sadece dosya desenini belirtin. Ayrıca, ilk kez, bunu çalıştırmak gerekiyordu (Mac'te): export SVN_EDITOR = "nano"
Elijah Lofgren

22

Java için .svnignore Örneği makalesini buldum .

Örnek: Ruby on Rails için .svnignore,

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

Ve ondan sonra:

svn propset svn:ignore -F .svnignore .

.Gitignore örnekleri. .Svnignore için kullanabilirsiniz

https://github.com/github/gitignore


1
u dediğim gibi yaptım ... ama svn durumunu çalıştırdığınızda. hala yok sayılan dosyaları "?"
Harshit Gupta

Ben hiç svn durumu ile kontrol ettim, ama svn add * ile ve svn taahhütten sonra, dosyaları görmezden gelmek taahhüt etmez.
d.danailov

zaten bir "a.txt" dosya sürümü kontrolünde ise, yoksay "svn propset svn: ignore -F .svnignore a.txt" gibi komutla yapılır? doğru mu ?
errakeshpd

.Svnignore dosyanıza "a.txt" eklerseniz, emin değilim, ancak komut düzgün olmalıdır.
d.danailov

10

Propedit kullanırken dosyanın yoksay listesinden çıkarılmasına neden olacak herhangi bir boşluk olmadığından emin olun.

Başlamak için dosyayı oluşturmak üzere linux'da tab-autocomplete kullanırsanız bunlar otomatik olarak eklenir:

svn propset svn:ignore 'file1
file2' .

6
Bu sadece bash gibi bazı mermiler için geçerlidir. Propset komutunun yeniden gönderilmesinin önceki desen kümesinin üzerine yazıldığını unutmayın.
JA Faucett

Yani dosya1 ve dosya2 ayrı satırlara olmak zorunda?
IgorGanapolsky

8

Başka bir çözüm:

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

veya satır satır

svn st | awk '/^?/{print $2}' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

Bu ne yapar:

  1. Durum dosyalarını svn'den alır
  2. Tüm dosyalar ? "svnignore.txt" dosyasına
  3. Zaten yok sayılan dosyaları alır ve "svnignore.txt" dosyasına ekler
  4. Svn'ye "svnignore.txt" içindeki dosyaları yoksaymasını söyler
  5. Dosyayı kaldırır

8

Ayrıca, Tortoise SVN kullanıyorsanız bunu yapabilirsiniz:

  1. Bağlam menüsünde "TortoiseSVN" yi, ardından "Özellikler" i seçin
  2. Görünen pencerede "Yeni" yi, ardından "Gelişmiş" i tıklayın
  3. "Mülk adı" nın karşısında görünen pencerede "svn: ignore" seçeneğini belirtin veya yazın, "Özellik değeri" nin aksine istediğiniz dosya adını veya klasör adını veya dosya maskesini yazın (benim durumumda "* / target"), "Uygula" yı tıklayın özyinelemeli mülk "
  4. Tamam. Tamam.
  5. işlemek

6
  1. cd ~ / .subversion
  2. açık yapılandırma
  3. 'global-ignores' gibi bir çizgi bul
  4. dosya türünü yoksay şu şekilde ayarlayın: global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. swp .DS_Store düğüm_modülleri çıkışı

Teşekkür ederim, cevabınız configdosyadan bahseden tek yanıttır .
Henrique de Sousa

Bu yanıt da @HenriquedeSousa stackoverflow.com/a/86052/7724'ten bahsediyor ve ayrıca dosyaları görmezden gelmenin yalnızca yerel bir istemci yolu olduğunu açıklıyor.
bzlm

5

Bkbilly'nin cevabının daha okunabilir bir versiyonu :

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

Bu ne yapar:

  1. Durum dosyalarını svn'den alır
  2. Tüm dosyalar ? "svnignore.txt" dosyasına
  3. Zaten yok sayılan dosyaları alır ve "svnignore.txt" dosyasına ekler
  4. Svn'ye "svnignore.txt" içindeki dosyaları yoksaymasını söyler
  5. Dosyayı kaldırır

Ben bkbilly'nin cevabını seviyorum, ancak bu sürüm daha okunaklı hale getirmek için her satırı kırıyor ve ilk satırda her zaman geçici dosya oluşturduğundan ve bu aynı geçici dosya her zaman yoksayma listesine girdiği için testlerimde hiçbir şey yapmayan && öğesini kaldırıyor.
LivingDust

Bir düzenleme teklifinin bu durumda daha uygun olması gerekir. Çaba için teşekkür ederiz!
Jim

Bir düzenleme önerecek kadar saygınlığım yoktu. ama iyi bir protokolü mahvetmek istemiyorum. Ne zaman yeni bir cevap yayınlamak yerine önermek ve düzenlemek daha iyi olduğu konusunda yönergeler hakkında basit bir README var mı?
LivingDust

1
Cevabınız bir buçuk yıl önce yayınlanan yanıtla tamamen aynıysa, oldukça basittir. " Ne işe yarar " açıklamasını bile kopyaladınız .
Jim

3

Ayrıca SVN'nin yapılandırma dosyasında genel bir yok sayma kalıbı ayarlayabilirsiniz.


1
Belirli bir havuz için yoksayma düzenini ayarlayabilir misiniz?
David Doria

3

svn status hangi dosyaların SVN'de olmadığını ve nelerin değiştiğini size söyleyecektir.

Bak SVN özellikleri özelliğini görmezden için.

SVN ile ilgili her şey için Kırmızı Kitabın okunması gerekmektedir.



2

Dosyaların durumunu göstermek için çalışma kopyanızdaki svn durumu komutunu kullanın; henüz sürüm denetimi altında olmayan (ve yoksayılmamış) dosyaların yanında soru işareti olacaktır.

Dosyaları görmezden gelmeyle ilgili olarak, svn: ignore özelliğini düzenlemeniz gerekiyorsa, http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore adresindeki svnbook'taki Ters Çevrilmemiş Öğeleri Yok Sayma bölümünü okuyun . html . Kitapta ayrıca svn durumunun kullanımı hakkında daha fazla bilgi verilmektedir.


2

SVN'nin ignoreTortoiseSVN'de yönetimi kolaydır. TortoiseSVN'yi açın ve dosya menüsüne sağ tıklayın, ardından yoksayılanlar listesine ekle'yi seçin.

Bu, svn:ignoreözellikteki dosyaları ekleyecektir . Dosyaları kontrol ettiğimizde, onunla eşleşen dosya svn:ignoregöz ardı edilir ve işlemez.

Visual Studio projesinde yoksaymak için aşağıdaki dosyaları ekledik:

bin obj
*.exe
*.dll
*.pdb
*.suo

Comparetrap'ın SVN'sindeki kaynak kodunu bu yöntemi başarıyla kullanarak yönetiyoruz


2

Benim için ne işe yaradı:

Subversion'daki dosyaları nasıl yok sayabilirim?
1. Dosya Gezgini'nde, SVN projesi klasör adını sağ
tıklayın 2. "SVN İşlemi ..." seçeneğini tıklayın.
3. "Bir" kesinleştirme "penceresi görünecektir. Yoksayılanlar listesine ekle'yi tıklayın 6.Klasörü / dosyayı seçin 7. "Özellik değişikliğini" SVN'ye gönderin




Ayrıca, sürüm kontrolü altında olmayan dosyaları nasıl bulurum?
Yukarıdaki 3. Adımdan sonra, "Sürüm bilgisi olmayan dosyaları göster" i tıklayın


0
  1. JetBrains Ürününü (yani Pycharm) kullandığınızı açın
  2. ardından üst araç çubuğundaki 'taahhüt' düğmesini tıklayın veya 'ctrl + k' kısayolunu kullanın screenshot_toolbar
  3. kesinleştirme arayüzünde, istenmeyen dosyalarınızı aşağıdaki gibi başka bir değişiklik listesine taşıyın. screenshot_commit_change
  4. bir dahaki sefere yalnızca varsayılan değişiklik listesini uygulayabilirsiniz.
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.