Подтвердить что ты не робот

Как загрузить конкретную фиксацию git из репозитория?

У меня нет локальной копии кода /etc, я просто хочу загрузить отдельный конкретный коммит git, чтобы я мог его просматривать. У меня есть URL-адрес репозитория git:

git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git

и хеш фиксации:

ee9c5cfad29c8a13199962614b9b16f1c4137ac9

Как загрузить эту фиксацию с помощью git (я не хочу, чтобы весь репо, только одно исправление)? Я прочитал man-страницы для git -pull и git -cherry-pick и пошатнулся командами без везения.

Клонирование репо действительно не является опцией, поскольку некоторые из хранилищ ядра чрезвычайно велики и медленны для загрузки (часы).

4b9b3361

Ответ 1

Это казалось бы невозможным. Согласно Обсуждение на kernel.org, протокол будет разрешать только named refs быть извлеченным. Если вы не хотите загружать снимок с веб-сайта git, вам придется клонировать все репо.

(Вы можете прочитать руководства для git-fetch и git-ls-remote.)

Ответ 2

В общем случае вы можете сделать это, используя флаг --remote для git archive, например:

$ git archive -o repo.tar --remote=<repo url> <commit id>

Итак, в вашем примере вы должны использовать:

$ git archive -o repo.tar --remote=git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git ee9c5cfad29c8a13199962614b9b16f1c4137ac9

Это даст вам состояние репо в этот момент времени. Обратите внимание, что вы не получите полное репо, так что вы не можете фактически взаимодействовать с репозиторией upstream с тем, что вы загрузили.

Однако использование git archive удаленно должно быть включено на стороне сервера, и оно не находится на сервере Linux Git. Однако вы можете взять копию, используя URL-адрес формы http://git.kernel.org/?p=<path to repo>;a=snapshot;h=<commit id>;sf=tgz. Поэтому для вашего репо вы можете использовать, скажем, wget или curl, чтобы захватить файл, используя этот URL.

Ответ 3

Я знаю, что это работает, когда у вас есть клон репо (или подобное репо).

git fetch git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
git cherry-pick ee9c5cfad29c8a13199962614b9b16f1c4137ac9

Fetch загружает удаленные ссылки (но не все репо, я не думаю), чтобы вы могли ссылаться на них с другими командами. Затем вы выбираете червь, который один совершает, и пытается применить diff к вашему локальному дереву.

Я не пробовал его без репозитория git локально, но я попробовал его на repos, которые не являются вилками eachother. вы можете получить конфликты слияния, но вы можете очистить их вручную.

Ответ 5

У меня была такая же потребность. Мне нужно загрузить патч определенного коммита, который мне нужно применить к другой ветке.

Я использовал: git format-patch sha-id

Просто укажите sha-id, который просто старше требуемого коммита. Он даст файлы .patch, соответствующие всем коммитам.

Ответ 6

Сегодня я столкнулся с этой проблемой и нашел способ загрузить архивы для определенного коммита. Если вы перейдете в репозиторий на git.kernel.org, внизу появится раздел клонирования. Нижний url - это зеркало google git. Вы сможете скачать архивы для определенных коммитов отсюда.

Ответ 7

Есть способ сделать это:

git show ee9c5cfad29c8a13199962614b9b16f1c4137ac9 > myCommittedCode.txt

Ответ 8

В этом случае, если все, что вам нужно, это diff, вы можете загрузить его из веб-интерфейса для репо сервера в этом URL-адресе:

http://git.kernel.org/?p=linux/kernel/git/davem/net-2.6.git;a=commitdiff_plain;h=ee9c5cfad29c8a13199962614b9b16f1c4137ac9

Вы можете играть с URL-адресом, чтобы получить другие фиксации.