Если вы не исключаете файлы с .gitattributes
export-ignore
, попробуйте git checkout
mkdir /path/to/checkout/
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout -f -q
-f
При проверке путей из индекса, не сбой при unmerged
записи; вместо этого необработанные записи игнорируются.
и
-q
Избегайте многословия
Кроме того, вы можете получить любую ветвь или тэг или из конкретной ревизии, например, в SVN, просто добавив SHA1 (SHA1 в Git эквивалентен номеру ревизии в SVN)
mkdir /path/to/checkout/
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout 2ef2e1f2de5f3d4f5e87df7d8 -f -q -- ./
/path/to/checkout/
должно быть пустым, Git не будет удалять файлы, но будет перезаписывать файлы с одинаковыми именами без предупреждения
UPDATE:
Чтобы избежать обезглавленной проблемы или оставить нетронутым рабочий репозиторий при использовании извлечения для экспорта с тегами, ветвями или SHA1, необходимо добавить -- ./
в конце
Двойная черта --
сообщает git, что все после черточек являются путями или файлами, а также в этом случае git checkout
не меняет HEAD
Примеры:
Эта команда получит только каталог libs, а также файл readme.txt
из этого коммита
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout fef2e1f2de5f3d4f5e87df7d8 -f -q -- ./libs ./docs/readme.txt
Это создаст (перезаписать) my_file_2_behind_HEAD.txt
два коммита за головой HEAD^2
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout HEAD^2 -f -q -- ./my_file_2_behind_HEAD.txt
Чтобы получить экспорт из другой ветки
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout myotherbranch -f -q -- ./
Обратите внимание, что ./
относительно корня хранилища