Извлечь / вытащить часть очень большого репозитория? - PullRequest
10 голосов
/ 09 сентября 2010

Это, вероятно, очевидно, и раньше много раз спрашивали по-разному, но я не смог найти ответ после поиска в течение некоторого времени.

Допустим следующее:

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

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

и

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

И

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

Возможно, fetch / pull - неправильная команда для этого.

1 Ответ

6 голосов
/ 09 сентября 2010

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

  • до определенной глубины и /или к определенным ветвям,
  • , но не к определенным файлам или каталогам (вы можете получить файл или каталог, хотя и редко, но вы все равно должны сначала получить полный репо!)
  • Дажеопределенный коммит.
    (Git 2.5 (Q2 2015) поддерживает один коммит выборки! См. " Извлечение определенного коммита из удаленного репозитория git ").

РеальныйРешением было бы разделить огромное удаленное репо на подмодули.
См. Что такое ограничения Git или Резервное копирование двоичных файлов в стиле Git для иллюстрации такой ситуации.


Обновление за апрель 2015 года:

Хранилище больших файлов Git (LFS) сделало бы извлечение / извлечение намного более эффективным (GitHub, апрель 2015).

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...