Можно ли сделать разреженную проверку, не проверяя сначала весь репозиторий?
Я работаю с репозиторием с очень большим количеством файлов, который занимает несколько часов для проверки. Я изучаю возможность того, будет ли Git хорошо работать с таким репозиторием теперь, когда он поддерживает разреженные проверки, но каждый пример, который я могу найти, делает следующее:
git clone <path>
git config core.sparsecheckout true
echo <dir> > .git/info/sparse-checkout
git read-tree -m -u HEAD
проблема с этой последовательностью команд заключается в том, что исходный клон также выполняет проверку. Если вы аддон к оригинальной Command клон, то читать-дерево результаты команды в следующая ошибка:
ошибка: разреженная проверка не оставляет записи в рабочем каталоге
как можно сделать разреженную проверку без проверки всех файлов в первую очередь?
8 ответов:
обратите внимание, что этот ответ не могу скачать полную копию данных из репозитория. Элемент
git remote add -fкоманда клонирует весь репозиторий. Из man page ofgit-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 вот что я сделал..
для пользователя windows загрузите и установите SlikSvn_x84, добавьте это "C:\Program файлы (x86)\SlikSvn\bin" к переменной среды Path. пользователь mac использует альтернативный svn-клиент.
командная строка :
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