GitHub projesinden belirli taahhütler nasıl alınır?


151

Facebook API'yı GitHub'dan indirmem gerekiyor . Normalde, en son kaynak kodunu indirmek için sadece 'İndirilenler' sekmesine tıklıyorum.Bu durumda, daha eski bir işleme ihtiyacım var: 91f256424531030a454548693c3a6ca49ca3f35a , ancak tüm projeyi bu işlemden nasıl alacağımı bilmiyorum ...

Birisi bana bunu nasıl yapacağımı söyleyebilir mi?

(BTW, bir mac im. Bunun herhangi bir fark yaratıp yaratmadığını bilmiyorum).


1
ayrıca "sıkıştırılmış-anlık görüntü koduna" "yalnızca" ihtiyacınız varsa lütfen stackoverflow.com/questions/13636559/… adresine bakın .
Jean Fontaine

Yanıtlar:


216

İlk olarak, depoyu git kullanarak klonlayın, örneğin:

git clone git://github.com/facebook/facebook-ios-sdk.git

Bu, deponun tüm geçmişini indirir, böylece herhangi bir sürüme geçebilirsiniz. Ardından, yeni klonlanan depoya geçin:

cd facebook-ios-sdk

... ve git checkout <COMMIT>doğru taahhüde geçmek için kullanın :

git checkout 91f25642453

Artık bir dalda olmadığınız ve doğrudan belirli bir sürüme geçtiğiniz için bu size bir uyarı verecektir. (Bu "müstakil HEAD" durumu olarak bilinir.) Aktif olarak geliştirmek yerine sadece bu SDK'yı kullanmak istiyormuşsunuz gibi göründüğü için, öğrenmek istemediğiniz sürece endişelenmeniz gereken bir şey değildir. git'in nasıl çalıştığı hakkında daha fazla bilgi.


4
Bu noktada git exportsadece dosyaları istiyorsanız da yapabilirsiniz .
Xeoncross

1
git checkout -q <commit#>git çıkış sırasında uyarı stderr susturur.
Manavalan Gajapathy

Ben git ödeme 441b034635240bc873700473af3e98533e94a0b5 yaptığınızda, bu bir hata veriyor: ölümcül: Referans bir ağaç değildir: 441b034635240bc873700473af3e98533e94a0b5
böas

135

Bu soruyu gönderirken orada olup olmadığını bilmiyorum, ancak bir taahhüt indirmenin en iyi ve en kolay yolu, bir depoyu görüntülerken komisyonlar sekmesine tıklamaktır . Yerine işlemek adını tıklayarak bir Ardından tıklayın geçmişi bu noktasında Göz depo ile düğmeye <> taahhüt adı / mesajın sağ tarafına sembolü ve nihayet üzerinde İndirme Posta tıkladığınızda gelen düğme Klon veya Yükle düğmesi.

Umarım size yardımcı olur beyler.


3
Github'un bir geçmişi olan ancak "resmi" git zaman çizelgesinden silinen taahhütler olan "kayıp taahhütleri" kurtarmanın tek yolu budur. Bunu kullanarak, unutulmaya dayanan bir taahhüdün zip bir anlık görüntüsünü alabilir, bu taahhüdü yeni bir şubeye itebilir, bu şubeyi mevcut bir repoya getirebilir ve kirazın varlığına geri alabilirsiniz.
Ajax

@Ajax Bu doğru değil. Hala sha kullanarak alabilirsiniz git reflogve sonra müstakil taahhüt ödeme
Aaron Brager

@AaronBrager emin, reflog işe yarayacak, eğer başlangıçta taahhüt vardı aynı makinede iseniz. OP zaten taahhüdü biliyor, bu yüzden reflog'a ihtiyaç duymayacaklar ve sadece doğrudan ödeme yapabilirler. Ancak, yerel olarak taahhütte bulunmadığınız vakalardan bahsediyorum ve hala kamusal repoda olan herhangi bir dalda değil. Bu durumlarda, github, söz konusu taahhüdü kurtarmak için zip olarak indirebileceğiniz taahhüdün bir kaydına sahip olabilir.
Ajax

@Ajax Ah, açıklama için teşekkürler. Alternatif olarak, GitHub API'sine ( api.github.com/repos/facebook/facebook-ios-sdk/events ) vurabilir ve yetim kalan taahhütten bir şube oluşturabilirsiniz ( buradaki talimatlar )
Aaron Brager

Çok hoş. +1 Github'ın reflogunu böyle sorgulayabileceğini bilmiyordum!
Ajax

27

Sivan GIF resim açıklamasını buraya girin

1.Github'da taahhütlere tıklayın

2.Her bir taahhüdün sağ tarafındaki Kodlara göz at'ı seçin

3.Bu taahhüt noktasında kaynak kodunu indirecek olan indirme zipini tıklayın


Merhaba suraj, lütfen ekranınızın gifini nasıl yarattığınızı söyleyebilir misiniz?
Rahul Satal

Ekranın bir videosunu kaydetmek için hızlı zaman oynatıcısını kullanın.Herhangi bir aracı kullanarak videoyu gif'e dönüştürün.Google it. @ Rahul Satal
Suraj K Thomas

1
@SurajKGif için hediyeler
Sivan

10

Sadece 7 haneli SHA1 kısa formunu kullanarak bir taahhüt indirmek için:

Çalışma Örneği:

https://github.com/python/cpython/archive/31af650.zip  

Açıklama:

 `https://github.com/username/projectname/archive/commitshakey.zip`

Uzun karma anahtarınız varsa 31af650ee25f65794b75d4dfefed6fe4758781c1, ilk 7 karakteri elde edin 31af650. GitHub için varsayılan değerdir.


8

Kayıp bir taahhüdü kurtarmanın en kolay yolu (yalnızca yerel olarak değil github'da var olan) bu taahhüdü içeren yeni bir dal oluşturmaktır.

  1. Taahhüdü açık tutun (url gibi: github.com/org/repo/commit/long-commit-sha)
  2. Sağ üstteki "Dosyalara Gözat" ı tıklayın
  3. Sol üstteki "Ağaç: kısa sha ..." açılır menüsünü tıklayın
  4. Yeni bir şube adı yazın
  5. git pull yeni şube yerel

Bu cevap kabul edilenden daha geneldir. İstediğim taahhüdün zaten ana dalda ortadan kalktığı bu durumla karşılaştım ve Github varolmayan dallardaki her taahhütte bulunmayacak. Dolayısıyla bu yaklaşım, Github'a bağlılıktan yeni bir dal oluşturacak ve çekilebilir hale getirecektir.
Qi Luo

Bu, PR yaptığım silinen bir çataldan bir taahhüdü (orijinal SHA bozulmamış olarak) kurtarmama izin verdi. Yeni bir çatal oluşturduktan sonra, yukarı yönlü repoda PR taahhüdünü açtım ve "dosyalara göz at" yaptım. Daha sonra bu URL'yi kopyaladım ve kullanıcı adını kendi adımla değiştirdim. Ardından Ağaç: açılır menüsünü tıklayıp çatalımda yeni bir dal oluşturdu. Harika çalıştı!
Allen Luce

2

Soru başlığı belirsiz.


1

Kabul edilen cevaba ek olarak:

Önerilen komutları görmek için "git checkout hash " komutunu kullanmanız gerekir git log. Ancak, neye ihtiyacınız olduğuna bağlı olarak, karmaları kopyalamak / yapıştırmaktan daha kolay bir yol vardır.

git log --onelineTamamlanan birçok mesajı daha sıkıştırılmış bir biçimde okumak için kullanabilirsiniz .

Diyelim ki bu, minimum bilgi ve yalnızca kısmen görünür karma değerlere sahip taahhütlerin tek satırlık bir listesini görüyorsunuz:

hash111 (HEAD -> master, origin/master, origin/HEAD)
hash222 last commit
hash333 I want this one
hash444 did something
....

İsterseniz last commitkullanabilirsiniz git checkout master^. ^Eğer taahhüt verir önce usta. Yani hash222.

Eğer n'inci son taahhüdü istiyorsanız, kullanabilirsiniz git checkout master~n. Örneğin, kullanmak git checkout master~2size taahhüt verir hash333.


0

Taahhütlerde gezinmek yerine , geçerli revizyon / taahhüt için "kalıcı bağlantı" almak için ytuşa ( Github Yardım , Klavye Kısayolları ) da basabilirsiniz .
Bu, URL'yi https://github.com/<user>/<repository>(ana / HEAD) olarak değiştirir https://github.com/<user>/<repository>/tree/<commit id>.

Belirli bir taahhüdü indirmek için sayfayı o URL'den yeniden yüklemeniz gerekir, böylece Clone or Downloaddüğme https://github.com/<user>/<repository>/archive/<commit id>.zip en son yerine "anlık görüntüyü" gösterir https://github.com/<user>/<repository>/archive/master.zip.


0

Aşağıdaki komut dizisini deneyin:

$ git fetch origin <copy/past commit sha1 here>
$ git checkout FETCH_HEAD
$ git push origin master

-1

Herhangi bir kesin taahhüde geçmek veya herhangi bir kesin taahhüdü kodlamak istiyorsanız aşağıdaki komutu kullanabilirsiniz:

git checkout <BRANCH_NAME>
git reset --hard  <commit ID which code you want>
git push --force

Misal:

 git reset --hard fbee9dd 
 git push --force

2
Bu tehlikeli, repo klonlamak ve bir sürüm ödeme daha mantıklı
user1767754
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.