ฉันมีไดเรกทอรีทำงาน SVN svn status
ฉันทำเปลี่ยนแปลงบางอย่างในไดเรกทอรีที่และมันแสดงให้เห็นใน แต่มีวิธีใดบ้างที่ฉันจะลบการเปลี่ยนแปลงทั้งหมดที่มีและเพียงเอาทุกอย่างออกจากหีบโดยใช้บรรทัดคำสั่ง?
ฉันมีไดเรกทอรีทำงาน SVN svn status
ฉันทำเปลี่ยนแปลงบางอย่างในไดเรกทอรีที่และมันแสดงให้เห็นใน แต่มีวิธีใดบ้างที่ฉันจะลบการเปลี่ยนแปลงทั้งหมดที่มีและเพียงเอาทุกอย่างออกจากหีบโดยใช้บรรทัดคำสั่ง?
คำตอบ:
svn revert -R .
svn up
สิ่งนี้จะแปลงไดเรกทอรีปัจจุบันซ้ำและทุกสิ่งที่อยู่ภายใต้ไดเรกทอรีนั้นซ้ำแล้วอัปเดตเป็นเวอร์ชันล่าสุด
ฉันใช้การผสมผสานของคำตอบของคนอื่น ๆ เพื่อหาทางแก้ปัญหานี้:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
svn cleanup . --remove-ignored
หากคุณไม่มีการเปลี่ยนแปลงคุณสามารถทำตัวขี้เกียจและทำอะไร ...
rm -rf *
svn update
แต่ไม่มีจริงๆไม่ได้ทำอย่างนั้นจนกว่าคุณจะแน่ใจจริงๆว่าตัวเลือกอาวุธนิวเคลียร์จากพื้นที่คือสิ่งที่คุณต้องการ !! สิ่งนี้มีข้อดีของการรวมกันของการสร้าง cruft ไฟล์ชั่วคราวและสิ่งต่าง ๆ ที่ SVN ข้าม
ทางออกที่ถูกต้องมากขึ้นคือการใช้คำสั่งเปลี่ยนกลับ:
svn revert -R .
-R ทำให้เกิดการโค่นล้มในการเรียกคืนและยกเลิกทุกสิ่งในและต่ำกว่าไดเรกทอรีการทำงานปัจจุบัน
svn nuke-from-space
ไม่มีคำตอบที่นี่เป็นสิ่งที่ฉันต้องการ นี่คือสิ่งที่ฉันมาด้วย:
# Recursively revert any locally-changed files
svn revert -R .
# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
tr '\n' '\0' | xargs -0 rm -rf
ทดสอบบน Linux; อาจทำงานใน Cygwin แต่ขึ้นอยู่กับ (ฉันเชื่อว่า) ส่วนขยายเฉพาะของ GNU ซึ่งอนุญาตให้ xargs แยกออกจากกัน'\0'
แทนที่จะเป็นช่องว่าง
ข้อดีของคำสั่งดังกล่าวคือไม่จำเป็นต้องมีกิจกรรมเครือข่ายใด ๆ ในการรีเซ็ตแซนด์บ็อกซ์ คุณได้สิ่งที่คุณเคยมีมาก่อนและสูญเสียการเปลี่ยนแปลงทั้งหมด (ปฏิเสธความรับผิดชอบก่อนที่จะมีคนโทษฉันสำหรับรหัสนี้ทำลายงานของพวกเขา) ;-)
ฉันใช้สคริปต์นี้ในระบบการรวมอย่างต่อเนื่องที่ฉันต้องการตรวจสอบให้แน่ใจว่ามีการสร้างคลีนใหม่หลังจากรันการทดสอบบางอย่าง
แก้ไข : ฉันไม่แน่ใจว่าจะทำงานกับการโค่นล้มทุกรุ่น ไม่ชัดเจนหากsvn status
คำสั่งถูกจัดรูปแบบเสมอ ใช้ความเสี่ยงของคุณเองเช่นเดียวกับคำสั่งใด ๆ ที่ใช้rm
คำสั่งแบบครอบคลุม
การเปลี่ยนกลับจะยกเลิกการเปลี่ยนแปลงในท้องถิ่นที่คุณทำไว้
คุณสามารถใช้คำสั่งต่อไปนี้เพื่อยกเลิกการเปลี่ยนแปลงในเครื่องทั้งหมด:
svn st -q | awk '{print $2;}' | xargs svn revert
svn status | grep '^M' | sed -e 's/^.//' | xargs rm
svn update
จะลบไฟล์ใด ๆ ที่ได้รับการแก้ไข ฉันดูเหมือนจะจำได้ว่ามีปัญหากับการย้อนกลับเมื่ออาจมีการเพิ่มไฟล์และไดเรกทอรี
หากคุณอยู่บน windows การวนลูปต่อไปนี้จะยกเลิกการเปลี่ยนแปลงทั้งหมดที่ไม่ได้ทำไปยังพื้นที่ทำงานของคุณ:
for /F "tokens=1,*" %%d in ('svn st') do (
svn revert "%%e"
)
หากคุณต้องการลบการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดและวัตถุที่ไม่มีการพลิกผันทั้งหมดจะต้องใช้ 2 ลูป:
for /F "tokens=1,*" %%d in ('svn st') do (
svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
svn rm --force "%%e"
)