Bilgisayarımda klonlamadan uzak bir Git reposundan yalnızca belirli bir işlemi almanın bir yolu var mı? Uzak deponun yapısı benimkiyle tamamen aynı ve bu nedenle herhangi bir çakışma olmayacak, ancak bunu nasıl yapacağım hakkında hiçbir fikrim yok ve o büyük depoyu klonlamak istemiyorum.
Git'te yeniyim, herhangi bir yolu var mı?
Yalnızca bir kez klonlama yaparsınız, bu nedenle uzak deponun bir klonuna zaten sahipseniz, ondan çekmek her şeyi tekrar indirmeyecektir. Sadece hangi dalı çekmek istediğinizi belirtin veya değişiklikleri getirin ve istediğiniz commit'i kontrol edin.
Yeni bir depodan getirmek, yalnızca sahip olmadığınız değişiklikleri indireceği için bant genişliği açısından çok ucuzdur. Git'in minimum yük ile doğru şeyi yapması açısından düşünün.
Git her şeyi .git
klasöründe saklar. Bir commit tek başına getirilemez ve saklanamaz, tüm atalarına ihtiyacı vardır. Onlar birbiriyle ilişkilidir.
Ancak indirme boyutunu azaltmak için git'ten yalnızca belirli bir dal veya işlemle ilgili nesneleri getirmesini isteyebilirsiniz:
git fetch origin refs/heads/branch:refs/remotes/origin/branch
Bu, yalnızca uzak dal branch
(ve yalnızca sizin kaçırdıklarınız) içinde bulunan komutları indirecek ve origin/branch
içinde saklayacaktır. Daha sonra birleştirebilir veya kontrol edebilirsiniz.
Yalnızca SHA1 işlemesi de belirtebilirsiniz:
git fetch origin 96de5297df870:refs/remotes/origin/foo-commit
Bu, yalnızca belirtilen SHA-1 96de5297df870 commit'ini (ve kaçırdığınız atalarını) indirecek ve (mevcut olmayan) uzak dal origin/foo-commit
olarak saklayacaktır.
Git depomda bir çekme işlemi yaptım:
git pull --rebase <repo> <branch>
Git'in dal için tüm kodu çekmesine izin verdim ve sonra beni ilgilendiren işleme sıfırlamaya gittim.
git reset --hard <commit-hash>
Umarım bu yardımcı olur.
Uzak bir deponun tek bir commit'ini şu şekilde getirebilirsiniz
git fetch <repo> <commit>
Nerede?
<repo>
bir uzak repo adı (örneğin origin
) veya hatta bir uzak repo URL'si (örneğin https://git.foo.com/myrepo.git
) olabilir<commit>
SHA1 commit olabilirörneğin
git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545
commit'i (ve eksik ataları) getirdikten sonra basitçe şu şekilde kontrol edebilirsiniz
git checkout FETCH_HEAD
Bunun sizi "ayrılmış kafa" durumuna getireceğini unutmayın.