У мене є проект з git, і я просто хочу клонувати або витягувати певний каталог, як-от myproject / javascript, як це робить субверсія.
внесіть деякі зміни, введіть і знову натисніть.
Це можливо?
У мене є проект з git, і я просто хочу клонувати або витягувати певний каталог, як-от myproject / javascript, як це робить субверсія.
внесіть деякі зміни, введіть і знову натисніть.
Це можливо?
Відповіді:
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-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
Щоб робити те, що хоче ОП (працюйте лише над одним dir), просто додайте цей один dir .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
"Et voilà"
Якщо ви хочете отримати останні зміни в каталозі, не вводячи його, ви можете зробити:
$ 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>
Сподіваюся, це було корисно!
Іноді просто хочеться переглянути попередні копії файлів без ригмароли проходження через diff.
У такому випадку так само просто зробити клон сховища та перевірити конкретний комітет, який вас цікавить, і подивитися підкаталог у цьому клонованому сховищі. Оскільки все локально, ви можете просто видалити цей клон, коли закінчите.
Для всього, що бореться з теоретичними шляхами файлів та прикладами, як я, ось справжній приклад світу: Microsoft пропонує свої документи та приклади на git hub, на жаль, вони збирають усі свої приклади файлів для великої кількості тем у цьому сховищі:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Мене цікавили лише файли js Microsoft Dynamics на шляху
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/*
нарешті зробити a
git pull origin master