Поместите список измененных файлов в сообщение git commit - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь добавить псевдоним к моему .gitconfig, который автоматически добавит все измененные файлы в текущем репо к сообщению о фиксации.

Я пытался работать с выводом git status --porcelain, используя cut и awk.

Я получил awk на работу, но я уверен, что есть лучшее решение, которое даст более приятное сообщение о коммите.

# in my .gitconfig
g = !git commit --all --message "edited:$(git status --porcelain | awk '{printf \"%s%s\",(NR>1?\",\":\"\"),$2} END{print \"\"}')"
# on the command-line
git commit --all --message "edited:$(git status --porcelain | awk '{printf \"%s%s\",(NR>1?\",\":\"\"),$2} END{print \"\"}')"

Начиная с git log, я вижу сообщения о коммите, например edited:dir1/file1,dir2/file2.

Я хотел бы очистить код и / или улучшить сообщение о фиксации.

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Эта информация уже доступна в вашем коммите. Вам просто нужно запустить git log --stat, чтобы увидеть его.

Я использую это так часто, что я определил для него псевдоним .gitconfig:

[alias]
    ls = log --stat

Поэтому, когда я использую git ls, я получаю статистический вывод.

0 голосов
/ 07 января 2019

Я придумал решение, которое делает именно то, что я хочу, но оно довольно ужасно.

Вот как это выглядит в моем .gitconfig:

g = "!f() { git commit -am \"$(echo $@)\" && git push; }; f" "$([ -z \"$(git status --porcelain | grep '^\\s\\?A\\s')\" ] || git status --porcelain | grep '^\\s\\?A\\s' | awk 'BEGIN{print \"Added:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?C\\s')\" ] || git status --porcelain | grep '^\\s\\?C\\s' | awk 'BEGIN{print \"Copied:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?D\\s')\" ] || git status --porcelain | grep '^\\s\\?D\\s' | awk 'BEGIN{print \"Deleted:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?M\\s')\" ] || git status --porcelain | grep '^\\s\\?M\\s' | awk 'BEGIN{print \"Modified:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?R\\s')\" ] || git status --porcelain | grep '^\\s\\?R\\s' | awk 'BEGIN{print \"Renamed:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')";

Извините, если мой вопрос не был ясен.

Идея в том, что я могу просто набрать от git g до

  1. добавить изменения в отслеживаемые файлы,
  2. commit (с наполовину приличным сообщением) и
  3. толчок.

Пример сообщения о коммите:

Added: file1, file2 Deleted: trash, rubbish Modified: work_in_progress

0 голосов
/ 05 января 2019

Если вы используете интерфейс командной строки для git commit (поведение по умолчанию), вам просто нужно раскомментировать соответствующие строки, которые уже сгенерированы Git. Найдите строку с Changes to be commited, и под этой строкой должны быть строки, обозначающие файлы, которые были изменены / добавлены / удалены / перемещены.

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