git-svn: bagaimana cara membuat cabang svn baru melalui git?

193

Saya punya repositori git yang melacak repositori svn. Saya mengkloningnya menggunakan --stdlayout.

Saya membuat cabang lokal baru via git checkout -b foobar

Sekarang saya ingin cabang ini berakhir di …/branches/foobarrepositori svn.

Bagaimana saya melakukannya?

(potongan banyak teks investigasi. lihat riwayat pertanyaan jika Anda peduli)

kch
sumber

Jawaban:

280

Saya tahu pertanyaan ini telah dijawab beberapa waktu yang lalu, tetapi setelah membacanya, saya mungkin membantu menambahkan contoh perintah cabang git svn tertentu dan menghubungkannya dengan alur kerja yang khas.

Seperti jawab kch, gunakan git svn branch. Berikut ini adalah contoh lengkapnya, (perhatikan -nuntuk uji coba kering):

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

Jika ini berjalan dengan baik, server membalas dengan jawaban seperti ini:

Menyalin https://scm-server.com/svn/portal/trunk di r8914 ke https://scm-server.com/svn/portal/branches/auth_bug ...

Dan tanpa -nsaklar server mungkin menambahkan sesuatu seperti:

Ditemukan titik cabang yang memungkinkan: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug , 8914

Ditemukan induk cabang: (refs / remote / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Mengikuti induk dengan do_switch

Berhasil mengikuti induk r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(ref / remote / auth_bug)

Bagian terbaiknya, sekarang Anda dapat membuat cabang lokal berdasarkan cabang jarak jauh Anda seperti:

git checkout -b local/auth_bug auth_bug

Yang berarti "memeriksa dan membuat cabang lokal bernama auth_bugdan membuatnya mengikuti cabang jarak jauh (parameter terakhir)auth_bug

Uji bahwa cabang lokal Anda berfungsi pada cabang jarak jauh itu dengan menggunakan dcommitdengan --dry-run( -n):

git svn dcommit -n

Dan server SVN harus membalas dengan nama cabang baru:

Berkomitmen untuk https://scm-server.com/svn/portal/branches/auth_bug ...

Jesper Rønn-Jensen
sumber
2
Ya, git co berarti bahwa Jesper membuat alias git.
Jason Axelson
3
diperbarui dan diganti git codengan git checkoutsehingga contoh tersebut dapat bekerja untuk siapa saja
Jesper Rønn-Jensen
5
Saya sudah memilih jawaban ini, tetapi saya tidak tahu berapa kali saya kembali. Terima kasih!
Ben Doerr
35
Ada bagian yang sulit dalam git-svn branchperintah - Anda harus online untuk membuat cabang baru dengan cara ini. Anda dapat melakukan hal berikut secara offline: 1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".. Dan ketika online dorong perubahan ini dengan melakukan 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit..
vadishev
2
Jadi gantilah langkah 2 dengan git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Untuk menguji untuk memastikan cabang sekarang berkomitmen untuk cabang svn. git svn dcommit --dry-run6. Akhirnya benar-benar melakukan git svn dcommit7. Hapus cabang tempgit branch -D foobar-new
jjcf89
64

pada git v1.6.1, git svn branchtersedia.

Dari git docs:

    cabang
        Buat cabang di repositori SVN.

        -m, - pesan
            Memungkinkan untuk menentukan pesan komit.

        -t, --tag
            Buat tag dengan menggunakan tag_subdir alih-alih branch_subdir
            ditentukan selama git svn init.

Versi git sebelumnya tidak menyediakan cara untuk membuat cabang svn.

kch
sumber
4

@kch Saya baru saja (7 Desember 2008) mengkompilasi tag git v1.6.1-rc1 dan berisi perintah cabang git svn dan dokumentasi untuknya. Jadi rilis v1.6.1 dari git seharusnya (semoga) berisi perintah ini.

Bryan J Swift
sumber
memang, saya menginstal 1.6.1 sekarang dan perintah tersedia. memperbarui jawaban saya sesuai.
kch