Bir dosya adı için SVN havuzunda ara


84

Binlerce klasör ve alt klasör içeren kod için bir yığın depomuz var, bu depo altında dosya adı veya bir kelime ile arama yapmak istiyorum.

Root folder
    a\
    b\
    c\
    d\
    e\
    f\ab\
    f\ab\cd.txt

Cd.txt aramak istiyorum ama SVN Deposunda nerede olduğunu bilmiyorum, bunun için SVN'nin kök klasöründe cd.txt dosya adını koyacağım ve komutu çalıştıracağım bir arama yapmak istiyorum, kontrol edeceğim her klasör ve dosya ayrıntıları sonucunu gösterecektir ....

Umut gereksinimi açıktır. Lütfen bana bu konuda yardım eder misin?


Arama sunucusu tarafında girebileceğiniz bir istemci tarafı komutu olmasını umuyordum. Beraber çalıştığım bu SVN deposu korkunç yanıt sürelerine ve VPN üzerinden aktarım hızına sahip. Ne yazık ki bu mümkün görünmüyor.
Patrick M

Yanıtlar:


60

Dosya çalışma kopyanızdaysa, svn 1.5 kullanıyorsanız:

svn list --depth infinity | grep <filename>

veya svn'nin önceki bir sürümü:

find . -name <filename> -not -path '*.svn*'

Dosyayı geçmişte bulmanız gerekiyorsa (silinmiş veya taşınmış):

svn log -v | less

ve şununla arayın:

\<filename><return>

3
svn list --depth infinity iyi çalışıyor, pencerelerde elbette varsayılan olarak grep olmayacak, sadece bir metin dosyasına döktüm ve bir metin editörü ile aradım:
Mandrake

5
Windows PowerShell'de ... | select-string <filename>bunun yerine kullanabilirsiniz grep.
MarnixKlooster ReinstateMonica

2
Normal bir pencerede komut satırı ... | find "<filename>"da grep'in yerine geçecektir. NOT : Dosya
adında "işareti

7
Dosya benim çalışma kopyamdaysa, bulmak için svn'ye ihtiyacım yok. Depoda Anton ve Marios'un cevapları gibi nasıl arama yapılacağını eklemelisiniz. Belki de bu sizin için açık ama basit, eski ben için ışığı açan onların cevaplarıydı.
Lieven Keersmaekers

1
Yapabilirsiniz svn co --depth empty REPOURL RepoDir, cd RepoDirve svn list --depth infinityardından SVN sunucusundan tüm dosya yolları (Eğer milyonlarca varsa muhtemelen milyonlarca satır üreten) olsun.
Ivan Akcheurov

58

Aşağıdakiler benim için çalışıyor (svn sürüm 1.4.6)

svn list -R <URL> | grep "<file_pattern>"

6
Harika. Bu, Tortoise için çalışıyor. Windows'ta: svn list -R myurl >> results.txt
live-love

Gerçekten iyi çalışıyor. Ayrıca "-R" yi hatırlamak "--depth infinity" den çok daha kolaydır.
MPV

büyük depolar için yavaş, daha sonra aşağıdaki svn-crawler'ı kullanın.
karsten

17

Deponun kendisine erişim ile kullanın (yani svn ana bilgisayar dosya sisteminizde)

svnlook tree [path_to_repo] | grep [file_name]  

veya tüm depoları aramak için (eğer çoklu depo kurulumunuz varsa).

for i in \`ls [path_to_repos_dir]`; do echo $i; svnlook tree [path_to_repos_dir]/$i | grep -i [file_or_folder_name]; done 

--full-paths seçeneği, depodaki tam yolu dosyaya verecektir (eğer bulunursa)

misal:

for i in `ls /u01/svn-1.6.17/repos`; do echo $i; svnlook tree --full-paths /u01/svn- 1.6.17/repos/$i | grep -i somefile.txt; done

Statik kopya gerekiyorsa çıktıyı bir dosyaya yeniden yönlendirin.
nix OS kullandığını varsayar.


3
"Svnlook tree --full-paths <path_to_repo> | grep <filename>" kullanmak için +1. Bu, bir yıkım deposunda dosya araması yapmanın en hızlı yolu.
Nick Grealy 04

yıldırım hızlı arama, çok kullanışlı.
Dustin Cook

12

svn list --depth infinity <your-repo-here>Depodaki dosyaların bir listesini almak ve ardından svn catiçeriği almak için. Ayrıştırmayı biraz daha basit hale getirmek --xmliçin listkomuta anahtar ekleyebilirsiniz .


grep1 dosya görmek istiyorsanız, özellikle de OP gibi depoda binlerce dosyanız varsa kullanmayı unutmayın . Ayrıca, --incrementalçıktıyı daha sonra / önceki XML çıktısıyla birleştirmeniz gerekirse bir mod vardır .
trysis

6

Son zamanlarda , depoyu listelemek için yardımcı programımı yayınladım , bu "svn ls --depth infinity" yaklaşımından çok daha hızlı. İşte kriterler . Yalnızca Subversion dahili API'sinde bulunan, ancak artık bir komut satırı aracılığıyla erişilebilen bir işlevi çağırır.

Böylece koşabilirsin

$ svn-crawler <URL> | grep "<file_pattern>"

Güzel alet. CentOS7 ile test ettim. CMakeLists.txt'deki target_link_libraries listesine libsvn_delta ve libsvn_subr eklemem ve ayrıca LIBAPR_LIBRARY_INCLUDE'yi "include / apr-1.0" 'dan "include / apr-1" e uyarlamam gerekiyordu.
karsten

4

TortoiseSVN kullanıyorsanız, Projeye Göre Projeye bakmak istiyorsanız bunu deneyebilirsiniz - benim için çalışıyor:

  1. Depo üst düzey URL'niz altında boş bir proje oluşturun, bunu BLANK olarak adlandırın
  2. Sol bölmedeki Repo URL'sine tıklayın
  3. Sağ taraftaki bölmede, BLANK projenizi ve istediğiniz projeyi seçin - ana hat deyin
  4. Tarayıcı menüsünü açmak için sağ tıklayın ve 'URL'leri Karşılaştır'ı seçin, deponuzun boyutuna bağlı olarak yüklenmesi bir dakika sürebilir. Ancak temelde tüm proje listenizi 'aramaya hazır' bir listede alırsınız.
  5. Arama filtresine dosya adınızı veya diğer dizeyi girin


-2

Uzak deponuz çok büyük değilse, kolay bir yöntem şudur: Yerel bir depo almak için bir "ödeme" yapabilirsiniz. Windows makinesindeyseniz "Ara" veya Linux makinesi kullanıyorsanız "Bul" komutunu kullanın.

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.