รวมสาขาเข้ากับลำต้น


125

ฉันประสบปัญหาเฉพาะกับ mergeSVN ฉันต้องการผสานจากสาขา dev เป็น trunk เรามีสาขา dev หลายกิ่งที่ตัดลำต้นในเวลาเดียวกัน

ฉันกำลังรวมหนึ่งในสาขาเหล่านั้นเข้ากับลำต้นด้วยคำสั่งนี้:

svn merge trunk branch_1

ฉันเห็นการเปลี่ยนแปลงที่ไม่ได้เป็นส่วนหนึ่งของกิ่งก้านนี้รวมเข้ากับลำต้น ผมทำอะไรผิดหรือเปล่า ?

เวอร์ชัน SVN:

ไคลเอนต์บรรทัดคำสั่งการโค่นล้มเวอร์ชัน 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32


7
ฉันรู้ว่านี่ไม่ใช่คำตอบ แต่ถ้าคุณมีสาขาที่ใช้งานอยู่หลายสาขาพร้อมกันคุณอาจต้องย้ายไปที่ Mercurial หรือ git Ps: ฉันไม่ได้คลั่งไคล้ฉันทำงานกับ svn มา ~ 7 ปีแล้ว ;-)
zerkms

2
มันให้ประโยชน์อะไร? เหตุใดการย้ายไปที่ git หรือ mercurial จึงเป็นทางเลือกที่ดีกว่า?
Vanchinathan Chandrasekaran

3
เนื่องจากคอมไพล์และเมอร์คิวเรียลรองรับสาขาได้ดีกว่ามาก ข้อดี: คุณจะไม่ถามคำถามดังกล่าวและจะปวดหัวน้อยลงในการสร้างและดูแลสาขา (ปัจจุบันฉันทำงานในโครงการที่มีสาขามากกว่า 1,000 สาขาใน svn มันเป็นเรื่องยากที่จะทำงานร่วมกับพวกเขา)
zerkms

ผมขอแนะนำให้มองเข้าไปในSvnmerge.pyและทบทวนบทความนี้
chown

คำตอบ:


215

svn mergeไวยากรณ์ของคุณไม่ถูกต้อง

คุณต้องการชำระเงินสำเนาที่trunkใช้งานได้จากนั้นใช้svn merge --reintegrateตัวเลือก:

$ pwd
/home/user/project-trunk

$ svn update  # (make sure the working copy is up to date)
At revision <N>.

$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U    foo.c
U    bar.c
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge branch_1 back into trunk!"
Sending        .
Sending        foo.c
Sending        bar.c
Transmitting file data ..
Committed revision <N+1>.

ดูบทหนังสือ SVN เกี่ยวกับการรวมสำหรับรายละเอียดเพิ่มเติม


โปรดทราบว่าในขณะที่เขียนนี่เป็นคำตอบที่ถูกต้อง (และได้รับการยอมรับ) แต่สิ่งต่างๆได้ดำเนินต่อไป ดูคำตอบของ topek และhttp://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate


4
- ตัวเลือกการรวมศูนย์ไม่บังคับสาขา (ใน 1.6) สามารถรวมกับปลายทางใดก็ได้กี่ครั้งก็ได้
Lazy Badger

1
จริงๆ? โดยไม่ต้องเสี่ยงซ้ำชุดการเปลี่ยนแปลงเดิม? คุณสามารถให้ลิงค์เพื่อยืนยันหลักฐานนี้ได้ไหม
Neutrino

--reintegrateไม่ได้บังคับ แต่แนะนำจริงๆในกรณีนี้ ฉันพยายามที่จะทำมันโดยไม่มี--reintegrateและจบลงด้วยความขัดแย้งมากมาย ด้วย--reintegrateไม่มีความขัดแย้งและทุกอย่างก็ดี!
tibo

17
--reintegrateตัวเลือกที่ง่ายและมีประสิทธิภาพ แต่จะต้องมีการตั้งข้อสังเกตว่า "เมื่อ--reintegrateผสานจะทำจากสาขาที่ลำต้นสาขาจะไม่สามารถใช้งานได้สำหรับการทำงานต่อไป. มันไม่สามารถที่จะถูกต้องดูดซับการเปลี่ยนแปลงลำใหม่หรือมันสามารถ reintegrated อย่างถูกต้อง ลำต้นอีกครั้ง” ตามที่อธิบายโดยหนังสือที่คุณเชื่อมโยง
Pino

3
@daveL การผสานไปข้างหน้าจากลำต้นไปยังกิ่งก้านมีความหมายสำหรับฉัน อย่างไรก็ตามฉันพบคุณลักษณะขั้นสูงในการ "รักษาสาขาที่ย้ำให้มีชีวิตอยู่" (ดูstackoverflow.com/a/10163059/685806 ) นอกจากนี้ยังมีการนำไปใช้โดยอัตโนมัติโดยไคลเอ็นต์เวอร์ชันใหม่กว่า
Pino

78

หากไดเรกทอรีการทำงานของคุณชี้ไปที่ลำต้นคุณควรจะสามารถรวมสาขาของคุณกับ:

svn merge https://HOST/repository/branches/branch_1

อย่าลืมออกคำสั่งนี้ในไดเรกทอรีรากของลำต้นของคุณ


7
ณ SVN 1.8. นี่คือคำตอบที่ถูกต้อง ดูsubversion.apache.org/docs/release-notes/…
GreenAsJade

@blahdiblah ข้อมูลโค้ดมีข้อมูลที่ไม่เกี่ยวข้องมากมาย มีเหตุผลว่าทำไมบทคัดย่อของการศึกษาจึงมีลำดับความสำคัญในการอ่านมากกว่าส่วนอื่น ๆ ของการศึกษา เช่นเดียวกับการทดสอบ UX การลดอัตราตีกลับให้น้อยที่สุด ฯลฯ เป็นหลักการเดียวกันทั้งหมด
ahnbizcad

ด้วย 1.7 คุณสามารถผสานได้โดยไม่ต้องใช้ตัวเลือก - รวมตัวใหม่และพัฒนาต่อไปในสาขาและทำการรวมต่อไป น่าเศร้าที่ 1.8 จะบังคับให้สิ่งนี้เป็นการรวมตัวใหม่และดูเหมือนจะไม่มีทางป้องกันได้ ซึ่งหมายความว่าทันทีที่คุณรวมคุณจะไม่สามารถใช้กิ่งไม้ได้โดยไม่ต้องผ่าน "การเต้นรำที่มีชีวิต" ที่น่ากลัว
John Little

3
อย่าลืมส่งสำเนาที่ใช้งานได้ของลำตัวกลับไปที่ที่เก็บหลังจากผสาน!
John

16

ทำการอัพเดต svn ในท้ายรถจดหมายเลขการแก้ไข

จากลำต้น:

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName

คุณสามารถตรวจสอบว่ากิ่งไหนถูกตัดออกจากลำต้นโดยทำบันทึก svn

svn log --stop-on-copy

เนื่องจากมีสาขา dev หลายสาขาที่มีชีวิตอยู่ในเวลาเดียวกันสิ่งนี้ก็ไม่ได้ผลสำหรับฉันด้วยคำสั่งนี้จึงดึงการเปลี่ยนแปลงจากสาขาอื่นเช่นกัน อาจเป็นปัญหากับไคลเอนต์ SLik SVN หรือไม่
Vanchinathan Chandrasekaran

แม้ว่าสิ่งนี้จะไม่ถูกต้อง แต่ก็มีวิธีที่ง่ายกว่าในการรวมกับเวอร์ชันล่าสุดsvn(เช่น OP หนึ่งใช้)
blahdiblah

@VanchinathanChandrasekaran ในคำสั่งคุณระบุชื่อสาขาเนื่องจากsvn://path/to/branch/branchNameควรดึงเฉพาะการเปลี่ยนแปลงจากสาขานั้นไม่ใช่จากสาขาอื่น ถ้าเป็นเช่นนั้นเราตกอยู่ในอันตราย!
Fredrick Gauss

1

ไวยากรณ์ไม่ถูกต้องควรจะเป็น

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.