Можно ли сделать разреженную проверку, не проверяя сначала весь репозиторий?



Я работаю с репозиторием с очень большим количеством файлов, который занимает несколько часов для проверки. Я изучаю возможность того, будет ли Git хорошо работать с таким репозиторием теперь, когда он поддерживает разреженные проверки, но каждый пример, который я могу найти, делает следующее:



git clone <path>
git config core.sparsecheckout true
echo <dir> > .git/info/sparse-checkout
git read-tree -m -u HEAD


проблема с этой последовательностью команд заключается в том, что исходный клон также выполняет проверку. Если вы аддон к оригинальной Command клон, то читать-дерево результаты команды в следующая ошибка:



ошибка: разреженная проверка не оставляет записи в рабочем каталоге



как можно сделать разреженную проверку без проверки всех файлов в первую очередь?

373   8  
git

8 ответов:

обратите внимание, что этот ответ не могу скачать полную копию данных из репозитория. Элемент git remote add -f команда клонирует весь репозиторий. Из man page of git-remote:

С , git fetch <name> запускается сразу после настройки удаленной информации.


попробуйте это:

mkdir myrepo
cd myrepo
git init
git config core.sparseCheckout true
git remote add -f origin git://...
echo "path/within_repo/to/desired_subdir/*" > .git/info/sparse-checkout
git checkout [branchname] # ex: master

теперь вы обнаружите, что у вас есть "обрезанная" проверка только с файлами из путь/within_repo/to / desired_subdir присутствует (и в этом пути).

обратите внимание, что в командной строке windows вы не должны указывать путь, т. е. вы должны изменить 6-ю команду с помощью этого:

echo path/within_repo/to/desired_subdir/* > .git/info/sparse-checkout

если вы этого не сделаете, вы получите цитаты В разреженном файле проверки, и он не будет работать

git clone имеет опцию (--no-checkout или -n), что делает то, что вы хотите.

в списке команд, просто измените:

git clone <path>

для этого:

git clone --no-checkout <path>

затем вы можете использовать разреженную проверку, как указано в вопросе.

у меня был аналогичный случай использования, за исключением того, что я хотел проверить только фиксацию для тега и обрезать каталоги. Используя --depth 1 делает его очень редким и может действительно ускорить.

mkdir myrepo
cd myrepo
git init
git config core.sparseCheckout true
git remote add origin <url>  # Note: no -f option
echo "path/within_repo/to/subdir/" > .git/info/sparse-checkout
git fetch --depth 1 origin tag <tagname>
git checkout <tagname>

Я нашел ответ, который я искал с фразой опубликовано ранее pavek (спасибо!) поэтому я хотел дать полный ответ в одном ответе, который работает на Linux (GIT 1.7.1):

1--> mkdir myrepo
2--> cd myrepo
3--> git init
4--> git config core.sparseCheckout true
5--> echo 'path/to/subdir/' > .git/info/sparse-checkout
6--> git remote add -f origin ssh://...
7--> git pull origin master

Я немного изменил порядок команд, но это, похоже, не имеет никакого влияния. Ключом является наличие задней косой черты " / " при конец пути в шаге 5.

к сожалению, ни один из выше работал для меня, поэтому я потратил очень много времени, пробуя различные комбинации .

в моем случае я хотел пропустить папки с конфигурациями IntelliJ IDEA.

вот что я сделал:


выполнить git clone https://github.com/myaccount/myrepo.git --no-checkout

выполнить git config core.sparsecheckout true

создано .git\info\sparse-checkout следующего содержания

!.idea/*
!.idea_modules/*
/*

запустите ' git checkout --', чтобы получить все файлы.


критическая вещь, чтобы заставить его работать было добавить /* после имени папки.

у меня git 1.9

Я новичок в git, но кажется, что если я делаю git checkout для каждого каталога, то он работает. Кроме того, файл sparse-checkout должен иметь конечную косую черту после каждого каталога, как указано. Кто-то больше опыта, Пожалуйста, подтвердите, что это будет работать.

интересно, что если вы проверяете каталог не в разреженном файле проверки, это, кажется, не имеет никакого значения. Они не отображаются в статусе git, и Git read-tree-m-u HEAD не вызывает его удаления. git reset --жесткий не делает причиной каталога должны быть удалены, либо. Кто-нибудь более опытный заботится о том, чтобы прокомментировать, что git думает о каталогах, которые проверены, но которые не находятся в разреженном файле проверки?

git 2.9 (июнь 2016) обобщит до git worktree add (команда, которая позволяет работать с несколько рабочих деревьев для одного РЕПО)

посмотреть commit ef2a0ac (29 марта 2016) by Рэй Чжан (OneRaynyDay).
Помог-by:Эрик Саншайн (sunshineco) и Junio C Hamano (gitster).
(слитый Junio C Hamano--gitster-- на commit 0d8683c, 13 апр 2016)

The git worktree на странице теперь включает в себя:

--[no-]checkout:

по умолчанию add проверил <branch>, однако, --no-checkout может использоваться для подавления проверки для того, чтобы сделать настройки,например, настройка sparse-checkout.

да, sparse-checkout скачать весь материал чтобы загрузить папку из git. Ни один из вышеперечисленных методов не работает для меня. Чтобы downlaod только один образец из https://github.com/gearvrf/GearVRf-Demos вот что я сделал..

  1. для пользователя windows загрузите и установите SlikSvn_x84, добавьте это "C:\Program файлы (x86)\SlikSvn\bin" к переменной среды Path. пользователь mac использует альтернативный svn-клиент.

  2. командная строка : svn export https://github.com/foobar/Test.git/trunk/foo

обратите внимание на формат URL:

базовый URL-адрес https://github.com/ / ствол прилагается в конце

пример : svn export https://github.com/gearvrf/GearVRf-Demos.git/trunk/gvr-renderableview

Я надеюсь, это поможет кому-то. ref:https://stackoverflow.com/a/18324458/5710872

Comments

    Ничего не найдено.