Отображение последней фиксации и даты последнего изменения для файлов с неустановленными изменениями - PullRequest
1 голос
/ 08 мая 2020

Я полный любитель Linux / Terminal, и мне бы хотелось быстро сделать следующие две вещи:

  1. Для всех файлов, которые отображаются как «изменения не поставлены. «когда я делаю« git статус », показывать список каждого имени файла, дату их последней фиксации и дату последнего изменения.
  2. То же, что и # 1, но с возможностью вручную указать файл, для которого я хочу показать последнюю фиксацию и дату последнего изменения.

До сих пор я был возможность настроить псевдоним, который показывает дату последней фиксации для данного файла (хотя в нем не указано имя файла):

alias lastc='git log -1 --format=%cd'

Мне также удалось получить две даты, которые я хочу, в одном go для данного файла с:

lastc do/9_sample_selection.do && date -r "$_"

Но я не знаю, как сделать это последнее действие с более простым псевдонимом (например, lastdates filename), как сделать это для всех файлов, которые появятся при выполнении 'git status' и как отображать имена файлов в выводе рядом с датами.

Любая помощь будет очень принята.

1 Ответ

0 голосов
/ 08 мая 2020

Во-первых,

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…)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...