Чтобы оформить любой файл с «частичным / путем» в его пути + именем из 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 checkout57 файлов, возвращаемых изgrep).
Но в то же время теперь у меня есть доступ к регулярным выражениям, что является плюсом.
