Saya mencoba mencari tahu bagaimana saya bisa mengunduh tag tertentu dari repositori Git - ini satu versi di belakang versi saat ini.
Saya melihat ada tag untuk versi sebelumnya di halaman web git, dengan nama objek dari nomor hex panjang.
Tetapi nama versi " Tagged release 1.1.5
" sesuai dengan situs.
Saya mencoba perintah seperti ini (dengan nama diubah):
git clone http://git.abc.net/git/abc.git my_abc
Dan saya memang mendapatkan sesuatu - direktori, banyak subdirektori, dll.
Jika seluruh repositori, bagaimana cara mendapatkan versi yang saya cari? Jika tidak, bagaimana cara saya mengunduh versi itu?
clone -b "Tagged release 1.1.5" http://git.abc.net/git/abs.git my_abc
. Ini hanya akan berfungsi jika Anda tidak memiliki cabang dengan nama yang sama tentunya (tergantung pada metodologi Anda, ini mungkin tidak pernah terjadi).git checkout -b new-branch tag-name
. Sekarang klon cabang baru Anda. Kapan pun kami mau, kami dapat menghapus cabang baru.Jawaban:
akan memberi Anda seluruh repositori.
Setelah klon, Anda dapat mencantumkan tag dengan
$ git tag -l
dan kemudian checkout tag tertentu:Lebih baik lagi, checkout dan buat cabang (jika tidak, Anda akan berada di cabang yang dinamai dengan nomor revisi tag):
sumber
-b
flag jitu untuk membuat cabang baru dan tentukan nama cabang:git checkout <tag_name> -b <branch_name>
1.8.3.5
dan yang lebih baru,--branch <tag ref>
seharusnya memungkinkan Anda untuk mengunduh repositori mulai dari<tag ref>
sebagai HEAD repo; dikombinasikan dengan--depth 1
akan melakukan checkout tag dangkal. Lihat stackoverflow.com/a/21699307/1695680Akan mengkloning repo dan meninggalkan Anda pada tag yang Anda minati.
Dokumentasi untuk 1.8.0 status klon git .
sumber
--depth 1
untuk menghindari pengunduhan komitmen tidak lancar.git clone --branch my_abc http://git.abc.net/git/abc.git -b quality
kualitas adalah nama cabang yang kita inginkan btw.Untuk memeriksa hanya tag yang diberikan untuk penerapan, saya menggunakan misalnya:
Ini tampaknya menjadi cara tercepat untuk memeriksa kode dari repositori jarak jauh jika seseorang hanya tertarik pada kode terbaru daripada dalam repositori lengkap. Dengan cara ini, ini menyerupai perintah 'svn co'.
Catatan: Per manual Git , melewati
--depth
flag secara tidak langsung berarti--single-branch
.sumber
--depth n
tersirat--single-branch
. Anda tidak perlu keduanya.Saya bukan ahli git, tapi saya pikir ini harus bekerja:
ATAU
Variasi kedua membuat cabang baru berdasarkan tag, yang memungkinkan Anda menghindari 'HEAD terlepas'. (manual git-checkout)
Setiap git repo berisi seluruh riwayat revisi, jadi kloning repo memberi Anda akses ke komit terbaru, ditambah semua yang datang sebelumnya, termasuk tag yang Anda cari.
sumber
git checkout -b b1.5.0 v1.5.0
saat memeriksa versi dalam cabang 'gh-pages' untuk berhasil mendorong ke Halaman Github. Intisari yang saya tulis mungkin dapat membantu orang lain untuk kembali: branch / tag / submodules ... gist.github.com/1064750cd
masukabc/
terlebih dahulu sebelum Anda dapat checkout cabangcd
.Anda dapat menggunakan arsip git untuk mengunduh bola tar untuk tag yang diberikan atau melakukan id:
Anda juga dapat mengekspor arsip zip suatu tag.
Daftar tag:
Ekspor tag:
Catatan:
sumber
git archive
meminta saya kata sandi ketika semua yang ingin saya lakukan adalah mengunduh dari repo publik. Bagaimana saya bisa membuatnya menggunakan http, bukan ssh?fatal: Operation not supported by protocol.
danUnexpected end of command stream
kesalahan. Atau, itu juga dapat mengembalikanfatal: The remote end hung up unexpectedly
kesalahan.Gunakan
--single-branch
sakelar (tersedia pada Git 1.7.10) . Sintaksnya adalah:Sebagai contoh:
Manfaatnya: Git akan menerima objek dan (perlu) menyelesaikan delta hanya untuk cabang / tag yang ditentukan - sambil memeriksa jumlah file yang persis sama! Bergantung pada repositori sumber, ini akan menghemat banyak ruang disk. (Plus, itu akan jauh lebih cepat.)
sumber
pertama-tama ambil semua tag di kendali jarak jauh tertentu
atau cukup ketik saja
Kemudian periksa tag yang tersedia
kemudian beralih ke tag tertentu menggunakan perintah di bawah ini
Semoga ini bisa membantu Anda!
sumber
git tag
akan menambahkan tag sementaragit tag -l
mencantumkan tag yang tersediaJika tag Anda dapat disortir menggunakan
sort
perintah linux , gunakan ini:misalnya. jika
git tag
kembali:git tag | sort -n | tail -1
akan menampilkan:git tag | sort -n | tail -2 | head -1
akan menampilkan:(karena Anda meminta tag terbaru kedua)
untuk checkout tag, klon repo pertama, lalu ketik:
..atau tag apa pun yang Anda butuhkan.
sumber
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags
git checkout `git tag | sort -n | tail -1`
sort -V
sebagai gantinyasort -n
. Yang pertama menangani versi dengan benar, yang tidak harus numerik, misalnya "1.2.3". Ia juga memahami bahwa "0.4.10" muncul setelah "0.4.1" dan bukan setelah "0.4.2" yang-n
akan memberi Anda.Saya memeriksa dokumentasi checkout git , ia mengungkapkan satu hal yang menarik:
Jadi kita dapat menyebutkan nama tag (karena tag tidak lain adalah nama dari sebuah commit), misalnya:
PS: Di Git, Anda tidak dapat memperbarui tag secara langsung (karena tag hanya label untuk komit), Anda perlu checkout tag yang sama dengan cabang dan kemudian komit untuk itu dan kemudian membuat tag terpisah.
sumber
===================================
Saya baru saja melakukan ini. Pertama saya memastikan saya tahu ejaan nama tag.
Ini memberi saya daftar tag pada server git saya untuk dipilih. Poster asli sudah tahu nama tag-nya sehingga langkah ini tidak diperlukan untuk semua orang. Outputnya terlihat seperti ini, meskipun daftar sebenarnya lebih panjang.
Saya mengambil tag yang saya inginkan dan mengambilnya dan tidak lebih sebagai berikut.
Saya kemudian menandai ini di mesin lokal saya, memberi tag saya nama yang sama.
Saya tidak ingin mengkloning repositori jarak jauh seperti yang disarankan orang lain, karena proyek yang saya kerjakan besar dan saya ingin berkembang dalam lingkungan bersih yang bagus. Saya merasa ini lebih dekat dengan pertanyaan awal "Saya mencoba mencari tahu bagaimana cara mengunduh A PARTICULAR TAG" daripada solusi yang menyarankan kloning seluruh repositori. Saya tidak melihat mengapa orang harus memiliki salinan kode sumber Windows NT dan Windows 8.1 jika mereka ingin melihat kode sumber DOS 0.1 (misalnya).
Saya juga tidak ingin menggunakan CHECKOUT seperti yang disarankan orang lain. Saya telah memeriksa cabang dan tidak ingin memengaruhi hal itu. Tujuan saya adalah untuk mengambil perangkat lunak yang saya inginkan sehingga saya bisa memilih sesuatu dan menambahkannya ke pengembangan saya.
Mungkin ada cara untuk mengambil tag itu sendiri daripada hanya salinan komit yang ditandai. Saya harus menandai komit yang diambil sendiri. EDIT: Ah ya, saya sudah menemukannya sekarang.
Di mana Anda melihat titik dua, itu adalah nama-jauh: nama lokal dan di sini mereka adalah nama tag. Ini berjalan tanpa mengganggu pohon yang bekerja dll. Sepertinya menyalin hal-hal dari remote ke mesin lokal sehingga Anda memiliki salinan Anda sendiri.
dengan opsi --dry-run ditambahkan akan membiarkan Anda melihat apa yang akan dilakukan perintah, jika Anda ingin memverifikasi apa yang Anda inginkan. Jadi saya rasa sederhana
adalah jawaban sebenarnya.
=
Catatan terpisah tentang tag ... Ketika saya memulai sesuatu yang baru saya biasanya menandai repositori kosong setelah git init, sejak itu
membutuhkan komit, dan pertanyaan muncul "bagaimana Anda rebase perubahan yang mencakup perubahan perangkat lunak pertama Anda?" Jadi ketika saya mulai bekerja saya lakukan
yaitu membuat komit sebelum perubahan nyata pertama saya dan kemudian digunakan
jika saya ingin rebase semua pekerjaan saya, termasuk perubahan pertama .
sumber
Menolak jawaban Peter Johnson, saya membuat alias kecil yang menyenangkan untuk diri saya sendiri:
alias 'git checkout tag terbaru'.
Ini bergantung pada versi semacam GNU, yang secara tepat menangani situasi seperti yang ditunjukkan oleh lOranger:
Jika Anda menggunakan mac,
brew install coreutils
dan panggil gsort sebagai gantinya.sumber
mencoba:
sumber
Lihat Tag
Jika Anda ingin melihat versi file yang ditunjuk oleh tag, Anda dapat melakukan checkout git, meskipun ini membuat repositori Anda berada dalam status "detached HEAD", yang memiliki beberapa efek samping buruk:
Dalam keadaan "KEPALA terlepas", jika Anda melakukan perubahan dan kemudian membuat komit, tag akan tetap sama, tetapi komit baru Anda tidak akan menjadi milik cabang apa pun dan tidak akan dapat dijangkau, kecuali oleh hash komit yang tepat. Jadi, jika Anda perlu melakukan perubahan — katakanlah Anda memperbaiki bug pada versi yang lebih lama, misalnya — Anda biasanya ingin membuat cabang:
Jika Anda melakukan ini dan membuat komit, cabang versi2 Anda akan sedikit berbeda dari tag v2.0.0 Anda karena itu akan bergerak maju dengan perubahan baru Anda, jadi berhati-hatilah.
sumber
Saya melakukan ini melalui API github:
sumber