Mengambil tertentu komit dari remote repositori Git
Apakah ada cara untuk hanya mengambil satu tertentu melakukan dari jarak jauh Git repo tanpa kloning pada PC saya? Struktur remote repo adalah benar-benar sama seperti yang saya dan oleh karena itu tidak ada't akan ada konflik tapi saya tidak tahu bagaimana untuk melakukan hal ini dan saya don't ingin klon yang besar repositori.
Saya baru git, apakah ada cara lain?
178
9
Dimulai dengan Git versi 2.5+ (Q2 2015), mengambil satu komitmen (tanpa kloning penuh repo) adalah benar-benar mungkin. Lihat melakukan 68ee628 oleh Fredrik Medley (
moroten
), 21 Mei 2015. (Digabung dengan Junio C Hamano --gitster
-- di melakukan a9d3493, 01 Jun 2015) Anda sekarang memiliki konfigurasi baru (di sisi server)Anda dapat menggunakan git kucing-file` perintah untuk melihat bahwa komit telah diambil:
Anda hanya clone sekali, jadi jika anda sudah memiliki sebuah clone dari repositori jauh, menarik dari itu tidak't download semuanya lagi. Hanya menunjukkan apa yang cabang yang ingin anda tarik, atau mengambil perubahan dan pelajari melakukan yang anda inginkan.
Mengambil dari sebuah repositori baru ini sangat murah di bandwidth, karena hanya akan men-download perubahan yang anda don't memiliki. Berpikir dalam hal Git membuat hal yang benar, dengan beban minimum.
Git menyimpan segala sesuatu dalam
.git
folder. Komit dapat't dapat diambil dan disimpan dalam isolasi, itu kebutuhan semua nenek moyangnya. Mereka adalah saling terkait.Untuk mengurangi ukuran download namun anda dapat meminta git untuk mengambil hanya benda-benda yang berkaitan dengan cabang tertentu atau melakukan:
Ini akan men-download hanya melakukan yang terkandung di remote branch
cabang
(dan hanya orang-orang yang anda kehilangan), dan menyimpannya dalamasal/cabang
. Anda kemudian dapat menggabungkan atau checkout.Anda juga dapat menentukan hanya SHA1 melakukan:
Ini akan men-download hanya melakukan yang ditentukan SHA-1 96de5297df870 (dan nenek moyangnya yang anda lewatkan), dan menyimpannya sebagai (tidak ada) cabang terpencil
asal/foo-commit
.Saya melakukan tarik pada saya git repo:
Memungkinkan git untuk menarik semua kode untuk cabang dan kemudian saya pergi untuk melakukan reset atas untuk melakukan yang tertarik padaku.
git reset --hard <commit-hash>
Semoga ini bisa membantu.
Anda hanya dapat mengambil satu melakukan remote repo dengan
di mana,
<repo>
bisa menjadi remote repo nama (misalnyaasal
) atau bahkan remote repo URL (misalnyahttps://git.foo.com/myrepo.git
)<melakukan>
dapat SHA1 melakukanmisalnya
setelah anda mengambil komitmen (dan hilang moyang) anda hanya dapat checkout dengan
Catatan bahwa ini akan membawa anda di "kepala terpisah" negara.
Anda hanya dapat mengambil remote repo dengan:
di mana,
<repo>
bisa menjadi remote repo nama (misalnyaasal
) atau bahkan remote repo URL (misalnyahttps://git.foo.com/myrepo.git
)misalnya:
setelah anda mengambil repos anda dapat menggabungkan melakukan yang anda inginkan (karena pertanyaannya adalah tentang mengambil satu melakukan, bukan merge anda dapat menggunakan cherry-pick untuk memilih hanya satu kali):
<melakukan>
dapat SHA1 melakukanmisalnya:
atau
jika ini terbaru komit yang ingin anda bergabung, anda juga dapat menggunakan FETCH_HEAD variabel :
Akhirnya saya menemukan cara untuk mengkloning tertentu komit menggunakan git cherry-pick. Dengan asumsi anda don't memiliki repositori di lokal dan anda menarik tertentu melakukan dari jarak jauh,
membuat kosong repositori di lokal dan git init
git remote add origin "url-dari-repository"
git fetch asal [ini tidak akan memindahkan file ke lokal anda kerja kecuali anda menggabungkan]
git cherry-pick "Masukkan panjang-melakukan-hash-yang-anda-perlu"
Dilakukan.Dengan cara ini, anda hanya akan memiliki file yang spesifik komit di lokal anda.
Masukkan panjang-melakukan-hash:
Anda bisa mendapatkan ini menggunakan -> git log --cukup=oneline
Ini bekerja terbaik:
nama "temp" apa pun yang anda inginkan...cabang ini mungkin menjadi yatim piatu meskipun
Saya pikir 'git ls-remote' ( http://git-scm.com/docs/git-ls-remote ) harus melakukan apa yang anda inginkan. Tanpa memaksa mengambil atau menarik.
Jika diminta komit dalam tarikan permintaan dari remote repo, anda bisa mendapatkannya dengan ID-nya: