Как заставить Subversion (или любую другую программу) выполнять периодические коммиты?

StackOverflow https://stackoverflow.com/questions/758916

  •  09-09-2019
  •  | 
  •  

Вопрос

Я хочу настроить свой компьютер так, чтобы, скажем, каждые полчаса он автоматически фиксировал программу, над которой я работаю.Я использую репозиторий svn, так что даже если бы это был просто скрипт, который запускал 'svn ci' каждые 30 минут, все было бы в порядке.Проблема в том, что я не знаю, как это сделать.

Не мог бы кто-нибудь, пожалуйста, подсказать мне или направить меня к чему-нибудь, что позволило бы мне заставить работать эту периодическую фиксацию?

Заранее благодарю.

Редактировать:Извините, но, похоже, я сбил людей с толку относительно того, почему я хотел бы это сделать.Единственная причина, по которой я хочу это сделать, заключается в том, что мой лектор хочет, чтобы мы знали, как наш код развивается с течением времени, и я подумал, что было бы отличной идеей использовать svn для этой цели.Не имеет значения, работает ли последняя фиксация или нет.Он просто должен показывать изменения, которые я вносил в код с течением времени.

Это было полезно?

Решение

Я бы не стал загрязнять вашу систему контрольных версий такими сериями автоматических коммитов.Но я согласен с идеей использования системы контроля версий для предоставления этой информации.

Тогда мое предложение:используйте репозиторий для вашего программного обеспечения и другой для хранения автоматических коммитов.Когда работа будет завершена, объедините все автоматические фиксации в основном репозитории в одну логическую фиксацию.

С git я бы сделал это:

  1. Репо 'фу':основной репозиторий
    1. ссылки/руководители/...:расположение ваших ветвей разработки
    2. ссылки/сессии/...:расположение вашей работы с грязными коммитами.
  2. Ваша рабочая копия:
    1. "git инициализировать"
    2. "git удаленное добавление foo git://foo/...;мерзавец принеси фу"
  3. создайте ветку:"git checkout -b bar foo/master"
  4. отметьте начало ветки:"git тег барбегин"
  5. активируйте скрипт:«хотя это правда;сделать git add -A .;git commit -m 'автофиксация';сделанный"
  6. Я бы не стал использовать задание cron, поэтому вы можете легко активировать/деактивировать автофиксацию.
  7. делай свою работу
  8. после завершения работы деактивируйте скрипт
  9. зафиксировать ожидающие изменения
  10. теперь у вас есть много автоматических коммитов в панели ветвей, и вы пометили первоначальный коммит ветки с помощью barbegin
  11. опубликуйте свои автоматические коммиты:
    1. "git тег баренд"
    2. "git push foo barbegin:refs/sessions/ваш идентификатор пользователя/идентификатор сеанса/начать"
    3. "git push foo barend:refs/sessions/ваш идентификатор пользователя/идентификатор сеанса/окончание"
  12. теперь вы опубликовали свою работу, и ваш преподаватель может получить к ней доступ
  13. для обновления вашего репозитория foo:
    1. «git rebase -i --onto barbegin barbegin» и действуйте, как описано. здесь
    2. Я бы раздавил все коммиты:«в конце концов, может быть только один».
    3. "git push foo bar:master" # будет отправлен только один коммит
  14. уборка:
    1. "git tag -d барбегин"
    2. "git tag -d баренд"
    3. "git ветка -d бар"

В конце концов, я думаю, что с помощью таких данных невозможно собрать никакой полезной информации.Поэтому я бы постарался избежать этого рабочего процесса.Но если бы это действительно было необходимо, я бы сделал именно так.

Другие советы

Вопреки очевидному распространенному мнению, я считаю, что это отличное использование svn в контексте задания.

Такие инструменты, как kdesvn (или, что еще лучше, tortoisesvn, но это только для Windows), могут дать вам отличное представление о том, что происходит с их представлениями журналов, различиями и визуальными изображениями обвинений.

Если вы используете Ubuntu, запустите этот сценарий bash из консоли, отдельной от той, над которой вы работаете.

#!/bin/bash
while [ 1 ]
do
        # Do the commit
        svn ci --message "Automated commit" ~/yourworkingcopy

        # Wait until next commit time
        sleep 1800
done

Вы можете попробовать задание cron, которое запускает сценарий оболочки.Какая у вас ОС?

Но мне любопытно, почему вы хотите это сделать.Ваши коммиты должны состоять из фрагментов функциональности или исправлений ошибок, а не основываться на временном интервале.Скорее всего, вы зафиксируете изменение (в группе файлов), что сделает ваши изменения бесполезными.

Я не думаю, что установка коммитов по расписанию — это особенно хорошая идея.Особенно, если вы начнете увлекаться тестированием и непрерывной интеграцией.Фиксация изменений через определенные промежутки времени приведет к поломке сборки, поскольку нет никакой гарантии, что вы завершите набор изменений в установленные сроки.

Если вы хотите выполнить автоматическую фиксацию, лучший способ сделать фиксацию частью самого процесса сборки.Просто сделайте последний шаг процесса сборки — фиксацию в репозитории.Таким образом, если сборка завершится неудачей, вы не будете совершать мусор.

Это вполне возможно для всех вариантов make, и я знаю, что в Visual Studio есть события до и после сборки, которые можно настроить на что-то подобное.Поэтому я почти уверен, что большинство современных IDE справятся с этим.

В качестве особого рассмотрения этой проблемы, в частности:
Переместите хук фиксации в начало процесса, чтобы вы могли отслеживать, когда вы совершаете ошибку, и как вы исправляете ошибки.

Я бы использовал Subversion, но вместо этого я бы просто привык работать над отдельными изменениями и сохранять их в репозиторий.

Таким образом лектор, если захочет, сможет посмотреть не только что изменился, но почему это изменило.Я думаю, это было бы гораздо полезнее.

Вы можете попробовать этот рецепт:http://code.activestate.com/recipes/577570-watch-directory-and-do-periodic-commits-to-subvers/

Если вы используете версию UNIX, рассмотрите возможность создания хрон задание для запуска команд через регулярные промежутки времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top