У меня есть проект с git, и я просто хочу клонировать или извлечь конкретный каталог, как myproject / javascript, как это делает Subversion.
внести некоторые изменения, зафиксировать и отодвинуть снова.
Это возможно?
У меня есть проект с git, и я просто хочу клонировать или извлечь конкретный каталог, как myproject / javascript, как это делает Subversion.
внести некоторые изменения, зафиксировать и отодвинуть снова.
Это возможно?
Ответы:
git fetchgit checkout HEAD path/to/your/dir/or/file
Где " path/..." в (3) начинается с каталога чуть ниже корня репо, содержащего ваш " .../file"
Обратите внимание, что вместо «HEAD» можно использовать хеш-код конкретного коммита, и тогда вы получите ревизию (файл) или ревизии (dir), специфичные для этого коммита.
--не требуется, хотя. Это заставляет биты после него интерпретироваться как путь. Итак, да, если у вас есть файл с именем, --helpкоторое вы хотите оформить, потребуется префикс его с этими дефисами:git checkout HEAD -- --help
В пустой директории:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetchили checkoutкомандах, мы можем просто сделать запрос remote addна получение после команды, чтобы получить всю основную ветку.
После долгих поисков ответа, не найдя, не сдаваясь, пытаясь снова и так далее, я наконец-то нашел решение этой проблемы в другой SO-теме:
Как гит-тянуть все кроме одной папки
Чтобы скопировать и вставить то, что есть:
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!
master. Просто убедитесь, что вы делаете, git branch --set-upstream-to=origin/<branch>чтобы тянуть правильно
Это невозможно. Вам нужно вытащить все хранилище или ничего.
Может быть, эта команда может быть полезна:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"И вуаля"
Если вы хотите получать последние изменения в каталоге, не вводя его, вы можете сделать:
$ git -C <Path to directory> pull
git clone --filter из Git 2.19
Эта опция фактически пропускает выборку ненужных объектов с сервера.
Я написал подробный ответ с объяснением текущего статуса поддержки по адресу: Как мне клонировать только подкаталог репозитория Git?
Весьма вероятно, что все, что будет реализовано git cloneв этой области, также будет иметь git pullаналоги.
Пробовал и проверял это работает!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
Надеюсь, это было полезно!
Иногда вам просто нужно взглянуть на предыдущие копии файлов без необходимости проходить через разностные файлы.
В таком случае так же легко сделать клон репозитория и получить конкретный коммит, который вас интересует, и взглянуть на подкаталог в этом клонированном репозитории. Поскольку все локально, вы можете просто удалить этот клон, когда закончите.
Для всей этой борьбы с теоретическими путями к файлам и примерами, как я сделал, вот реальный пример: Microsoft предлагает свои документы и примеры на git hub, к сожалению, они собирают все свои файлы примеров для большого количества тем в этом репозитории:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Меня интересовали только файлы Microsoft Dynamics js в пути
msdn-code-gallery-community-s-z/Sdk.Soap.js/
поэтому я сделал следующее
создать
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
файл в папке моих репозиториев на диске
git sparse-checkout init
в этом каталоге с помощью cmd на windows
Содержимое файла
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
является
Sdk.Soap.js/*
наконец сделать
git pull origin master