มีวิธีใดที่จะคอมมิตรายการไฟล์เฉพาะ (เช่นหนึ่งในรายการไฟล์ที่ SVN ต้องการคอมมิต)
ฉันกำลังทำงานกับ MAC OS X ภายใต้ Terminal โดยไม่มี UI ใด ๆ
มีวิธีใดที่จะคอมมิตรายการไฟล์เฉพาะ (เช่นหนึ่งในรายการไฟล์ที่ SVN ต้องการคอมมิต)
ฉันกำลังทำงานกับ MAC OS X ภายใต้ Terminal โดยไม่มี UI ใด ๆ
คำตอบ:
แน่ใจ เพียงแค่รายการไฟล์:
$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png
ฉันไม่ทราบวิธีที่จะบอกให้ละเว้นไฟล์บางชุด แน่นอนว่าถ้าไฟล์ที่คุณต้องการคอมมิชชันนั้นถูกลิสต์โดยเชลล์คุณสามารถใช้มันได้:
$ svn ci -m "No longer sets printer on fire" printer-driver/*.c
คุณยังสามารถให้คำสั่ง svn อ่านรายการไฟล์ที่จะคอมมิทจากไฟล์:
$ svn ci -m "Now works" --targets fix4711.txt
svn add
ถูกใช้เพื่อเพิ่มไฟล์ลงในที่เก็บ
ใช้รายการเปลี่ยนแปลง ข้อได้เปรียบเหนือการระบุไฟล์คือคุณสามารถเห็นภาพและยืนยันทุกสิ่งที่คุณต้องการก่อนที่จะส่งมอบ
$ svn changelist fix-issue-237 foo.c
Path 'foo.c' is now a member of changelist 'fix-issue-237'.
เสร็จแล้วตอนนี้ svn จะแยกสิ่งต่าง ๆ ให้คุณ สิ่งนี้จะช่วยเมื่อคุณเล่นกลการเปลี่ยนแปลงหลายอย่าง
$ svn status
A bar.c
A baz.c
--- Changelist 'fix-issue-237':
A foo.c
สุดท้ายบอกให้ทำสิ่งที่คุณต้องการเปลี่ยนแปลง
$ svn commit --changelist fix-issue-237 -m "Issue 237"
svn changelist fix-issue-237 --recursive path/to/directory
โดยทั่วไปคุณใส่ไฟล์ที่คุณต้องการคอมมิตในบรรทัดคำสั่ง
svn ci file1 file2 dir1/file3
เนื่องจากสถานะการโค่นล้มของฉันฉันต้องได้รับการสร้างสรรค์ svn st
แสดงให้เห็นM
, A
และ~
สถานะ ฉันแค่ต้องการM
และA
ดังนั้น ...
svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt
คำสั่งนี้ระบุว่าค้นหาเอาต์พุตบรรทัดทั้งหมดโดยsvn st
เริ่มต้นด้วยM
หรือA
ตัดโดยใช้ตัวคั่นช่องว่างจากนั้นรับ colums 8 ถึงท้าย ดัมพ์นั้นลงใน target.txt และเขียนทับ
จากนั้นปรับแก้ target.txt เพื่อตัดรายชื่อไฟล์เพิ่มเติม จากนั้นเรียกใช้ด้านล่างเพื่อกระทำ:
svn ci -m "My commit message" --targets targets.txt
อาจไม่ใช่กรณีการใช้งานที่พบบ่อยที่สุด แต่หวังว่าจะช่วยได้บ้าง
grep -v '^~'
บัญชีดำในสิ่งที่คุณต้องการ
นอกเหนือจากการแสดงรายการไฟล์อย่างชัดเจนตามที่แสดงโดยคลายและWiencznyคุณสามารถตั้งค่ารายการการเปลี่ยนแปลงและตรวจสอบสิ่งเหล่านี้ สิ่งเหล่านี้ช่วยให้คุณสามารถจัดการชุดการเปลี่ยนแปลงที่ไม่เชื่อมโยงกับสำเนาการทำงานเดียวกัน
คุณสามารถอ่านเกี่ยวกับพวกเขาในรูปแบบออนไลน์ของหนังสือ SVN ที่ดีเยี่ยม
ลองใช้สคริปต์นี้ ..
#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`;
do LIST="${LIST} $f $NULL on";
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
ฉันสร้างโฟลเดอร์ (ย่อย) ชื่อ "ซ่อน" ย้ายไฟล์ที่ฉันไม่ต้องการให้มี จากนั้นให้คอมมิทโดยไม่สนใจคำร้องเรียนเกี่ยวกับไฟล์ที่หาย จากนั้นย้ายไฟล์ที่ซ่อนจากซ่อนกลับไปที่. /
ฉันรู้ว่าไม่มีข้อเสียสำหรับกลยุทธ์นี้