ค้นหาในที่เก็บ SVN เพื่อหาชื่อไฟล์


84

เรามีพื้นที่เก็บข้อมูลจำนวนมากสำหรับโค้ดที่มีโฟลเดอร์และโฟลเดอร์ย่อยหลายพันโฟลเดอร์ฉันต้องการค้นหาภายใต้ที่เก็บข้อมูลนี้ด้วยชื่อไฟล์หรือด้วยคำบางคำ

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

ฉันต้องการค้นหา cd.txt แต่ไม่รู้ว่ามันอยู่ที่ไหนใน SVN Repository เพราะฉันต้องการค้นหาในโฟลเดอร์รูทของ SVN ซึ่งฉันจะใส่ชื่อไฟล์ cd.txt และรันคำสั่งจะทำการเช็คอิน แต่ละโฟลเดอร์และจะแสดงผลรายละเอียดไฟล์ ....

ความต้องการความหวังชัดเจน คุณช่วยฉันเรื่องนี้ได้ไหม


ฉันหวังว่าจะมีคำสั่งฝั่งไคลเอ็นต์ที่คุณสามารถป้อนได้ซึ่งจะทำการค้นหาฝั่งเซิร์ฟเวอร์ SVN repo ที่ฉันกำลังทำงานอยู่นี้มีเวลาตอบสนองและอัตราการถ่ายโอนที่แย่มากผ่าน VPN อนิจจาดูเหมือนจะเป็นไปไม่ได้
Patrick M

คำตอบ:


60

หากไฟล์อยู่ในสำเนาการทำงานของคุณหากคุณใช้ svn 1.5:

svn list --depth infinity | grep <filename>

หรือ svn เวอร์ชันก่อนหน้า:

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

หากคุณต้องการค้นหาไฟล์ในประวัติ (ลบหรือย้าย):

svn log -v | less

และค้นหาด้วย:

\<filename><return>

3
รายการ svn - อินฟินิตี้ความลึกทำงานได้ดีใน windows แน่นอนว่าคุณจะไม่มี grep โดยค่าเริ่มต้นฉันเพิ่งทิ้งมันลงในไฟล์ข้อความและค้นหาด้วยโปรแกรมแก้ไขข้อความ:
Mandrake

5
ใน Windows PowerShell คุณสามารถใช้... | select-string <filename>แทนgrepไฟล์.
MarnixKlooster ReinstateMonica

2
ในบรรทัดคำสั่ง windows ปกติ... | find "<filename>"จะใช้แทน grep ได้เช่นกัน หมายเหตุ : จำเป็นต้องใช้ "รอบ ๆ ชื่อไฟล์
Raystorm

7
หากไฟล์อยู่ในสำเนาที่ใช้งานได้ฉันไม่จำเป็นต้องใช้ svn เพื่อค้นหา คุณควรเพิ่มวิธีค้นหา repo เช่นคำตอบของ Anton และ Marios บางทีนั่นอาจจะชัดเจนสำหรับคุณ แต่มันเป็นคำตอบของพวกเขาที่ทำให้ฉันเข้าใจง่าย
Lieven Keersmaekers

1
คุณสามารถsvn co --depth empty REPOURL RepoDir, cd RepoDirและsvn list --depth infinityจากนั้นได้รับทุกเส้นทางแฟ้มจากเซิร์ฟเวอร์ SVN (ที่อาจจะผลิตล้านบรรทัดถ้าคุณมีจำนวนมาก)
Ivan Akcheurov

58

สิ่งต่อไปนี้ใช้ได้กับฉัน (svn เวอร์ชัน 1.4.6)

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

6
เยี่ยมมาก ใช้ได้กับ Tortoise ใน windows: svn list -R myurl >> results.txt
live-love

ใช้งานได้ดีจริงๆ ยังง่ายกว่ามากที่จะจำเพียง "-R" มากกว่า "- ความลึกอินฟินิตี้"
MPV

ช้าสำหรับ repos ขนาดใหญ่จากนั้นให้ใช้ svn-crawler ด้านล่างดีกว่า
karsten

17

ด้วยการเข้าถึง repo เองให้ใช้ (เช่นบนระบบไฟล์โฮสต์ svn ของคุณ)

svnlook tree [path_to_repo] | grep [file_name]  

หรือเพื่อค้นหา repos ทั้งหมด (หากคุณมีการตั้งค่า repos หลายรายการ)

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 

ตัวเลือก - เส้นทางเต็มจะให้เส้นทางแบบเต็มใน repo ไปยังไฟล์ (หากพบ)

ตัวอย่าง:

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

เปลี่ยนทิศทางเอาต์พุตไปยังไฟล์หากต้องการสำเนาแบบคงที่
ใช้ระบบปฏิบัติการ nix


3
+1 สำหรับการใช้ "svnlook tree --full-paths <path_to_repo> | grep <filename>" นี่เป็นวิธีที่เร็วที่สุดที่ฉันพบในการค้นหาไฟล์ใน repo ที่ถูกโค่นล้ม
Nick Grealy

ค้นหาเร็วฟ้าผ่ามีประโยชน์มาก
Dustin Cook

12

svn list --depth infinity <your-repo-here>เพื่อรับรายชื่อไฟล์ใน repo จากนั้นจึงsvn catจะได้รับเนื้อหา คุณสามารถเพิ่ม--xmlคีย์ในlistคำสั่งเพื่อให้การแยกวิเคราะห์ง่ายขึ้นเล็กน้อย


อย่าลืมใช้grepถ้าคุณต้องการดู 1 ไฟล์โดยเฉพาะอย่างยิ่งถ้าคุณมีหลายพันไฟล์ในที่เก็บเช่น OP นอกจากนี้ยังมี--incrementalโหมดหากคุณต้องการเข้าร่วมเอาต์พุตด้วยเอาต์พุต XML ในภายหลัง / ก่อนหน้านี้
trysis

6

เมื่อเร็ว ๆ นี้ฉันได้เผยแพร่ยูทิลิตี้ของฉันเพื่อแสดงรายการที่เก็บซึ่งเร็วกว่าวิธี "svn ls --depth infinity" มาก Here're มาตรฐาน เพียงเรียกใช้ฟังก์ชันที่มีอยู่ใน Subversion internal API แต่ตอนนี้สามารถเข้าถึงได้ผ่านบรรทัดคำสั่ง

คุณจึงสามารถเรียกใช้

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

เครื่องมือที่ดี ฉันทดสอบกับ CentOS7 ฉันต้องเพิ่ม libsvn_delta และ libsvn_subr ไปยังรายการ target_link_libraries ใน CMakeLists.txt และปรับ LIBAPR_LIBRARY_INCLUDE จาก "include / apr-1.0" เป็น "include / apr-1"
karsten

4

หากคุณใช้ TortoiseSVN คุณสามารถลองสิ่งนี้ได้หากคุณต้องการดู Project by Project - เหมาะกับฉัน:

  1. สร้างโปรเจ็กต์เปล่าภายใต้ URL ระดับบนสุดที่เก็บของคุณเรียกว่า BLANK
  2. คลิกที่ Repo URL ในบานหน้าต่างด้านซ้าย
  3. ในบานหน้าต่างด้านขวาให้เลือกโครงการ BLANK และโครงการที่คุณต้องการ - พูดว่า trunk
  4. คลิกขวาเพื่อเปิดเมนูเบราว์เซอร์และเลือก 'เปรียบเทียบ URL' ขึ้นอยู่กับขนาดของ repo ของคุณอาจใช้เวลาโหลดสักครู่ แต่โดยพื้นฐานแล้วคุณจะได้รับรายชื่อโครงการทั้งหมดในรายการ "พร้อมที่จะค้นหา"
  5. ป้อนชื่อไฟล์ของคุณหรือสตริงอื่น ๆ ในตัวกรองการค้นหา

0

VisualSVN Server 4.2 รองรับการค้นหาไฟล์ตามชื่อในเว็บอินเตอร์เฟส ลองใช้คุณสมบัติใหม่บนเซิร์ฟเวอร์สาธิตเซิร์ฟเวอร์สาธิต

คุณสามารถดาวน์โหลด VisualSVN เซิร์ฟเวอร์ 4.2.0 ที่https://www.visualsvn.com/server/download/pre-release/ ดูบันทึกประจำรุ่นที่https://www.visualsvn.com/server/download/

ใส่คำอธิบายภาพที่นี่


-2

หากพื้นที่เก็บข้อมูลระยะไกลของคุณมีขนาดไม่ใหญ่นักวิธีง่ายๆก็คือคุณสามารถ "ชำระเงิน" เพื่อรับที่เก็บในเครื่องได้ หากคุณอยู่ในเครื่อง windows คุณใช้ "Search" หรือเครื่อง Linux ให้ใช้คำสั่ง "Find"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.