У меня есть проект с git, и я просто хочу клонировать или тянуть определенный каталог, например myproject/javascript, как и подрывная деятельность.
внести некоторые изменения, зафиксировать и отодвинуть назад.
Это возможно?
Как вытащить конкретный каталог с помощью git
Ответ 1
- CD в верхней части вашей копии репо
-
git fetch
-
git checkout HEAD path/to/your/dir/or/file
-
Где "
path/...
" в (3) начинается с каталога чуть ниже корня репозитория, содержащего ваш ".../file
" -
Обратите внимание, что вместо "HEAD" можно использовать хеш-код определенного коммита, и тогда вы получите ревизию (файл) или ревизии (dir), специфичные для этого коммита.
-
Ответ 2
В пустой каталог:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
Ответ 3
После долгих поисков ответа, не найдя, не сдавшись, не попробовав снова и так далее, я, наконец, нашел решение для этого в другом потоке 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!
Ответ 4
Это невозможно. Вам нужно вытащить весь репозиторий или ничего.
Ответ 5
Возможно, эта команда может быть полезна:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Et voilà"
Ответ 6
Я вижу. Я попробую создать подмодули и посмотреть, работает ли для меня. Я сообщу результаты. РЕДАКТИРОВАТЬ: для меня разработаны редкие проверки и подмодули. Ссылки, которые я использовал для чтения (данные VonC и Michel Jansen):
Как git -pull все, кроме одной папки
http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout
http://vmiklos.hu/blog/sparse-checkout-example-in-git-1-7
http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout
Ответ 7
git clone --filter
из Git 2.19
Эта опция фактически пропускает выборку ненужных объектов с сервера.
Я написал подробный ответ, объясняющий текущий статус поддержки: Как мне клонировать только подкаталог репозитория Git?
Весьма вероятно, что все, что будет реализовано для git clone
в этой области, также будет иметь аналоги git pull
.
Ответ 8
Шингара прав. Объяснение этого поведения приведено в этот поток списка рассылки. Если вы действительно хотите это сделать, вы можете сделать javascript dir подмодулем.
Ответ 9
Иногда вам просто нужно взглянуть на предыдущие копии файлов, не опасаясь прохода через diff.
В таком случае так же легко сделать клон репозитория и проверить конкретную фиксацию, которую вы заинтересовали, и посмотреть на подкаталог в этом клонированном репозитории. Поскольку все локально, вы можете просто удалить этот клон, когда закончите.
Ответ 10
Если вы хотите получать последние изменения в каталоге, не вводя его, вы можете сделать следующее:
$ git -C <Path to directory> pull