ฉันรู้ว่าฉันสามารถ svn diff -r a:b repo
ดูการเปลี่ยนแปลงระหว่างการแก้ไขที่ระบุทั้งสองได้ สิ่งที่ฉันต้องการคือความแตกต่างสำหรับการแก้ไขทุกครั้งที่เปลี่ยนไฟล์ คำสั่งนั้นใช้ได้หรือไม่
ฉันรู้ว่าฉันสามารถ svn diff -r a:b repo
ดูการเปลี่ยนแปลงระหว่างการแก้ไขที่ระบุทั้งสองได้ สิ่งที่ฉันต้องการคือความแตกต่างสำหรับการแก้ไขทุกครั้งที่เปลี่ยนไฟล์ คำสั่งนั้นใช้ได้หรือไม่
คำตอบ:
ไม่มีคำสั่งในตัวดังนั้นฉันมักจะทำสิ่งนี้:
#!/bin/bash
# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {
# first revision as full text
echo
read r
svn log -r$r $url@HEAD
svn cat -r$r $url@HEAD
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
จากนั้นคุณสามารถโทรหาด้วย:
history_of_file $1
svn: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
svn log --diff [path_to_file]
ทำงานตรงนี้! stackoverflow.com/a/24938573/3185510
แตกต่างจากที่คุณอธิบายเล็กน้อย แต่ฉันคิดว่านี่อาจเป็นสิ่งที่คุณต้องการ:
svn blame filename
มันจะพิมพ์ไฟล์ที่มีแต่ละบรรทัดนำหน้าด้วยเวลาและผู้เขียนความมุ่งมั่นที่มีการเปลี่ยนแปลงครั้งสุดท้าย
หากคุณต้องการดูประวัติทั้งหมดของไฟล์ที่มีการเปลี่ยนแปลงรหัส:
svn log --diff [path_to_file] > log.txt
--diff
เพราะมันมีการทดสอบสำหรับตัวเลือกในขณะที่ 1.7.3 มีไม่มี subversion/tests/cmdline/log_tests.py
-
--limit <number>
ตัวเลือก เช่นเดียวกับ:svn log --diff --limit 5 [path_to_file]
คุณสามารถใช้git-svn
เพื่อนำเข้าพื้นที่เก็บข้อมูลลงพื้นที่เก็บข้อมูล Git git log -p filename
แล้วใช้ นี่แสดงแต่ละรายการบันทึกสำหรับไฟล์ตามด้วย diff ที่สอดคล้องกัน
git log X..Y -o filename
เริ่มกับ
svn log -q file | grep '^r' | cut -f1 -d' '
svn diff
ที่คุณจะได้รับรายการของการแก้ไขที่ไฟล์ที่มีการเปลี่ยนแปลงซึ่งคุณสามารถใช้เพื่อโทรสคริปต์ซ้ำ
svn log -q some_file.xxx | grep ^r | awk '{print $1}' | sed -e 's/^r//' | xargs -i svn diff -rHEAD:{} some_file.xxx > ~/file_history.txt
ความสุขเล็ก ๆ น้อย ๆ หนึ่งซับ (awk ไม่เหมือนกันเป็นตัด)
คำสั่ง "ตำหนิ" ที่มีชื่อแปลก ๆ ทำสิ่งนี้ หากคุณใช้ Tortoise จะให้กล่องโต้ตอบ "จากการแก้ไข" จากนั้นรายการไฟล์ที่มีตัวบ่งชี้บรรทัดตามบรรทัดของหมายเลขการแก้ไขและผู้เขียนถัดจากนั้น
หากคุณคลิกขวาที่ข้อมูลการแก้ไขคุณสามารถเปิดกล่องโต้ตอบ "แสดงบันทึก" ที่ให้ข้อมูลการเช็คอินเต็มรูปแบบรวมถึงไฟล์อื่น ๆ ที่เป็นส่วนหนึ่งของการเช็คอิน
เท่าที่ฉันรู้ไม่มีการสร้างคำสั่ง svn เพื่อทำสิ่งนี้ คุณจะต้องเขียนสคริปต์เพื่อเรียกใช้หลายคำสั่งเพื่อสร้างส่วนต่างทั้งหมด วิธีที่ง่ายกว่าคือการใช้ไคลเอนต์ svn GUI ถ้านั่นคือตัวเลือก หลายคนเช่นปลั๊กอินที่ถูกโค่นล้มสำหรับ Eclipse จะแสดงรายการประวัติของไฟล์รวมถึงอนุญาตให้คุณดูส่วนต่างของการแก้ไขแต่ละครั้ง
ขอบคุณ Bendin ฉันชอบทางออกของคุณมาก
ฉันเปลี่ยนให้ทำงานแบบย้อนกลับโดยแสดงการเปลี่ยนแปลงล่าสุดก่อน ซึ่งเป็นสิ่งสำคัญด้วยรหัสที่ยืนยาวดูแลรักษามานานหลายปี ฉันมักจะทำให้เป็นท่อมากขึ้น
svnhistory elements.py |more
ฉันเพิ่ม -r ในการจัดเรียง ฉันลบข้อมูลจำเพาะ การจัดการสำหรับ 'บันทึกแรก' มันจะผิดพลาดในรายการสุดท้ายเนื่องจากไม่มีอะไรจะแตกต่างด้วย แม้ว่าฉันจะอยู่กับมันเพราะฉันไม่เคยลงไปไกลขนาดนั้น
#!/bin/bash
# history_of_file
#
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
#
# Dlink
# Made to work in reverse order
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
history_of_file $1
ฉันเห็นคำตอบบางส่วนแล้วขณะค้นคว้าหัวข้อนี้ นี่คือสิ่งที่ใช้ได้ผลสำหรับฉันและหวังว่าจะช่วยผู้อื่น คำสั่งนี้จะแสดงผลลัพธ์ในบรรทัดคำสั่งแสดงหมายเลขการแก้ไขผู้เขียนเวลาการแก้ไขและการเปลี่ยนแปลงที่ทำ:
svn blame -v <filename>
เพื่อให้การค้นหาของคุณง่ายขึ้นคุณสามารถเขียนผลลัพธ์ไปยังไฟล์และ grep สำหรับสิ่งที่คุณกำลังมองหา