Aby pobrać dowolny plik z „częściową / ścieżką” w ścieżce + nazwa z HEAD:
git checkout *partial/path*
Aby pobierać pliki z określonych zatwierdzeń ( --
jest opcjonalny tutaj):
git checkout abcde -- full/path/to/my/file full/path/to/another/file
Przeciwnie, poniższe polecenie działa nie pliki kasowe pasujące do ścieżki w podanym zatwierdzeniu:
git checkout abcde -- *partial/path*
Zamiast tego powoduje error: pathspec '*partial/path*' did not match any file(s) known to git.
Moje pytanie brzmi: Czy możliwe jest użycie ścieżki do pobrania wielu plików przy użyciu pathspec z określonego zatwierdzenia?
Uwaga: Zdaję sobie z tego sprawę git checkout branch file
jest prawdopodobnie zupełnie innym poleceniem git checkout pathspec
(a także zupełnie inny niż git checkout branch
), co może wyjaśniać, dlaczego pathspec nie działa tutaj.
Uwaga: Następujący alias tylko częściowo rozwiązuje problem:
[alias] ccps = "!f() { git ls-files $2 | xargs -I {} git checkout $1 -- \"{}\"; }; f"
To się nie powiedzie, gdy jeden lub więcej plików zostało dodanych lub usuniętych pasujących do ścieżki między bieżącym zatwierdzeniem a zatwierdzeniem docelowym.
AKTUALIZACJA: Następujący alias (rodzaj) robi to, co chcę:
[alias] ccps = "!f() { git ls-tree -r --name-only $1 | grep $2 | xargs -I {} git checkout $1 -- {}; }; f"
Problemy z tym rozwiązaniem:
grep $2
nie jest tym samym co ścieżka ścieżki (nie będzie działać z.
i..
i*
).- Jest raczej powolny (sekwencja zajęła ~ 5 sekund)
git checkout
Zwrócono 57 plikówgrep
).
Ale jednocześnie mam teraz dostęp do wyrażenia regularnego, co jest plusem.
echo *
pomyślnie wywołuje ekspansję i drukuje wszystkie pliki w bieżącym katalogu. Ale bieganieecho *partial/path*
nie pasuje do niczego, a więc drukuje*partial/path*
, czego, jak sądzę, jest tym, co kończy się przekazaniem do git.git checkout abcde -- "*partial/path*"
, który wciąż dajeerror: pathspec '*partial/path*' did not match any file(s) known to git.