จะดูว่าจะอัพเดตอะไรจากที่เก็บก่อนออกคำสั่ง“ svn update” ได้อย่างไร?


115

ฉันได้ทำการเปลี่ยนแปลงในไฟล์จำนวนมากไปยังที่เก็บ SVN จาก Eclipse

จากนั้นไปที่ไดเร็กทอรีเว็บไซต์ในกล่อง linux ที่ฉันต้องการอัปเดตการเปลี่ยนแปลงเหล่านี้จากที่เก็บไปยังไดเร็กทอรีที่นั่น

ฉันต้องการพูดว่า "svn update project100" ซึ่งจะอัปเดตไดเรกทอรีภายใต้ "project100" พร้อมไฟล์ที่เพิ่มและเปลี่ยนแปลงทั้งหมดของฉันเป็นต้น

อย่างไรก็ตามฉันไม่ต้องการอัปเดตการเปลี่ยนแปลงที่ฉันไม่ได้ทำ ดังนั้นฉันจึงคิดว่าฉันสามารถพูดว่า "svn status project100" แต่เมื่อฉันทำสิ่งนี้ฉันได้รับรายการการเปลี่ยนแปลงที่แตกต่างไปจากเดิมโดยสิ้นเชิงไม่มีของฉันอยู่ในรายการซึ่งแปลก

ดังนั้นเพื่อให้แน่ใจว่าเฉพาะการเปลี่ยนแปลงของฉันเท่านั้นที่อัปเดตเป็นไดเรกทอรีเว็บฉันจึงถูกบังคับให้ไปยังทุกไดเรกทอรีที่ฉันรู้ว่ามีการเปลี่ยนแปลงที่ฉันทำและอัปเดตเฉพาะไฟล์เหล่านั้นอย่างชัดเจนเช่น "svn update newfile1.php" เป็นต้น ซึ่งน่าเบื่อ

ใครสามารถอธิบายขั้นตอนการทำงานมาตรฐานได้ที่นี่กล่าวคือฉันจะรับรายการการเปลี่ยนแปลงทั้งหมดที่กำลังจะทำก่อนที่จะดำเนินการคำสั่ง "svn update" ได้อย่างไร ฉันคิดว่ามันเป็นคำสั่ง "สถานะ"

คำตอบ:


167

ลอง:

svn status --show-updates

หรือ (เหมือนกัน แต่สั้นกว่า):

svn status -u

9
หรือสั้นกว่า: svn st -u
Kenyakorn Ketsombut

ทำอะไรX 's ค่าเฉลี่ยในการส่งออก?
IgorGanapolsky

1
นอกจากนี้ให้ใช้: svn status -q -u... แสดงเฉพาะการเปลี่ยนแปลงการอัปเดตและการเปลี่ยนแปลงในระบบที่เกี่ยวข้องกับไฟล์ที่เป็นของที่เก็บ คุณไม่ได้รับเครื่องหมายคำถาม (?) จากไฟล์ที่ไม่ใช่ที่เก็บ
จะ

56

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

หากคุณต้องการทราบว่ามีการเปลี่ยนแปลงอะไรบ้างในที่เก็บเซิร์ฟเวอร์ svn ให้รันคำสั่ง:

$ svn st -u

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

$ svn st -u | grep -E '^M {7}\*'

หากคุณต้องการรับรายการไฟล์ที่เปลี่ยนแปลงระหว่างการแก้ไขเฉพาะและ HEAD ให้รันคำสั่ง:

$ svn diff -r revisionNumber:HEAD --summarize

หากคุณต้องการรับรายการไฟล์ที่เปลี่ยนแปลงระหว่างการแก้ไขโดยเฉพาะให้เรียกใช้คำสั่ง:

$ svn diff -r revisionNumber:anotherRevisionNumber --summarize

หากคุณต้องการดูสิ่งที่จะอัปเดต (โดยไม่ต้องอัปเดตจริง) ให้รันคำสั่ง:

$ svn merge --dry-run -r BASE:HEAD .

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

$ svn diff -r BASE:HEAD ./pathToYour/file

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

$ svn diff -r BASE:HEAD .

43

คุณสามารถดูสิ่งที่จะอัปเดต (โดยไม่ต้องอัปเดตจริง) โดยออก:

svn merge --dry-run -r BASE:HEAD .

รายละเอียดเพิ่มเติมที่นี่


ข้างบนไม่ได้ผลสำหรับฉันต้องวิ่งsvn merge --dry-run --revision BASE:HEAD .
Znarkus

3
การรับ "svn: E195020: ไม่สามารถรวมเป็นสำเนาการทำงานที่แก้ไขแบบผสม [16032: 16061] ลองอัปเดตก่อน"
Hubert Grzeskowiak

คำตอบที่ดี - แย่มากที่ใช้ไม่ได้กับสำเนาการแก้ไขแบบผสม .. นั่นจะเป็นการเรียนรู้ฉัน
เจอราร์ดออน

2
@HubertGrzeskowiak - ฉันชอบประชด q: how do I ... without doing an update?a: first, do an update, then ...:) :) :)
Jesse Chisholm

17

นี่คือสิ่งที่ฉันกำลังมองหา ตรวจสอบ Google ก่อน แต่svn helpสุดท้ายก็ผ่านมาสำหรับฉัน :)

svn diff -r BASE:HEAD .


0

คุณสามารถใช้ 'svn diff' เพื่อดูความแตกต่างระหว่างสำเนาการทำงานของคุณกับที่เก็บ


9
ไม่ถูกต้อง. สิ่งเหล่านี้จะแสดงเฉพาะความแตกต่างระหว่างคุณกับครั้งสุดท้ายที่คุณซิงค์กับที่เก็บ ในระหว่างนี้คุณจะไม่เห็นความแตกต่างใด ๆ ที่บุคคลอื่นให้ความสำคัญกับที่เก็บ OP ต้องการทราบว่าการเปลี่ยนแปลงเหล่านั้นคืออะไรโดยไม่ต้องนำไปใช้ผ่านทางsvn update
dland

@Andrew หมายถึงการแนะนำให้ OP เรียกใช้ 'svn diff -r HEAD URL' เพื่อดูความแตกต่างจากไฟล์ที่เช็คเอาต์ไปจนถึงสิ่งที่เช็คอินเป็น HEAD หรือเวอร์ชันบนสุดในที่เก็บ
Mac

0

ในทางทฤษฎีคุณสามารถทำการเปลี่ยนแปลงทั้งหมดในสาขาที่คุณสร้างขึ้นเพื่อการใช้งานของคุณเอง จากนั้นคุณจะมั่นใจได้อย่างสมเหตุสมผลว่าคุณเป็นคนเดียวที่กระทำกับมัน

การพัฒนาคุณลักษณะ IMHO ควรทำเช่นนี้

จากนั้นคุณสามารถอัปเดตเครื่องเป้าหมายนี้จากสาขานี้แทนจากลำตัว

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