Melanjutkan klon git-svn

117

Saya mulai mengkloning repositori SVN menggunakan operasi kloning git-svn. Setelah sekitar 6 jam mengimpor (ini adalah repo besar), komputer saya pergi dan meniduri saya. Adakah cara untuk melanjutkan operasi tanpa mengulangi semua pekerjaan awal?

Brandon Yarbrough
sumber

Jawaban:

156

The git svn fetchperintah untuk melanjutkan git svn clonedikonfirmasi oleh beberapa sumber:

(Kebetulan, jika selama langkah klon awal koneksi Anda mati atau Anda perlu menghentikannya maka untuk melanjutkan klon Anda hanya perlu menjalankan perintah di atas untuk melanjutkan mengunduh riwayat).

Sepertinya ada kebocoran memori git-svn. Ukuran git-svnproses tumbuh perlahan dan setelah sekitar dua minggu ukurannya menjadi 1,2 GB, di mana OS menolak untuk membiarkannya bercabang.
Masalahnya, ini adalah berkah terselubung.
Saya dapat melanjutkan klon yang terputus dengan " git svn fetch" sederhana , dan itu berjalan lebih cepat dengan heap yang sekarang jauh lebih kecil.
Ini, bekerja dengan sangat baik, pada kenyataannya, saya terbiasa menyela dan memulai kembali proses tersebut setiap malam dan setiap pagi. Beberapa hari kemudian selesai.

Anda memulai petualangan Anda dengan git-svnmenggandakan repositori Subversion yang ada:

git svn clone url://path/to/repo -s

The -sbendera mengasumsikan bahwa repositori Anda menggunakan "batang, cabang, tags" konvensi. Jika tidak, Anda harus menentukan secara manual direktori mana yang mewakili cabang dan tag, jika Anda ingin Git mengetahuinya.

Ini akan memakan waktu lama, karena akan mengambil setiap revisi dari SVN dan melakukan secara lokal. Jika karena alasan apa pun itu berhenti, Anda dapat melanjutkan dengan git svn fetch.

VonC
sumber
1
Saya pikir beberapa opsi baris perintah yang disediakan git svn clonejuga perlu disediakan (sebagaimana berlaku) untuk git svn fetch. Misalnya, saya telah menetapkan -r HEADuntuk git svn clonehanya mendapatkan revisi HEAD SVN. Untuk melanjutkan, saya menjalankan git svn fetch, yang mulai mengimpor semua revisi.
amolbk
Ini memulai semuanya dari revisi pertama .... Saya memiliki 10.000 komitmen! Adakah pemikiran tentang cara melanjutkan dari tempat terakhirnya?
Nathan JB
@ NathanJ.Brauer tidak di atas kepala saya. Anda dapat mengajukan pertanyaan baru (dengan menggunakan OS, versi git dan versi svn, dan tautan kembali ke jawaban ini untuk konteksnya)
VonC
1
Saya secara tidak sengaja mematikan koneksi jaringan saya selama git svn clone, mengganggu proses tersebut. Berjalan git svn clonelagi tampaknya melanjutkan klon yang sedang berlangsung. Ada lagi yang melakukan ini?
Kehlan Krumme
1
@Kehlan Rupanya begitu, jika Anda mempertimbangkan jawaban zan-xhip di bawah ini
VonC
17

Saya menemukan sebuah posting blog yang memberikan apa (saya harap) adalah jawaban yang benar.

Rupanya, menjalankan git svn fetchsecara efektif menyelesaikan operasi klon. Ini harapannya!

Brandon Yarbrough
sumber
7
Anda harus menggunakan git svn rebasesetelah pengambilan untuk menyelesaikan operasi dan memiliki cabang utama yang mencerminkan bagasi
Romuald Brunet
Bisakah Anda memberikan tautan ke entri blog untuk referensi di masa mendatang?
jmanning2k
6

Seperti yang dikatakan VonC, CaptainAwesomePants dan Archi git svn fetchmelakukan triknya. Saya melakukan git svn clone url... --authors-file=path/to/filedan klon gagal karena salah satu penulis tidak ada di file penulis. Saya menambahkan penulis ke file dan menjalankannya git svn fetchdan melanjutkan dari tempat ia tinggalkan dan melihat git log nanti, tampaknya ia menggunakan penulis yang baru ditambahkan untuk menggantikan nama penulis komit jadi semuanya manis.

Tom Saleeba
sumber
5

Dari setidaknya git 2.1.0 Anda dapat melanjutkan hanya dengan menerbitkan ulang git svn clone

Namun ini akan menduplikasi beberapa entri di .git / config Anda menghapusnya dan semuanya akan baik-baik saja

zan-xhipe
sumber
From at least git 2.1.0...Adakah ide jika fitur ini ada di git 1.9.1?
CivFan
Maaf, saya tidak lagi memiliki repositori svn untuk mencoba ini.
zan-xhipe
git svn fetchmenyebabkan ketidakcocokan checksum untuk saya - dan tidak mungkin untuk disetel ulang karena tampaknya tidak ada HEAD: / - tetapi ini berfungsi dengan baik, hanya harus menghapus svn-remote.fetchdari.git/config
OLL