У меня есть проект с git, и я просто хочу клонировать или извлечь конкретный каталог, как myproject / javascript, как это делает Subversion.
внести некоторые изменения, зафиксировать и отодвинуть снова.
Это возможно?
У меня есть проект с git, и я просто хочу клонировать или извлечь конкретный каталог, как myproject / javascript, как это делает Subversion.
внести некоторые изменения, зафиксировать и отодвинуть снова.
Это возможно?
Ответы:
git fetch
git 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