Дополнительно
Получение конкретного коммита из удаленного репозитория Git
Есть ли способ получить только один конкретный коммит из удаленного Git-репозитория, не клонируя его на моем компьютере? Структура удаленного репозитория абсолютно такая же, как у меня, и, следовательно, не будет никаких конфликтов, но я понятия не имею, как это сделать, и я не хочу клонировать этот огромный репозиторий.
Я новичок в git, есть ли какой-нибудь способ?
178
9
Начиная с версий Git 2.5+ (2 квартал 2015), извлечение одного коммита (без клонирования полного РЕПО) на самом деле возможно. См. совершить 68ee628 по Фредрик Попурри (
moroten
), 21 мая 2015 года. <суп>(объединяются по Джунио с Hamano --gitster
-- в совершить a9d3493, 01 июн 2015)</SUP и ГТ; Теперь у вас есть новый конфиг (на стороне сервера)Вы можете использовать команду `git в кота-файл, чтобы увидеть, что фиксация была извлечена:
Вы клонируете только один раз, поэтому, если у вас уже есть клон удаленного репозитория, извлечение из него не приведет к повторной загрузке. Просто укажите, какую ветку вы хотите извлечь, или получите изменения и проверьте нужный вам коммит.
Вытаскивание из нового репозитория очень дешево по пропускной способности, так как оно будет загружать только те изменения, которых у вас нет. Думайте в терминах того, что Git делает правильные вещи с минимальной нагрузкой.
Git хранит все в папке
.git
. Коммит не может быть получен и сохранен изолированно, ему нужны все его предки. Они взаимосвязаны.Однако, чтобы уменьшить размер загрузки, вы можете попросить git получить только объекты, относящиеся к определенной ветке или коммиту:
Это загрузит только коммиты, содержащиеся в удалённой ветке
branch
(и только те, которые вы пропустили), и сохранит их вorigin/branch
. Затем вы можете выполнить слияние или выгрузку.Вы также можете указать только SHA1 коммит:
Это загрузит только коммит указанного SHA-1 96de5297df870 (и его предков, которые вы пропустите), и сохранит его как (несуществующую) удалённую ветку
origin/foo-commit
.Я сделал pull в своем git-репо:
Позволив git'у подтянуть весь код для ветки, а затем я сделал сброс на интересующий меня коммит.
git reset --hard
.Надеюсь, это поможет.
Вы можете просто получить один коммит удаленного репозитория с помощью функции
где,
может быть именем удаленного репо (например,
origin) или даже URL удаленного репо (например,
https://git.foo.com/myrepo.git`)например
после получения коммита (и недостающих предков) вы можете просто проверить его с помощью команды
Обратите внимание, что это приведёт вас в состояние "отсоединённой головы".
Вы можете просто получить удаленный РЕПО с:
где,
<РЕПО>
может быть удаленный РЕПО название (например, "происхождение") или даже удаленный РЕПО URL-адрес (напр.https://git.foo.com/myrepo.git
)например:
после того, как вы скачали РЕПО может слить коммиты, которые вы хотите (поскольку речь идет о получить один коммит, а не слиянием, вы можете использовать вишни-выбрать только один коммит):
<фиксации>
может быть SHA1 для фиксациинапример:
или
если это последний коммит, который вы хотите объединить, вы также можете использовать FETCH_HEAD переменной :
Наконец-то я нашел способ клонировать определенный коммит, используя мерзавец вишня-выбор. Предполагая, что вы Дон'Т есть какие-либо репозитории в местных и вы тянете определенный коммит из глубинки,
создать пустой репозиторий в локальной и ГИТ инит
в Git дистанционного добавить происхождения и"URL-адрес-от-хранилище"и
ГИТ выборки происхождения [это не переместить файлы в локальной рабочей области, если вы сливаете]
мерзавец вишня-выбор и"ввод-долго фиксации-хэш-что-вам-нужнои"
Сделано.Таким образом, вы будете иметь только файлы из этого определенный коммит в локальный.
Введите-долго фиксации-хэш:
Вы можете сделать это с помощью -> войти в Git --довольно=короткая
Это работает лучше всего:
именем "Темп" и все, что вы хотите...эта ветка может быть сиротами
Я думаю, что 'ГИТ ЛС-пульт дистанционного' ( http://git-scm.com/docs/git-ls-remote ) должны делать то, что вы хотите. Без силы fetch или вытащить.
Если требуемая фиксация на запросы удаленного РЕПО, вы можете получить его по ID: