git-svn: ฉันจะสร้างสาขา svn ใหม่ผ่าน git ได้อย่างไร


193

ฉันมีที่เก็บ git ซึ่งติดตามที่เก็บ svn --stdlayoutผมโคลนโดยใช้

ฉันสร้างสาขาท้องถิ่นใหม่ผ่าน git checkout -b foobar

ตอนนี้ฉันต้องการให้สาขานี้สิ้นสุด…/branches/foobarในที่เก็บ svn

ฉันจะทำอย่างไรเกี่ยวกับเรื่องนั้น?

(snipped ข้อความสืบสวนจำนวนมากดูประวัติคำถามหากคุณสนใจ)


คำตอบ:


280

ฉันรู้ว่าคำถามนี้ได้รับการตอบในขณะที่ผ่านมา แต่หลังจากอ่านมันฉันอาจช่วยเพิ่มตัวอย่างของคำสั่งสาขา git svn เฉพาะและเกี่ยวข้องกับเวิร์กโฟลว์ทั่วไป

เช่นเดียวกับ KCH git svn branchตอบการใช้งาน นี่เป็นตัวอย่างแบบเต็ม (หมายเหตุ-nสำหรับการทดสอบแบบแห้ง):

git svn branch -n  -m "Branch for authentication bug" auth_bug

ถ้าเป็นไปได้ดีเซิร์ฟเวอร์ตอบกลับพร้อมคำตอบดังนี้:

กำลังคัดลอกhttps://scm-server.com/svn/portal/trunkที่ r8914 ไปที่https://scm-server.com/svn/portal/branches/auth_bug ...

และหากไม่มี-nสวิตช์เซิร์ฟเวอร์อาจเพิ่มสิ่งต่อไปนี้:

พบจุดสาขาที่เป็นไปได้: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug , 8914

พบสาขาหลัก: (อ้างอิง / รีโมท / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

ติดตามผู้ปกครองด้วย do_switch

ประสบความสำเร็จในการติดตามผู้ปกครอง r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(refs / รีโมท / auth_bug)

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

git checkout -b local/auth_bug auth_bug

ซึ่งหมายความว่า "ตรวจสอบและสร้างสาขาท้องถิ่นที่มีชื่อauth_bugและทำให้เป็นไปตามสาขาระยะไกล (พารามิเตอร์สุดท้าย)auth_bug

ทดสอบว่าสาขาในพื้นที่ของคุณทำงานบนสาขาระยะไกลนั้นโดยใช้dcommitกับ--dry-run( -n)

git svn dcommit -n

และเซิร์ฟเวอร์ SVN ควรตอบกลับด้วยชื่อสาขาใหม่:

มุ่งมั่นที่จะhttps://scm-server.com/svn/portal/branches/auth_bug ...


2
ใช่คอมไพล์หมายความว่า Jesper ตั้งค่านามแฝงคอมไพล์
Jason Axelson

3
การปรับปรุงและแทนที่git coด้วยgit checkoutเพื่อให้ตัวอย่างเช่นสามารถทำงานสำหรับใคร
Jesper Ronn เซ่น

5
ฉันลงคะแนนไปแล้วคำตอบนี้ แต่ฉันไม่รู้ว่าฉันจะกลับมากี่ครั้ง ขอบคุณ!
Ben Doerr

35
มีส่วนที่ยุ่งยากในการgit-svn branchออกคำสั่ง - คุณจะต้องออนไลน์เพื่อสร้างสาขาใหม่ด้วยวิธีนี้ คุณสามารถทำสิ่งต่อไปนี้ในแบบออฟไลน์: 1. git checkout -b foobar2. แฮ็ค - แฮ็ค - แฮ็ค 3 git commit -m "Done foobar". และเมื่อออนไลน์ผลักดันการเปลี่ยนแปลงนี้โดยทำ 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit.
vadishev

2
git checkout -b foobar-new remotes/foobarดังนั้นแทนที่ด้วยขั้นตอนที่ 2 3. git checkout foobar4. git rebase foobar-new5. เพื่อทดสอบเพื่อให้แน่ใจว่าตอนนี้สาขาผูกพันกับสาขา svn git svn dcommit --dry-run6. ในที่สุดกระทำจริงgit svn dcommit7. ลบสาขา tempgit branch -D foobar-new
jjcf89

64

ตั้งแต่ git v1.6.1 git svn branchมีให้บริการ

จาก git docs:

    สาขา
        สร้างสาขาในที่เก็บ SVN

        -m, - ข้อความ
            ช่วยให้การระบุข้อความกระทำ

        -t, - แท็ก
            สร้างแท็กโดยใช้ tags_subdir แทน Branch_subdir
            ระบุในช่วง git svn init

git รุ่นก่อนหน้าไม่มีวิธีการสร้าง svn branch


4

@kch ฉันเพิ่ง (7 ธันวาคม 2008) รวบรวมแท็ก v1.6.1-rc1 ของ git และมันมีคำสั่งสาขา git svn และเอกสารประกอบสำหรับมัน ดังนั้นการปล่อย v1.6.1 ของคอมไพล์ควร (หวังว่า) มีคำสั่งนี้


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