วิธีรับการกระทำที่แน่นอนจากโครงการ GitHub


151

ฉันจำเป็นต้องดาวน์โหลด API Facebook จากGitHub โดยปกติฉันเพียงคลิกที่แท็บ 'ดาวน์โหลด' เพื่อดาวน์โหลดซอร์สโค้ดล่าสุดในกรณีนี้ฉันต้องยอมรับคำสั่งเก่ากว่า: 91f256424531030a454548693c3a6ca49ca3f35aแต่ฉันไม่รู้ว่าจะทำโปรเจคทั้งหมดได้อย่างไร

ใครช่วยได้โปรดบอกวิธีการทำเช่นนี้?

(BTW, im บน mac. ไม่ทราบว่าจะสร้างความแตกต่างใด ๆ )


1
โปรดดูstackoverflow.com/questions/13636559/…หากคุณ "เท่านั้น" ต้องใช้ "zipped-snapshot-code"
Jean Fontaine

คำตอบ:


216

ก่อนอื่นทำการโคลนพื้นที่เก็บข้อมูลโดยใช้ git เช่น with:

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

ที่ดาวน์โหลดประวัติที่สมบูรณ์ของที่เก็บดังนั้นคุณสามารถเปลี่ยนเป็นเวอร์ชั่นใดก็ได้ ถัดไปเปลี่ยนเป็นที่เก็บโคลนใหม่:

cd facebook-ios-sdk

... และใช้git checkout <COMMIT>เพื่อเปลี่ยนการกระทำที่ถูกต้อง:

git checkout 91f25642453

สิ่งนี้จะทำให้คุณได้รับคำเตือนเนื่องจากคุณไม่ได้อยู่ในสาขาอีกต่อไปและเปลี่ยนเป็นเวอร์ชันเฉพาะโดยตรง (สิ่งนี้เรียกว่าสถานะ "ถอดหัว") เนื่องจากฟังดูราวกับว่าคุณต้องการใช้ SDK นี้แทนที่จะพัฒนาอย่างแข็งขันนี่ไม่ใช่สิ่งที่คุณต้องกังวลนอกจากคุณจะสนใจค้นหา เพิ่มเติมเกี่ยวกับวิธีการใช้งานคอมไพล์


4
ณ จุดนี้คุณสามารถgit exportถ้าคุณต้องการไฟล์
Xeoncross

1
git checkout -q <commit#>ปิดเสียงเตือน stderr ระหว่างเช็คเอาต์ git
Manavalan Gajapathy

เมื่อฉันทำ git checkout 441b034635240bc873700473af3e98533e94a0b5 สิ่งนี้ทำให้เกิดข้อผิดพลาด: ร้ายแรง: การอ้างอิงไม่ใช่ต้นไม้: 441b034635240bc873700473af3e98533e94a0b5
ttb

135

ฉันไม่รู้ว่ามันอยู่ที่นั่นเมื่อคุณโพสต์คำถามนี้หรือไม่ แต่วิธีที่ดีที่สุดและง่ายที่สุดในการดาวน์โหลดการคอมมิทคือการคลิกที่แท็บcommitsเมื่อดูที่เก็บ จากนั้นแทนที่จะคลิกที่ชื่อกระทำคลิกที่เรียกดูพื้นที่เก็บข้อมูล ณ จุดนี้ในปุ่มประวัติที่มีสัญลักษณ์<>ทางด้านขวาของชื่อ / ข้อความยืนยันและสุดท้ายก็คือปุ่มดาวน์โหลด ZIPที่มาเมื่อคุณคลิกClone หรือปุ่มดาวน์โหลด

ฉันหวังว่ามันจะช่วยพวกคุณ


3
นี่เป็นวิธีเดียวที่จะกู้คืน "การสูญเสียการกระทำ" ซึ่งเป็นการกระทำที่ GitHub มีประวัติ แต่ถูกลบออกจากไทม์ไลน์ "ทางการ" เมื่อใช้สิ่งนี้คุณจะได้รับซิปสแนปช็อตของการคอมมิชชันที่ถูกลดระดับเป็นการให้อภัยผลักไปที่การคอมมิชชันใหม่ดึงสาขานั้นเข้าสู่ repo ที่มีอยู่และเชอร์รี่
Ajax

@ Ajax ไม่เป็นความจริง คุณยังสามารถใช้งาน sha ได้git reflogจากนั้นชำระเงินค่าคอมมิชชันเดี่ยว
Aaron Brager

@AaronBrager แน่นอนว่าการ reflog จะใช้งานได้หากคุณอยู่ในเครื่องเดียวกับที่มีการกระทำในตอนแรก OP รู้การกระทำอยู่แล้วดังนั้นพวกเขาจึงไม่จำเป็นต้อง reflog และสามารถเช็คเอาต์ได้โดยตรง อย่างไรก็ตามฉันกำลังพูดถึงกรณีที่คุณไม่ได้มีความมุ่งมั่นในท้องถิ่นและมันไม่ได้อยู่ในสาขาใด ๆ ที่ยังคงอยู่ใน repo สาธารณะ ในกรณีเหล่านี้ GitHub อาจยังมีบันทึกการกระทำซึ่งคุณสามารถดาวน์โหลดเป็นซิปเพื่อให้สามารถกู้คืนการกระทำที่กล่าวไว้
Ajax

@ Ajax Ah ขอบคุณสำหรับการชี้แจง นอกจากนี้คุณสามารถกด GitHub API ( api.github.com/repos/facebook/facebook-ios-sdk/events ) และสร้างสาขาจากคำสั่งกำพร้า ( คำแนะนำที่นี่ )
Aaron Brager

ดีมาก. +1 ฉันไม่รู้ว่าคุณสามารถสืบค้น reflog ของ Github ได้!
Ajax

27

คำตอบของ Sivan ใน gif ป้อนคำอธิบายรูปภาพที่นี่

1. คลิกที่คอมมิท

2. เลือกรหัสเรียกดูที่ด้านขวาของแต่ละการส่ง

3. คลิกที่ดาวน์โหลด zip ซึ่งจะดาวน์โหลดซอร์สโค้ด ณ เวลาที่ตกลง


สวัสดี suraj คุณช่วยโปรดบอกฉันว่าคุณสร้าง gif ของหน้าจอของคุณได้อย่างไร
ราหุล Satal

ใช้เครื่องเล่นเวลาที่รวดเร็วเพื่อบันทึกวิดีโอของหน้าจอทำการแปลงวิดีโอเป็น gif โดยใช้เครื่องมือใดก็ได้ที่มี GoogleGoogle @ Rahul Satal
Suraj K Thomas

1
ขอบคุณ @SurajKThomas สำหรับ gif
Sivan

10

หากต้องการเพียงดาวน์โหลดการกระทำโดยใช้ SHA1 แบบสั้น 7 หลักให้ทำดังนี้

ตัวอย่างการทำงาน:

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

รายละเอียด:

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

หากคุณมีคีย์แฮชแบบยาว31af650ee25f65794b75d4dfefed6fe4758781c1เพียงแค่รับ 7 ตัวอักษร31af650แรก มันเป็นค่าเริ่มต้นสำหรับ GitHub


8

วิธีที่ง่ายที่สุดที่ฉันพบเพื่อกู้คืนคอมมิชชันที่หายไป (ที่มีอยู่เฉพาะใน github และไม่ใช่โลคอล) คือการสร้างสาขาใหม่ที่รวมการคอมมิชชันนี้

  1. เปิดคอมมิชชัน (url like: github.com/org/repo/commit/long-commit-sha)
  2. คลิก "เรียกดูไฟล์" ที่ด้านบนขวา
  3. คลิกดร็อปดาวน์ "Tree: short-sha ... " ที่ด้านบนซ้าย
  4. พิมพ์ชื่อสาขาใหม่
  5. git pull สาขาใหม่สู่ท้องถิ่น

คำตอบนี้กว้างกว่าคำตอบที่ยอมรับ ฉันได้พบกับสถานการณ์นี้ว่าความมุ่งมั่นที่ฉันต้องการได้หายไปแล้วในสาขาหลักและ Github จะไม่เก็บทุกความมุ่งมั่นในสาขาที่ไม่มีอยู่ ดังนั้นวิธีการนี้จะสร้างสาขาใหม่จากที่กระทำกับ Github และทำให้สามารถดึงได้
Qi Luo

นี่ให้ฉันกู้คอมมิชชัน (ที่มี SHA แบบเดิม) จากทางแยกที่ถูกลบซึ่งฉันทำจาก PR หลังจากสร้างทางแยกใหม่ฉันเปิดการคอมมิชชัน PR ใน repo upstream จากนั้นทำการ "เรียกดูไฟล์" ฉันคัดลอก URL นั้นและแทนที่ชื่อผู้ใช้ด้วยของฉันเอง จากนั้นคลิกที่ต้นไม้: ดรอปดาวน์และสร้างสาขาใหม่ในส้อมของฉัน ใช้งานได้ดีมาก!
Allen Luce

2

ชื่อคำถามไม่ชัดเจน


1

นอกจากคำตอบที่ยอมรับแล้ว:

หากต้องการดูแฮชที่คุณจำเป็นต้องใช้คำสั่งปัญหา "เช็คเอาต์คอมไพล์กัญชา " git logคุณสามารถใช้ ทุกวิธีขึ้นอยู่กับสิ่งที่คุณต้องการมีวิธีที่ง่ายกว่าการคัดลอก / การวางแฮช

คุณสามารถใช้git log --onelineเพื่ออ่านข้อความการส่งหลายข้อความในรูปแบบที่บีบอัดได้มากขึ้น

สมมติว่าคุณเห็นรายการนี้เป็นรายการเดียวของคอมมิทที่มีข้อมูลน้อยที่สุดและมีเพียงแฮชที่มองเห็นได้บางส่วนเท่านั้น:

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

ถ้าคุณต้องการคุณสามารถใช้last commit ช่วยให้คุณกระทำก่อนที่จะต้นแบบ ดังนั้นgit checkout master^^hash222

หากคุณต้องการ n-TH git checkout master~nสุดท้ายกระทำคุณสามารถใช้ ตัวอย่างเช่นการใช้จะให้คุณกระทำgit checkout master~2hash333


0

คุณสามารถกดyปุ่ม ( วิธีใช้ Github , แป้นพิมพ์ลัด ) เพื่อรับ "Permalink" สำหรับการแก้ไข / การกระทำปัจจุบัน
นี้จะเปลี่ยน URL จากhttps://github.com/<user>/<repository>(Master / HEAD) https://github.com/<user>/<repository>/tree/<commit id>เพื่อ

เพื่อที่จะดาวน์โหลดเฉพาะกระทำคุณจะต้องโหลดหน้าเว็บจาก URL ที่ดังนั้นClone or Downloadปุ่มจะชี้ไปที่ "ภาพรวม" แทนล่าสุดhttps://github.com/<user>/<repository>/archive/<commit id>.zip https://github.com/<user>/<repository>/archive/master.zip


0

ลองลำดับคำสั่งต่อไปนี้:

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

-1

หากคุณต้องการไปกับการกระทำที่แน่นอนหรือต้องการรหัสของการกระทำที่แน่นอนแล้วคุณสามารถใช้คำสั่งด้านล่าง:

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

ตัวอย่าง:

 git reset --hard fbee9dd 
 git push --force

2
นี่เป็นอันตรายมันสมเหตุสมผลกว่าที่จะโคลน repo และเช็คเอาท์เวอร์ชั่น
user1767754
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.