2010-02-24 2 views
2

Экспозиция:каталог autorecording в мерзавца

  1. Я не мерзавец совершить все, что часто; только после большой работы.
  2. я иногда делать глупые вещи, как «гт -f blah.hpp», когда я имею в виду «гт -f blah.cpp»
  3. Я использую ЗШ
  4. Я хотел бы создать что-то в моем ЗШ precmd к сделать «мерзавец добавить **/*, мерзавец совершить -a -m 'авто журнал ...»

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

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

+1

Повторите свой рабочий процесс, чтобы совершать более часто. Старайтесь не делать глупых вещей - это больно. В git есть механизмы, позволяющие вам изменять историю; Я должен буду читать то, что они есть, но Google git squash совершает ». –

+1

Если вы автоматически совершаете все, как вы намерены на самом деле совершить что-либо намеренно? –

+0

Я настоятельно рекомендую против автоматических коммитов. Но неясно, каков ваш вопрос, так как автоматические коммиты довольно тривиальны. Вы спрашиваете о методах очистки их от репо? –

ответ

1

Вы хотите, чтобы автоматический «моментальный снимок» фиксировал, что сквош вниз, как только у вас есть подлинная фиксация.

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

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

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

# 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 "[email protected]" && \ 
    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

С Git1.7:

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

См. here for more details.

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