Вы буквально не можете делать то, что хотите: git clone
не будет клонировать подкаталог.
Возможно, вы сможете довольно легко сделать то, что вам нужно . Это зависит от того, какой у вас доступ к репозиторию Git на удаленной машине.
Как прокомментировал chepner , Git store commits . Сами коммиты образуют цепочки, которые люди обычно называют ответвлениями . Любая данная цепочка заканчивается в последнем коммите , который Git вызывает tip commit ветви, а имя ветки просто идентифицирует этот самый последний коммит по его ha sh ID. (Каждый коммит имеет уникальный га sh ID.)
Теперь каждый коммит, независимо от того, где он находится в репозитории, содержит каждый файл . Файлы внутри каждого коммита хранятся в специальной форме, доступной только для чтения, Git -только, с применением сжатия и различными приемами, так что повторная фиксация файла того же не занимает дополнительного места. Только сам Git может читать этот специальный формат. 1
Точнее, коммит содержит каждый файл, который должен быть в этом коммите, например, если у вас есть хранилище в целом, затем вы можете сказать Git: get me commit a123456...
(по его номеру ha sh), и Git извлечет фиксацию в рабочую область. В рабочей области у вас теперь будут обычные файлы в обычном повседневном формате, с которым вы можете работать. (Вот почему мы называем это вашей рабочей областью, или рабочим деревом или рабочим деревом .)
Обратите внимание, однако, что это означает, что каждый коммит равен также архив . В дистрибутивы Git входит команда git archive
, которая превращает архив Git -specifi c в один из двух стандартных форматов архива, отличных от Git: zip или tar. (В будущем может быть добавлено больше форматов, но эти два были в Git в течение почти 10 * *.)
Это означает, что любой, у кого есть клон репозитория, может включите любой коммит в один из этих архивов. Затем вы можете использовать сам архиватор - unzip
или tar
- для извлечения только нужного подмножества файлов в этом одном архиве.
Если сайт с репозиторием Git позволяет запускать произвольно команды, go там и создайте архив из коммитов, файлы которых вы хотите, затем управляйте архивом там. Если сайт GitHub или аналогичный, имейте в виду, что они предлагают интерфейс для получения архива tar или zip из любого данного коммита и используют его для копирования этого архива на ваш компьютер и манипулирования этим архивом там.
Репозиторий git является удаленным репозиторием, размещенным на Github.
Таким образом, вы можете получить zip-архив любого коммита с помощью любого веб-браузера: перейдите к нужному коммиту, нажмите «клонировать» или загрузите ", выберите" zip ", и браузер должен сохранить полученный zip-файл где-нибудь.
(Чтобы автоматизировать это, запишите URL, с которого загружается zip-файл. Вероятно, он будет иметь коммит ha sh ID, встроенный в него. Используйте программу типа curl
, чтобы загружать файлы самостоятельно, без запуска браузера.)
Обратите внимание, что эти архивы не являются Git хранилищами , и вы не можете сделать это любая Git работает с ними. Однако если вы планируете извлечь только подмножество файлов, результат все равно будет недоступен для любого клона репозитория - по крайней мере, если это не будет сделано. 2
Если ни один из них недоступен, вы можете использовать git clone -b <branch-name> --single-branch --depth 1
, чтобы сделать неглубокий клон , имеющий глубину 1, т. Е. Только один коммит, который копирует только один коммит, идентифицированный указанной ветвью. Теперь у вас есть очень ограниченный клон, в котором есть только один коммит, так что теперь вы можете запустить git archive
на одном коммите, если хотите. Конечно, на этом этапе вы можете просто git checkout
один коммит, затем переместить весь нужный подкаталог из рабочего дерева и затем удалить репозиторий Git.
Независимо от того, что вы делаете, вы не можете положить этот материал обратно в исходный репозиторий Git, не имея реального - возможно мелкого - клона исходного репозитория Git. В вашем вопросе никогда не упоминается, что вы планируете делать с этим подкаталогом, который вы извлекли из одного конкретного коммита.
1 Формат: publi c Таким образом, любой может написать программу для чтения. Программа для его чтения, в основном, Git, поэтому вы можете просто использовать Git, особенно потому, что Git оставляет за собой право иметь будущие форматы, и если вы напишите свою собственную версию Git и Git добавит новый формат в следующем году, который работает лучше в некоторых случаях, вам также придется обновить свою собственную программу.
2 git subtree
предоставляет инструменты для выполнения чего-то совершенно другого в механизме , но схожи с точки зрения некоторых своих целей. Поддеревья, которые были разделены, могут быть повторно включены позже, если вы будете следовать множеству очень специфических правил. Однако для использования git subtree
вам потребуется полный клон, который вы уже отклонили в качестве опции. Сами правила также сложны («прыжки через обручи»), что вы считаете нежелательным.