Як отримати певну комісію від проекту GitHub


151

Мені потрібно завантажити API Facebook з GitHub . Зазвичай я просто натискаю на вкладку "Завантаження", щоб завантажити найновіший вихідний код. У цьому випадку мені потрібна старіша фіксація: 91f256424531030a454548693c3a6ca49ca3f35a , але я не маю уявлення, як отримати весь проект з цього комітету ...

Може хтось скажіть, будь ласка, як це зробити?

(BTW, я на мак. Не знаю, чи це має значення).


1
будь ласка, також перегляньте stackoverflow.com/questions/13636559/…, якщо вам "потрібен" лише код "zipped-snapshot".
Жан Фонтен

Відповіді:


216

По-перше, клонуйте сховище за допомогою git, наприклад, за допомогою:

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

Це завантажує повну історію сховища, тому ви можете перейти до будь-якої версії. Далі перейдіть у щойно клонований сховище:

cd facebook-ios-sdk

... і скористайтеся, git checkout <COMMIT>щоб змінити правильний комітет:

git checkout 91f25642453

Це дозволить вам попередити, оскільки ви вже не є гілкою, і перейшли безпосередньо до певної версії. (Це відоме як стан "відокремленої голови".) Оскільки це звучить так, ніби ви хочете використовувати лише цей SDK, а не активно його розробляти, це не те, про що потрібно хвилюватися, якщо ви не зацікавлені в тому, щоб дізнатись. докладніше про те, як працює git.


4
У цей момент ви також можете, git exportякщо ви просто хочете файли.
Xeoncross

1
git checkout -q <commit#>замовчує попередження stderr під час оформлення каси.
Manavalan Gajapathy

Коли я роблю перевірку на git 441b034635240bc873700473af3e98533e94a0b5, це призводить до помилки: фатальна: посилання не є деревом: 441b034635240bc873700473af3e98533e94a0b5
ttb

135

Я не знаю, чи був він там, коли ви опублікували це запитання, але найкращий і найпростіший спосіб завантажити фіксацію - це натиснути на вкладку комітетів під час перегляду сховища. Потім замість того, щоб клацнути назву комісії, натисніть на Огляд сховища в цей момент на кнопці історії із символом <> праворуч від імені / повідомлення комісії та нарешті на Завантажити ZIP, яка виникає, коли ви натискаєте Клоніровать або Кнопка завантаження .

Сподіваюся, це допоможе вам, хлопці.


3
Це єдиний спосіб відновити "втрачені комісії", які є документами, з якими github має історію, але були стерті з "офіційної" часової шкали git. Використовуючи це, ви можете отримати знімковий знімок комітету, який було відкинуто у небуття, підштовхнути його до нової гілки, перенести цю гілку в існуючу репо і вибрати її наново.
Аякс

@Ajax Це неправда. Ви все ще можете отримати ша, використовуючи git reflog, а потім
оформити окремий комітет

@AaronBrager впевнений, що рефлог буде працювати, якщо ви знаходитесь на тій самій машині, яка спочатку мала зобов’язання. ОП вже знає зобов’язання, тому вони не потребуватимуть відкладок і можуть просто перевірити безпосередньо. Однак я говорю про випадки, коли ви не приймаєте комісію на місцевому рівні, і це не в будь-яких відділеннях, які все ще знаходяться в публічному репо. У цих випадках github все ще може мати запис про фіксацію, який ви можете завантажити як поштовий індекс, щоб мати змогу відновити згадану комісію.
Аякс

@ Ajax Ах, дякую за роз’яснення. Як альтернативу, ви можете натиснути API GitHub ( api.github.com/repos/facebook/facebook-ios-sdk/events ) та створити гілку з осиротілого
комітету

Дуже хороша. +1 Я не знав, що ви можете запитати такий рефлог про github!
Аякс

27

Відповідь Сівана в gif введіть тут опис зображення

1.Натисніть на коміти в github

2.Виберіть код перегляду в правій частині кожної комісії

3. Клацніть поштовий індекс, який завантажить вихідний код у той момент часу вчинення


Привіт suraj, скажіть, будь ласка, як ви створили gif свого екрану?
Рахул Сатал

використовуйте програвач швидкого часу для запису відео на екрані. Здійснюйте перетворення відео у gif за допомогою будь-якого доступного інструменту. GoogleGoogle. @ Rahul Satal
Suraj K Thomas

1
Дякуємо @SurajKThomas за gif
Сіван

10

Щоб просто завантажити фіксацію за допомогою 7-розрядної короткої форми SHA1, виконайте такі дії:

Приклад роботи:

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

Опис:

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

Якщо у вас є довгий хеш-ключ 31af650ee25f65794b75d4dfefed6fe4758781c1, просто отримайте перші 7 знаків 31af650. Це за замовчуванням для GitHub.


8

Найпростіший спосіб, який я виявив, щоб відновити втрачену команду (яка існує лише в github, а не локально) - створити нову гілку, яка включає цю комісію.

  1. Відкрити комісію (URL-адреса, наприклад: github.com/org/repo/commit/long-commit-sha)
  2. Натисніть "Огляд файлів" у верхньому правому куті
  3. Клацніть спадне меню "Дерево: коротко-ша ..." у верхньому лівому куті
  4. Введіть нову назву гілки
  5. git pull нова гілка вниз до місцевої

Ця відповідь більш загальна, ніж прийнята. Я зіткнувся з цією ситуацією, що команда, яку я хотів, вже зникла на головній гілці, і Github не буде зберігати всі комісії на неіснуючих гілках. Таким чином, такий підхід створить нову гілку з цього комітету на Github та зробить його можливим.
Ци Луо

Це дозволило мені відновити фіксацію (з оригіналом SHA неушкодженою) із видаленої виделки, з якої я зробив PR. Створивши новий вилка, я відкрив PR-версію на репортажі вище, а потім "переглянув файли". Потім я скопіював цю URL-адресу і замінив ім’я користувача на моє власне. Потім натиснув спадне дерево: і створив нову гілку у моїй вилці. Працювали чудово!
Аллен Люс

2

Назва питання неоднозначна.


1

На додаток до прийнятої відповіді:

Щоб побачити хеші, вам потрібно скористатися запропонованою командою "git checkout hash ", ви можете використовувати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 .

Якщо ви хочете п яту останню прихильність, можете скористатися git checkout master~n. Наприклад, використання git checkout master~2дасть вам зобов’язання hash333.


0

Замість того, щоб переходити до комітетів, ви також можете натиснути yклавішу ( Довідка Github , Клавіші швидкого доступу ), щоб отримати "постійну посилання" для поточної версії / перегляду.
Це змінить 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
Це небезпечно, має більше сенсу клонувати репо та перевірити версію
оформити user1767754
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.