Чтобы оформить любой файл с «частичным / путем» в его пути + именем из HEAD:
git checkout *partial/path*
Чтобы извлекать файлы из определенных коммитов (здесь --
необязательно):
git checkout abcde -- full/path/to/my/file full/path/to/another/file
Парадоксально, следующая команда не Кассовые файлы , соответствующие pathspec в совершении предписанного в технических заданиях:
git checkout abcde -- *partial/path*
Вместо этого это приводит к error: pathspec '*partial/path*' did not match any file(s) known to git.
Мой вопрос: возможно ли использовать pathspec для извлечения нескольких файлов, используя pathspec от определенного коммита?
Примечание: я понимаю, что git checkout branch file
, вероятно, совершенно отличается от git checkout pathspec
(и также полностью отличается от git checkout branch
), что может объяснить, почему pathspec здесь не работает.
Примечание: следующий псевдоним только частично решает проблему:
[alias] ccps = "!f() { git ls-files $2 | xargs -I {} git checkout $1 -- \"{}\"; }; f"
Это происходит сбой, когда один или несколько файлов были добавлены или удалены в соответствии с указанием пути между текущим коммитом и целевым коммитом.
ОБНОВЛЕНИЕ: следующий псевдоним (вроде) делает то, что я хочу:
[alias] ccps = "!f() { git ls-tree -r --name-only $1 | grep $2 | xargs -I {} git checkout $1 -- {}; }; f"
Проблемы с этим решением:
grep $2
отличается от pathspec (не будет работать с.
and..
and*
).- Это довольно медленно (потребовалось ~ 5 секунд для последовательного
git checkout
57 файлов, возвращаемых изgrep
).
Но в то же время теперь у меня есть доступ к регулярным выражениям, что является плюсом.