2009-04-01 24 views
76

Kod için binlerce klasör ve alt klasör içeren bir toplu depo var, bu repositor altında dosya adıyla veya bir kelime ile arama yapmak istiyorum.Bir dosya adı için SVN deposunda arama

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

Ben cd.txt aramak istiyorum ama bunun için ben dosya adı cd.txt koyacağız SVN kök klasöründe bir arama gerçekleştirmek istediğiniz, SVN depodaki nerede bilmiyorum ve komutu çalıştırın, her klasörde kontrol edecek ve dosya detayları sonucunu görüntüleyecektir ....

Umut gerekliliği açıktır. Bu konuda bana yardımcı olabilir misiniz? Repo'da dosyaların bir listesini almak için

+0

[Duping geçmişi arama] (http://stackoverflow.com/questions/44176/searching-subversion-history-full-text) – bahrep

+2

Çoğaltma olduğunu sanmıyorum. Bu tarihi araştırmakla ilgili. Bu bir dosya aramakla ilgili. –

+0

Arama sunucusu tarafını gerçekleştirecek girebileceğiniz bir istemci tarafı komutu olduğunu umuyordum. Çalıştığım bu SVN repo, VPN üzerinden korkunç yanıt süreleri ve aktarım hızına sahip. Ne yazık ki, bu mümkün görünmüyor. –

cevap

12

svn cat. Ayrıştırma işlemini biraz daha basit yapmak için list komutuna --xml anahtarını ekleyebilirsiniz.

+0

1 dosya görmek istiyorsanız, özellikle dosyada OP gibi binlerce dosya varsa, 'grep' kullanmayı unutmayın. Ayrıca, daha sonra/daha önceki XML çıkışı ile çıktıya katılmanız gerekiyorsa, bir '--incremental' modu vardır. – trysis

54

dosya o zaman svn 1.5 kullanıyorsanız, sizin çalışma kopyasında ise:

svn list --depth infinity | grep <filename> 

veya svn önceki bir sürümünü:

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

Eğer dosyayı bulmak gerekiyorsa geçmiş (silinmiş veya taşınmış):

svn log -v | less 

ile arayın:

\<filename><return> 
+3

svn listesi - sonsuzluk iyi çalışır, pencerelerde tabii ki varsayılan olarak grep olmaz, ben sadece bir metin dosyasına döktüm ve bir metin editörü ile arandı: – Mandrake

+4

Windows PowerShell içinde kullanabilirsiniz ... | grep' yerine 'dizesini seçin. –

+2

Düzenli bir windows komut satırında '... | "" ifadesini bul, grep'in yerini alacak. ** NOT **: "dosya adının etrafında gerekli. – Raystorm

52

benim için şu işler(svn sürüm 1.4.6)

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

Harika. Bu Kaplumbağa için çalışır. Pencerelerde: svn listesi -R myurl >> results.txt –

+0

Gerçekten iyi çalışır. Sadece hatırlamak daha kolay "- R "daha fazla" - "sonsuza kadar" "svnlook ağacı - tam yollarını kullanmak için – MPV

4

Eğer TortoiseSVN'ye kullanıyorsanız, Project tarafından Project bakmak için istekli EĞER bu deneyebilirsiniz - benim için çalışıyor:

  1. sağ tavasına üzerinde sol bölmede
  2. tarihinde Repo URL üzerinde bOŞ
  3. tıklayın diyoruz, sizin depo üst düzey URL altında boş bir proje oluşturun e BLANK projenizi ve istediğiniz projeyi seçin - yani
  4. Tarayıcı menüsünü açmak için sağ tuşla tıklayın ve repo dosyanızın boyutuna bağlı olarak 'URL'leri Karşılaştır' seçeneğini seçin, yüklenmesi bir dakika sürebilir. Ancak temel olarak tüm proje listenizi 'aramaya hazır' listesinde bulabilirsiniz.
  5. arama filtresi Son zamanlarda yayınlanan ettik
5

da dosya adını veya diğer dizeyi girin benim utility depoyu listelemek için, o "svn ls --depth sonsuzluk" yaklaşımı çok daha hızlıdır. İşte benchmarks. Sadece Subversion dahili API'sinde bulunan, ancak şimdi bir komut satırı üzerinden erişilebilen bir işlevi çağırır.

Yani kendisi (yani sizin svn ana dosya sistemi üzerinde) kullanan repo erişim

svnlook tree [path_to_repo] | grep [file_name] 

veya mulitple repolar kurulum varsa (bütün repo arama ile

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

çalıştırabilirsiniz).

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 

(bulursa)-yollar --full

örnek dosyayla repo tam yolunu verecektir seçeneği: bir dosyaya

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 

yönlendirme çıkış statik kopyası ise gerekli.
, nix işletim sisteminin kullanılmasını varsayar.

+3

+1 Üste | grep ". Bu bir subversion repo dosyasında bir dosya araması yapmanın en hızlı yoludur. –

+0

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

0

Uzaktaki deponuz çok büyük değilse, kolay bir yöntem şöyledir: Yerel bir depo almak için bir "ödeme" yapabilirsiniz. Eğer windows makinesinde iseniz, "Search" veya Linux makinesini "Find" komutunu kullanınız.