คุณเห็นรายการบันทึก SVN ล่าสุดได้อย่างไร


194

การพิมพ์จะแยกsvn logรายการที่ยาวและไร้ประโยชน์ออกมาอย่างไม่น่าเชื่อในบรรทัดคำสั่ง ฉันไม่รู้ว่าทำไมถึงเป็นค่าเริ่มต้น ถ้าฉันต้องการอ่าน (หรือแม้กระทั่งอ่านได้) 300 รายการบนเทอร์มินัลฉันจะไม่สนใจการพิมพ์svn log --fullหรืออะไรทำนองนั้น

บางทีพวก SVN กำลังคิดว่าฉันต้องการให้อาหารนั้นออกไปยังโปรแกรมอื่น อย่างไรก็ตามถ้าเป็นกรณีนี้มันจะสมเหตุสมผลกว่าถ้ามีการเรียก verbose มากขึ้นสำหรับโปรแกรมไม่ใช่ผู้ใช้ terminal

อย่างไรก็ตามฉันจะดูกิจกรรมล่าสุดบางอย่างเช่นรายการ 5 หรือ 10 รายการล่าสุดเพื่อดูว่ามีอะไรเปลี่ยนแปลงได้บ้าง


9
git logใช่จริงๆมันควรจะทำงานเหมือนเอ่อ
พอลเดรเปอร์

คำตอบ:



127

นอกจากสิ่งที่Bert F กล่าวไว้แล้วคำสั่งจำนวนมากรวมถึงlogมีตัวเลือก-r(หรือ--revision) ต่อไปนี้เป็นตัวอย่างที่ใช้งานได้จริงโดยใช้ตัวเลือกนี้เพื่อแสดงช่วงของการแก้ไข:

หากต้องการแสดงรายการทุกอย่างตามลำดับจากน้อยไปมาก

svn log -r 1:HEAD

หากต้องการแสดงรายการทุกอย่างตามลำดับจากมากไปน้อย:

svn log -r HEAD:1

หากต้องการแสดงรายการทุกอย่างตั้งแต่วันที่สิบสามถึงฐานของการแก้ไขการเช็คเอาท์ในปัจจุบันตามลำดับจากน้อยไปหามาก:

svn log -r 13:BASE

ในการรับทุกสิ่งระหว่างวันที่ที่กำหนด:

svn log -r {2011-02-02}:{2011-02-03}

คุณสามารถรวมนิพจน์ข้างต้นทั้งหมดเข้ากับ--limitตัวเลือกเพื่อให้คุณสามารถควบคุมสิ่งที่พิมพ์ออกมาได้อย่างละเอียด สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ-rการแสดงออกเหล่านี้อ้างถึงsvn help logหรือบทที่เกี่ยวข้องในการควบคุมเวอร์ชันหนังสือที่มีการโค่นล้ม


8
ขอบคุณมากสำหรับคำอธิบายนั้น @Daniel Dinnyes - ฉันมักจะมีปัญหาตรงข้ามกับ OP: svn log .อาจกลับมาแก้ไขที่เร็วที่สุดสำหรับฉัน (เช่นเดียวกันกับsvn log --limit 4 .); แต่ถ้าฉันโทรsvn log -r HEAD:1 .แล้วในที่สุดฉันก็มีรายการทั้งหมดอยู่ในรายการ ... ขอบคุณอีกครั้ง - ไชโย!
sdaau

สิ่งนี้ดีกว่าเนื่องจากsvn log แสดงเฉพาะประวัติการเปลี่ยนแปลงของเส้นทางปัจจุบัน
Ninja

41

ฉันชอบที่จะใช้-vสำหรับโหมด verbose
มันจะให้รหัสกระทำความคิดเห็นและไฟล์ที่ได้รับผลกระทบทั้งหมด

svn log -v --limit 4

ตัวอย่างผลลัพธ์:

I added some migrations and deleted a test xml file
------------------------------------------------------------------------
r58687 | mr_x | 2012-04-02 15:31:31 +0200 (Mon, 02 Apr 2012) | 1 line Changed
paths: 
A /trunk/java/App/src/database/support    
A /trunk/java/App/src/database/support/MIGRATE    
A /trunk/java/App/src/database/support/MIGRATE/remove_device.sql
D /trunk/java/App/src/code/test.xml

2
ตัวเลือก verbose นั้นมีประโยชน์อย่างมาก
Jason George

และถ้าทีม dev นั้นหวานจริง ๆ พวกเขาใส่รหัสปัญหาในความคิดเห็น svn และคุณสามารถค้นหาปัญหาที่เชื่อมต่อกับคอมมิท
Jonas Söderström

11

ไพพ์เอาต์พุตผ่านlessหรือเพจเจอร์อื่น ๆ :

svn log | less

1
หากคุณมีการแก้ไข> 23k ครั้งคุณจะยังคงรอ ~ 20 วินาทีเพื่อดูรายการแรก (และเมื่อไม่ได้ใช้บันทึก verbose) แต่มันก็ดี - แสดงล่าสุดที่ด้านบนสุด และดีกว่าการเพจ 100 ต่อครั้งของ TortoiseSVN! เมื่อคุณต้องการย้อนกลับไป
Tomasz Gandor

6

ในกรณีที่ทุกคนกำลังดูคำถามเก่านี้คำสั่งที่มีประโยชน์เพื่อดูการเปลี่ยนแปลงตั้งแต่การอัปเดตครั้งล่าสุดของคุณ:

svn log -r $(svn info | grep Revision | cut -f 2 -d ' '):HEAD -v

LE (ขอบคุณ Gary สำหรับความคิดเห็น)
สิ่งเดียวกัน แต่สั้นกว่าและมีเหตุผลมากกว่า:

svn log -r BASE:HEAD -v


8
หรือเพียงแค่svn log -r BASE:HEAD -v
Gary

5

หากต้องการเพิ่มสิ่งที่ผู้อื่นพูดคุณสามารถสร้างนามแฝงในไฟล์. bashrc หรือ. bash_aliases ของคุณ:

alias svnlog='svn log -l 30 | less'

หรือสิ่งที่คุณต้องการเป็นค่าเริ่มต้นของคุณ


4

ในขณะที่คุณสังเกตเห็นsvn logคำสั่งวิ่งโดยไม่มีข้อโต้แย้งใด ๆ แสดงข้อความบันทึกทั้งหมดที่เกี่ยวข้องกับ URL ที่คุณระบุหรือไปยังโฟลเดอร์คัดลอกการทำงานที่คุณเรียกใช้คำสั่ง

คุณสามารถปรับแต่ง / จำกัดsvn logผลลัพธ์ได้ตลอดเวลา:

  • svn log --limit NUM จะแสดงเฉพาะ NUM ครั้งแรกของการแก้ไข
  • svn log --revision REV1(:REV2) จะแสดงข้อความบันทึกสำหรับการแก้ไข REV1 หรือช่วง REV1 - REV2
  • svn log --searchจะแสดงการแก้ไขที่ตรงกับรูปแบบการค้นหาที่คุณระบุ (คำสั่งนั้นมีอยู่ใน Subversion 1.8 และไคลเอนต์ที่ใหม่กว่า) คุณสามารถค้นหาโดย
    • ผู้เขียน revision (เช่นชื่อผู้ใช้ของผู้มอบหมาย)
    • วันที่ที่มีการแก้ไข
    • แก้ไขข้อความแสดงความคิดเห็น (ข้อความบันทึก)
    • รายการของเส้นทางที่มีการเปลี่ยนแปลงในการแก้ไข

4

คำตอบนี้มีคำถามเพิ่มเติมเกี่ยวกับตัวเลือกคำสั่งย่อย Subversion สำหรับทุกคำสั่งย่อยที่มี (เช่นเพิ่มบันทึกสถานะ ... ) คุณสามารถเพิ่ม--helpตัวเลือกเพื่อแสดงรายการตัวเลือกที่มีทั้งหมดที่คุณสามารถใช้กับคำสั่งย่อยรวมถึงตัวอย่างวิธีการใช้งาน ตัวอย่างต่อไปนี้นำมาโดยตรงจากsvn log --helpเอาต์พุตคำสั่งภายใต้ส่วน "ตัวอย่าง":

Show the latest 5 log messages for the current working copy
directory and display paths changed in each commit:
  svn log -l 5 -v

3

แต่บันทึก svn ยังคงอยู่ในลำดับย้อนกลับนั่นคือรายการล่าสุดจะถูกส่งออกก่อนเลื่อนปิดด้านบนของเทอร์มินัลของฉันและหายไป ฉันต้องการเห็นรายการสุดท้ายเช่นลำดับการเรียงจะต้องเรียงตามลำดับเหตุการณ์ คำสั่งเดียวที่ดูเหมือนว่าจะเป็นเช่นนี้svn log -r 1:HEADแต่ใช้เวลานานเกินไปในที่เก็บที่มีรายการ 10,000 รายการ ฉันได้สิ่งนี้มา:

แสดง 10 รายการการโค่นล้มล่าสุดตามลำดับเวลา:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.