Как вытащить конкретный каталог с помощью Git - PullRequest
156 голосов
/ 11 марта 2010

У меня есть проект с git, и я просто хочу клонировать или извлечь конкретный каталог, как myproject / javascript, как это делает Subversion.
внести некоторые изменения, зафиксировать и отодвинуть снова.
Это возможно?

Ответы [ 7 ]

184 голосов
/ 29 октября 2010
  1. компакт-диск в верхней части вашей копии репо
  2. git fetch
  3. git checkout HEAD path/to/your/dir/or/file

    • Где "path/..." в (3) начинается с каталога чуть ниже корня репо, содержащего ваш ".../file"

    • ОБРАТИТЕ ВНИМАНИЕ, что вместо «HEAD» может использоваться хеш-код определенного коммита, и тогда вы получите ревизию (файл) или ревизии (dir), специфичные для этого коммита.

76 голосов
/ 04 февраля 2016

В пустой директории:

git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
22 голосов
/ 10 мая 2017

После долгих поисков ответа, не найдя, не сдаваясь, пытаясь снова и так далее, я наконец нашел решение этой проблемы в другой SO-теме:

Как сделать git-pull для всех папок, кроме одной

Чтобы скопировать и вставить то, что есть:

git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master

Чтобы сделать то, что хочет OP (работать только с одним каталогом), просто добавьте этот один каталог к ​​.git/info/sparse-checkout, выполняя шаги, описанные выше.

Большое спасибо @cforbish!

13 голосов
/ 11 марта 2010

Это невозможно. Вам нужно вытащить все хранилище или ничего.

8 голосов
/ 05 января 2012

Может быть, эта команда может быть полезна:

git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit  path/to/your/dir/or/file > files.tar

"Et voilà"

1 голос

git clone --filter из Git 2.19

Эта опция фактически пропускает выборку ненужных объектов с сервера.

Я написал подробный ответ с объяснением текущего статуса поддержки по адресу: Как мне клонировать только подкаталог репозитория Git?

Весьма вероятно, что все, что будет реализовано для git clone в этой области, также будет иметь git pull аналогов.

0 голосов
/ 11 марта 2010

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

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

...