2010-09-09 3 views
9

Это, вероятно, очевидно и было задано много раз по-разному, но я не смог найти ответ после поиска в течение некоторого времени.Fetch/Pull Part of Very Large Repository?

Предположим следующее:

  • У меня есть, скажем, 500 Гб диск на локальном конце;
  • У меня есть удаленный репозиторий на 100 терабайт; поэтому стоимость клонирования всего хранилища просто невозможна;
  • Рабочий каталог, используемый для создания удаленного репозитория, состоял из 1000 каталогов верхнего уровня DIR001, DIR002, ... DIR00N, каждый из которых содержит несколько подкаталогов с файлами только под подкаталогами листа (пример DIR001/subdir1/fileA1 ... DIR001/subf1/fileAN и DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN ...
  • Я НЕ явно помечать или отраслевые справочники DIR001, DIR002, ... DIR00N или что-нибудь еще в этом отношении
  • Я инициализировать абсолютно новый репозиторий локального GIT

Как эффективно тянуть или принести последний гр ommitted версии, скажем, DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN из удаленного репозитория и ничего больше?

И

только последняя зафиксированная версия одного файла из DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN из удаленного хранилища, и больше ничего?

И

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

Возможно, выборка/вытягивание не является правильной командой для этого.

+0

К сожалению, я не могу ответить на ваш вопрос, но обратите внимание, что подписи и слоган «настоятельно рекомендуются» на StackOverflow. Вы можете найти более подробную информацию здесь: http://meta.stackexchange.com/questions/5029/are-taglines-signatures-disallowed/5038#5038 –

+0

Примечание: с git-lfs (апрель 2015), pull/fetch будет более эффективным. См. Мой отредактированный ответ. – VonC

+0

Git 2.5 (Q2 2015) поддерживает единую фиксацию fetch! Я отредактировал свой ответ ниже, теперь ссылаясь на «[Перенести конкретную фиксацию из удаленного репозитория git] (http://stackoverflow.com/a/30701724/6309)». – VonC

ответ

5

Ответ на вопрос «Partial cloning» может помочь вам начать экспериментировать с неглубокими клонами.
Но он будет ограничен:

  • на определенную глубину, и/или в определенные отрасли,
  • но не определенные файлы или каталоги (вы можете получить файл или каталог, хотя разреженную проверка, но вы все равно придется сначала получить полное репо!)
  • Даже определенная фиксация.
    (Git 2.5 (Q2 2015) поддерживает одно изложение фиксации! См. «Pull a specific commit from a remote git repository»).

Реальное решение состоит в том, чтобы разделить огромное дистанционное репо на подмодули.
См. What are Git limits или Git style backup of binary files для иллюстрации такого рода ситуации.


Update апреля 2015:

Git Large File Storage (LFS) бы тянуть/принести гораздо более эффективным (по GitHub, апрель 2015 года).

Проект git-lfs (см git-lfs.github.com) и протестирована с сервера поддерживает его: lfs-test-server:
Вы можете хранить метаданные только в мерзавца репо, а также большой файл в другом месте.

https://cloud.githubusercontent.com/assets/1319791/7051226/c4570828-ddf4-11e4-87eb-8fc165e5ece4.gif

Смежные вопросы