Mengimpor Repo SVN ke repo Git yang ADA sebagai cabang

Saat ini saya punya proyek di kode Google yang ingin saya masukkan ke dalam proyek di Github.

Masalahnya adalah proyek SVN pada dasarnya hanyalah folder dari proyek yang lebih besar di github, jadi saya rasa saya tidak bisa menggunakan git-svn untuk ini.

Saya berasumsi saya dapat menggunakan git svn untuk mengkloning proyek, tetapi saya tidak yakin bagaimana cara mencangkokkan proyek svn ke proyek git yang ada dengan benar.

Hasil yang diinginkan adalah memasukkan riwayat SVN ke dalam cabang Git (bukan mencangkokkannya ke master).

Mampu melakukan dcommit kembali ke svn sebenarnya tidak diperlukan (jika itu membantu).

SELESAI

Saya akhirnya menggunakan saran just_doug, tetapi dengan beberapa modifikasi kecil:

1: Saya menggunakan saran dari http://ivanz.com/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/ untuk menambahkan kode Google sebagai referensi jarak jauh

2: Saya membuat cabang baru dari master untuk cabang jarak jauh yang saya inginkan

3: Saya menggunakan

git merge - milik kami --no-commit googlecode-remote

untuk menggabungkan keduanya

4: Saya kemudian menggunakan

git read-tree --prefix=folder1/folder2/ -u googlecode-remote

untuk membaca di riwayat penggabungan dan rebase ke subfolder yang diinginkan

semoga ini membantu seseorang dalam situasi yang sama;)


person Alex B.    schedule 31.03.2011    source sumber


Jawaban (1)


Saya belum pernah menggunakannya sebelumnya, tapi sepertinya Anda ingin strategi penggabungan subpohon. Artikel ini berisi lebih banyak detail tentang cara menggunakannya.

Pada dasarnya, Anda menambahkan repositori SVN sebagai remote, lalu menggunakan perintah git read-tree untuk "mencangkokkannya" sebagai subdirektori dari repositori git murni Anda. Bergantung pada bagaimana Anda ingin riwayat ditampilkan, Anda dapat melakukan git merge -s subtree untuk menggabungkannya ke dalam cabang pure-git Anda (komit git-svn dipertahankan) atau Anda dapat mengikuti langkah-langkah di tautan kedua dan menambahkan tanda --squash dan --no-commit dan buat penggabungan muncul sebagai komit tunggal di cabang pure-git.

Instruksi mengasumsikan bahwa remote juga merupakan git repo. Jika repo lokal dibuat dengan git dan bukan git-svn, tidak yakin seberapa baik hasilnya. Ini semacam kludge, tapi berikut beberapa skrip untuk membuat repositori perantara yang hanya mencerminkan repo SVN di git. Dengan cara ini, Anda dapat membuat mirror git-svn dari repo svn, dan menambahkan ini sebagai remote dan instruksi di atas akan berfungsi seperti yang dijelaskan.

person just_doug    schedule 31.03.2011