Во-первых,
git status --porcelain=v1 -uno | cut -c4-
можно использовать для получения списка отслеживаемых имен файлов, поэтапного или неустановленного;
git status --porcelain=v1 -uno | grep -e '^.[^ ]' | cut -c4-
можно использовать вместо этого, если вы хотите пропустить постановку files.
Затем вы можете объединить упомянутые вами команды (git log -1 --format=%cd
и date -r
) в псевдоним git с bash
однострочным :
$ git config --global alias.lastdates '!f(){ if [ $# -gt 0 ]; then printf "%s\n" "$@"; else git status --porcelain=v1 -uno | grep -e '\''^.[^ ]'\'' | cut -c4-; fi | tr '\''\n'\'' '\''\0'\'' | xargs -0 bash -c '\''for arg; do echo -e "$arg:\n $(git log -1 --format=%cd --date=iso-strict HEAD -- "$arg") -> $(date -Is -r "$arg" 2>/dev/null || echo "N/A")"; done'\'' bash; }; f'
$ git lastdates
$ git lastdates file-names…
Для получения дополнительных сведений
, чтобы немного уточнить сценарий:
$ git config --global alias.lastdates '!f(){ \
шаблон - см., Например, на этой странице
if [ $# -gt 0 ]; then printf "%s\n" "$@"; \
обрабатывать file-names…
аргументы (выводить каждый из них в отдельной строке)
else git status --porcelain=v1 -uno | grep -e '\''^.[^ ]'\'' | cut -c4-; fi \
тот же код, что и выше, без кавычек
| tr '\''\n'\'' '\''\0'\'' | xargs -0 bash -c \
передавать каждую строку (имена файлов, может содержать пробелы) в следующий скрипт
'\''for arg; do \
итерация по каждому аргументу (имя файла)
echo -e "$arg:\n $(git log -1 --format=%cd --date=iso-strict HEAD -- "$arg")
распечатать имя файла и дату фиксации из текущей ветки (HEAD
)
-> $(date -Is -r "$arg" 2>/dev/null || echo "N/A")"; done'\'' \
распечатать дату имени файла или N / A в случае ошибки (если файл был зафиксирован, а затем удален)
bash; }; f'
шаблонный код - это s последняя строка bash
необходима, так как она будет продвигаться как $0
при запуске "встроенного скрипта" (bash -c "…" bash other-arguments…
)