каталог автозаписи в git - PullRequest
       2

каталог автозаписи в git

2 голосов
/ 24 февраля 2010

Экспозиция:

  1. Я не делаю все так часто; только после большой работы.
  2. Иногда я делаю глупости, например, «rm -f blah.hpp», когда имею в виду «rm -f blah.cpp»
  3. Я использую Zsh
  4. Я хотел бы настроить что-то в моем zsh precmd для выполнения "git add ** / *; git commit -a -m 'auto log ...'"

Теперь вот проблема: Многие из этих коммитов являются ложными. В какой-то момент в будущем (например, через 24 часа) я бы хотел убить все эти бесполезные промежуточные автокоммиты.

Если ваше решение требует, чтобы я немного изменил свой рабочий процесс git - это нормально. Я готов внести изменения, чтобы настроить автокоммит.

Ответы [ 2 ]

1 голос
/ 24 февраля 2010

Требуется автоматический коммит в стиле «моментального снимка», который сквош сбрасывается, когда у вас есть настоящий коммит.

Вот моя грубая идея:

  1. Считайте master вашей "официальной" шкалой времени коммита и работайте в ветви функций. (В любом случае, это довольно ортодоксальный рабочий процесс.)
  2. Работа в так называемой ветви функций, которая делает автоматические снимки (с помощью предварительной команды zsh)
  3. Когда вы будете готовы к (человеческому) принятию, объедините все автоматические снимки из вашей функциональной ветви в мастер с --squash и подтвердите с соответствующим сообщением.

Для этого могут потребоваться некоторые псевдонимы как в zsh, так и в git, но я думаю, что это может сработать. Вот несколько грубых идей, ключевым из которых является git merge - сквош. (Также, извините, я говорю только на Bash.)

# I type this manually when I start work in the morning.
start-snapshotting () {
    git checkout -b auto-snapshots master
    PROMPT_COMMAND=git-snapshot
}

git-snapshot () {
    branch=`git symbolic-ref HEAD`
    [ "$branch" = "refs/heads/auto-snapshots" ] || return 1

    git add . && \
    git status > /dev/null &&
    git commit -m 'Automatic snapshot'
}

# Do a real commit that I am interested in preserving.
# Parameters are passed unmodified to "git commit"
commit () {
    git checkout master && \
    git merge --squash auto-snapshots && \
    git commit "$@" && \
    git branch -D auto-snapshots && \
    git checkout -b auto-snapshots master
}

# I type this when I am done coding.
stop-snapshotting () {
    unset PROMPT_COMMAND
    git checkout master && \
    git branch -D auto-snapshots
}

Имейте в виду, что будет тонн граничных случаев, таких как файлы, которые вы должны были добавить в .gitignore, и я уверен, что многие другие. Но я думаю, что это может сработать.

0 голосов
/ 24 февраля 2010

С Git1.7:

  • Вы можете сделать авто-фиксацию с сообщением, начинающимся с fixup!
  • каждые 24 часа вы можете выполнить git rebase --interactive --autosquash, чтобы подавить все автоматические коммиты и , игнорируя их сообщения журнала.

Подробнее см. .

Конечно, время от времени делайте явный коммит с соответствующим сообщением (для «настоящих» коммитов), когда вы начинаете задачу: все остальные «автоматические» коммиты будут подавлены с первым коммитом; *

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