Masalah
Bagaimana Anda membuat salinan dangkal dengan git-svn dari repositori Subversion, misalnya bagaimana Anda hanya menarik tiga revisi terakhir?
The git clone
perintah bisa mendapatkan n revisi terakhir dari repositori Git jika Anda menggunakan opsi --depth
, yaitu Anda mendapatkan salinan dangkal repositori. Contoh:
git clone --depth 3 git://some/repo myshallowcopyrepo
Apakah ada opsi serupa untuk git-svn?
Penemuan saya sejauh ini
Sejauh ini saya hanya menemukan -rN
opsi di mana N
revisi untuk menarik. Contoh:
git svn clone -rN svn://some/repo
Menurut dokumentasi ada kemungkinan untuk digunakan -r$REVNUMBER:HEAD
. Saya mencoba yang berikut ini untuk mendapatkan 3 revisi terakhir yang mengembalikan pesan kesalahan.
$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn
Jadi saya diganti HEAD~3
dengan angka aktual revisi ketiga tetapi revisi 534. Itu berhasil, tetapi itu mengharuskan saya untuk mencari tahu dulu angka revisi dari komit ketiga tetapi terakhir.
$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Dokumentasi
-s is for --stdlayout which presumes the svn recommended layout for tags, trunk, and branches.
(tetapi tidak berhasil untuk saya)--depth
untukgit svn
, karena dukungan yang sudah ada. Dan itu sudah harus mencari tahu rev terbaru dari server?Jawaban:
Anda telah menemukan cara paling sederhana untuk menentukan klon dangkal di Git-SVN, dengan menentukan nomor revisi SVN yang ingin Anda mulai klon di (
-r$REV:HEAD
).Sebagai contoh:
git svn clone -s -r1450:HEAD some/svn/repo
Struktur data Git didasarkan pada petunjuk dalam grafik asiklik terarah (DAG), yang membuatnya sepele untuk berjalan dengan
n
komit. Tetapi di SVN (dan karenanya di Git-SVN) Anda harus menemukan nomor revisi sendiri.sumber
git-svn
pengarah jarak jauh di tempat yang sama dan menggunakangit-svn fetch
untuk mendapatkan lebih banyak pohon. Pada titik itu Anda harus menggunakangit filter-branch
untuk mereparasi pohon tua (sebagian) ke cabang kanan.n
melakukan ...Saya menemukan diri saya sering menggunakan yang berikut ini untuk mendapatkan sejumlah revisi dari pohon subversi kami yang besar (kami akan segera mencapai svn revisi 35000).
Dan cara yang baik untuk mengetahui di mana cabang dimulai adalah dengan melakukannya
svn log
dan menemukan yang pertama di cabang (yang terakhir terdaftar saat melakukan):Sejauh ini saya belum benar-benar menemukan kesulitan dalam melacak semua cabang. Butuh terlalu banyak waktu untuk mengkloning dan svn dan git tidak bekerja bersama sebaik yang saya inginkan. Saya cenderung membuat file tambalan dan menerapkannya pada klon git dari cabang svn lain.
sumber
cherry-pick
/ direbase
antaranya. Komit mengambil langkah ekstra (push
, kemudiandcommit
dari repo jarak jauh), tapi saya pikir itu layak untuk tradeoff.... 7 tahun kemudian, di padang pasir, pukulan tumbleweed oleh ...
Saya tidak puas dengan jawaban yang diterima sehingga saya membuat beberapa skrip untuk melakukan ini untuk Anda yang tersedia di Github . Ini harus membantu siapa saja yang ingin menggunakan
git svn clone
tetapi tidak ingin mengkloning seluruh repositori dan tidak ingin berburu untuk revisi tertentu untuk dikloning di tengah sejarah (mungkin Anda mengkloning sekelompok repo). Di sini kita bisa mengkloning revisi N terakhir:Gunakan
git svn clone
untuk mengkloning 50 revisi terakhirTemukan revisi N sebelumnya dari repo SVN
sumber