I'm mencoba untuk mencari tahu bagaimana saya dapat men-download tag tertentu dari sebuah repositori Git - it's salah satu versi di belakang versi saat ini.
Saya melihat ada tag untuk versi sebelumnya pada git halaman web, dengan nama objek dari sesuatu yang lama nomor hex.
Tapi versi nama "Tag rilis 1.1.5
" menurut situs.
Saya mencoba perintah seperti ini (dengan nama yang berubah):
git clone http://git.abc.net/git/abc.git my_abc
Dan aku tidak mendapatkan sesuatu - sebuah direktori, sekelompok subdirektori, dll.
Jika itu's seluruh repositori, bagaimana saya mendapatkan versi I'm mencari? Jika tidak, bagaimana saya download yang versi tertentu?
$ git clone
akan memberikan anda seluruh repositori.
Setelah clone, anda bisa daftar dengan tag $ git tag -l
dan kemudian checkout tertentu tag:
$ git checkout tags/<tag_name>
Bahkan lebih baik, checkout dan membuat cabang (jika tidak, anda akan berada di cabang bernama setelah revisi jumlah tag):
$ git checkout tags/<tag_name> -b <branch_name>
git clone --branch my_abc http://git.abc.net/git/abc.git
Akan clone repo dan meninggalkan anda di tag anda tertarik.
Dokumentasi untuk 1.8.0 dari git clone serikat.
--cabang juga dapat menggunakan tag dan melepaskan KEPALA yang berkomitmen dalam menghasilkan repositori.
Untuk memeriksa hanya tag yang diberikan untuk penyebaran, saya gunakan misalnya:
git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git
Hal ini tampaknya menjadi cara tercepat untuk memeriksa kode dari remote repositori jika hanya memiliki satu bunga yang paling baru-baru ini kode bukan di repositori. Dengan cara ini, menyerupai 'svn co' perintah.
Catatan: Per Git manual, lewat --kedalaman
bendera menyiratkan - single-cabang
secara default.
--kedalaman
Membuat dangkal clone dengan sejarah yang terpotong untuk jumlah tertentu melakukan. Menyiratkan --single-cabang kecuali --no-tunggal-cabang diberikan untuk mengambil sejarah yang dekat dengan ujung dari semua cabang. Jika anda ingin clone submodul dangkal, juga lulus --dangkal-submodul.
I'm tidak git ahli, tapi saya pikir ini harus bekerja:
git clone http://git.abc.net/git/abc.git
cd abc
git checkout my_abc
ATAU
git clone http://git.abc.net/git/abc.git
cd abc
git checkout -b new_branch my_abc
Variasi kedua menetapkan cabang baru berdasarkan tag, yang memungkinkan anda menghindari 'terpisah KEPALA'. (git checkout manual)
Setiap git repo berisi seluruh sejarah revisi, sehingga kloning repo memberikan anda akses ke terbaru komit, ditambah segala sesuatu yang datang sebelum, termasuk tag anda're looking for.
Anda dapat menggunakan git arsip untuk men-download tar bola untuk diberikan tag atau id commit:
git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar
Anda juga dapat mengekspor zip arsip tag.
git tag
0.0.1 0.1.0
git arsip -o /tmp/my-repo-0.1.0.zip --prefix=saya-repo-0.1.0/ 0.1.0
Gunakan - single-cabang
switch (tersedia sebagai Git 1.7.10). Sintaksnya adalah:
git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>]
Misalnya:
git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5
Manfaat: Git akan menerima benda-benda dan (harus) menyelesaikan delta untuk ditentukan cabang/tag hanya - sementara memeriksa jumlah yang sama persis dari file! Tergantung pada sumber repositori, ini akan menghemat banyak ruang disk. (Plus, it'akan jauh lebih cepat.)
pertama mengambil semua kategori yang spesifik remote
git fetch <remote> 'refs/tags/*:refs/tags/*'
atau hanya cukup ketik
git fetch <remote>
Kemudian memeriksa untuk tag yang tersedia
git tag -l
kemudian beralih ke tag yang spesifik menggunakan perintah di bawah ini
git checkout tags/<tag_name>
Berharap ini akan membantu anda!
Jika anda kategori yang diurutkan menggunakan linux semacam
perintah, gunakan ini:
git tag | sort -n | tail -1
misalnya. jika git tag
kembali:
v1.0.1
v1.0.2
v1.0.5
v1.0.4
git tag | sort-n | tail -1
akan output:
v1.0.5
git tag | sort-n | -2 ekor | head -1
akan output:
v1.0.4
(karena anda bertanya untuk yang kedua terbaru tag)
untuk checkout tag, pertama clone repo, maka ketik:
git checkout v1.0.4
..atau tag apa pun yang anda butuhkan.
git fetch <gitserver> <remotetag>:<localtag>
===================================
Saya hanya melakukan ini. Pertama saya membuat yakin aku tahu nama tag ejaan.
git ls-remote --tags gitserver; : or origin, whatever your remote is called
Ini memberi saya daftar kategori di git server untuk memilih dari. Asli poster sudah tahu tag-nya's nama jadi langkah ini tidak diperlukan bagi semua orang. Output tampak seperti ini, meskipun sebenarnya daftar itu lagi.
8acb6864d10caa9baf25cc1e4857371efb01f7cd refs/tags/v5.2.2.2
f4ba9d79e3d760f1990c2117187b5010e92e1ea2 refs/tags/v5.2.3.1
8dd05466201b51fcaf4ca85897347d82fcb29518 refs/tags/Fix_109
9b5087090d9077c10ba22d99d5ce90d8a45c50a3 refs/tags/Fix_110
Aku memilih tag yang saya inginkan dan mengambil itu dan tidak lebih sebagai berikut.
git fetch gitserver Fix_110
Saya kemudian tagged ini pada mesin lokal, memberikan tag nama yang sama.
git tag Fix_110 FETCH_HEAD
Aku't ingin clone remote repositori sebagai orang lain telah menyarankan untuk melakukan, sebagai proyek yang saya kerjakan adalah besar dan saya ingin berkembang di lingkungan yang bersih. Saya merasa ini lebih dekat ke asli pertanyaan "aku'm mencoba untuk mencari tahu bagaimana cara download TAG TERTENTU" dari larutan yang menunjukkan kloning seluruh repositori. Saya don't melihat mengapa orang harus memiliki salinan dari Windows NT dan Windows 8.1 kode sumber jika mereka ingin melihat DOS 0.1 kode sumber (misalnya).
Saya juga tidak't ingin menggunakan CHECKOUT seperti yang orang lain telah menyarankan. Aku punya cabang memeriksa dan tidak't ingin mempengaruhi itu. Niat saya adalah untuk mengambil perangkat lunak yang aku inginkan sehingga aku bisa cherry-pick sesuatu dan menambahkan bahwa untuk perkembangan saya.
Mungkin ada cara untuk mengambil tag itu sendiri bukan hanya salinan melakukan yang ditandai. Saya harus menandai diambil menyerahkan diri. EDIT: Ah ya, saya telah menemukan itu sekarang.
git fetch gitserver Fix_110:Fix_110
Di mana anda melihat usus besar, yang jauh-nama:nama lokal dan di sini mereka adalah nama tag. Ini berjalan tanpa mengganggu kerja pohon dll. Sepertinya untuk menyalin hal-hal dari remote ke komputer lokal sehingga anda memiliki salinan anda sendiri.
git fetch gitserver --dry-run Fix_110:Fix_110
dengan-kering-pilihan run menambahkan akan membiarkan anda melihat apa perintah yang akan dilakukan, jika anda ingin memverifikasi apa yang anda inginkan. Jadi saya kira sederhana
git fetch gitserver remotetag:localtag
adalah jawaban nyata.
=
Catatan terpisah tentang tag ... Ketika aku memulai sesuatu yang baru biasanya saya tag kosong repositori setelah git init, sejak
git rebase -i XXXXX
membutuhkan komit, dan timbul pertanyaan "bagaimana anda rebase perubahan yang mencakup perangkat lunak pertama yang berubah?" Jadi ketika saya mulai bekerja saya lakukan
git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY
yaitu membuat komit sebelum saya pertama perubahan yang nyata dan kemudian menggunakan
git rebase -i EMPTY
jika saya ingin rebase semua pekerjaan saya, termasuk perubahan pertama.
Aku memeriksa git checkout dokumentasi, itu mengungkapkan satu hal yang menarik:
git checkout -b <new_branch_name> <start_point> , di mana <start_point> adalah nama dari sebuah komitmen di mana untuk memulai cabang baru; Default untuk KEPALA
Jadi kita dapat menyebutkan nama tag( seperti tag adalah apa-apa tapi nama komit) as, mengatakan:
>> git checkout -b 1.0.2_branch 1.0.2
lambat, memodifikasi beberapa file-file
>> git push-tags
P. S: Di Git, anda dapat't update tag secara langsung(karena tag ini hanya label untuk komit), anda harus checkout tag yang sama sebagai cabang dan kemudian berkomitmen untuk itu dan kemudian membuat tag terpisah.
Bekerja dari Peter Johnson's jawaban, saya dibuat sedikit bagus alias untuk diri sendiri:
alias gcolt="git checkout $(git tag | sort -V | tail -1)"
alias 'git checkout terbaru tag'.
Ini bergantung pada GNU versi sort, yang tepat menangani situasi seperti yang lOranger menunjukkan:
v1.0.1
...
v1.0.9
v1.0.10
Jika anda're pada mac, brew install coreutils
dan kemudian memanggil gsort sebaliknya.
Jika anda ingin melihat versi file tag menunjuk ke, anda dapat melakukan git checkout, meskipun hal ini menempatkan repositori anda di "terpisah KEPALA negara", yang memiliki beberapa efek samping sakit:
$ git checkout 2.0.0
Note: checking out '2.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final
$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image
Dalam "terpisah KEPALA negara", jika anda membuat perubahan dan kemudian membuat komit, tag akan tetap sama, tapi anda baru melakukan tidak akan menjadi milik setiap cabang dan akan tercapai, kecuali dengan tepat melakukan hash. Dengan demikian, jika anda perlu untuk membuat perubahan—katakan kau memperbaiki bug pada versi yang lebih tua, misalnya—anda umumnya akan ingin membuat cabang:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
Jika anda melakukan hal ini dan membuat komitmen, anda version2 cabang akan sedikit berbeda dari anda v2.0.0 tag karena itu akan bergerak maju dengan perubahan baru anda, jadi berhati-hatilah.
Aku melakukan ini adalah melalui github API:
curl -H "Authorization: token %(access_token)s" -sL -o /tmp/repo.tar.gz "http://api.github.com/repos/%(organisation)s/%(repo)s/tarball/%(tag)s" ;\
tar xfz /tmp/repo.tar.gz -C /tmp/repo --strip-components=1 ; \