8

作業中のプログラムを 30 分ごとに自動的にコミットするようにコンピューターを構成したいと考えています。私はsvnリポジトリを使用しているので、30分ごとに「svn ci」を実行するスクリプトだけでも問題ありません。問題は、その方法がわからないことです。

誰かが私に教えてくれるか、この定期的なコミットを機能させることができる何かに私を導くことができますか?

前もって感謝します。

編集: 申し訳ありませんが、なぜ私がこれをやりたいのかについて人々を混乱させたようです. 私がこれをやりたい唯一の理由は、私の講師が私たちのコードが時間の経過とともにどのように発展するかを知りたがっており、この目的のためにsvnを使用するのは素晴らしい考えだと思ったからです. 最新のコミットが機能するかどうかは問題ではありません。時間の経過とともにコードに加えた変更を表示するだけです。

4

7 に答える 7

12

明らかな世論に反して、これは割り当てのコンテキストでのsvnの優れた使用法だと思います。

kdesvn(またはさらに良いのはtortoisesvnですが、これはWindowsのみです)のようなツールは、ログビュー、diff、および非難のビジュアルで何が起こっているかについての優れた洞察を提供する可能性があります。

ubuntuを使用している場合は、作業中のコンソールとは別のコンソールからこのbashスクリプトを実行します。

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

        # Wait until next commit time
        sleep 1800
done
于 2009-04-17T08:27:34.157 に答える
6

シェル スクリプトを実行する cron ジョブを試すことができます。どのOSを使用していますか?

しかし、なぜあなたがこれをやりたいのか、私は興味があります。コミットは、時間間隔に基づくのではなく、機能またはバグ修正の一部で構成する必要があります。(ファイルのグループに対する) 変更の途中でコミットする可能性が高く、リビジョンが役に立たなくなります。

于 2009-04-17T03:42:18.600 に答える
5

このような一連の自動コミットでバージョン管理システムを汚すことはありません。しかし、バージョン管理システムを使用してその情報を提供するという考えには同意します。

次に、私の提案は、ソフトウェア用のリポジトリを使用し、自動コミットの保存用に別のリポジトリを使用することです。作業が完了したら、メイン リポジトリ内のすべての自動コミットを 1 つの論理コミットにマージします。

git では、次のようにします。

  1. Repo 'foo': メイン リポジトリ
    1. refs/heads/...: 開発ブランチの場所
    2. refs/sessions/...: ダーティ コミットのある作業の場所。
  2. あなたの作業コピー:
    1. 「ギット初期化」
    2. 「git remote add foo git://foo/...; git fetch foo」
  3. ブランチを作成します: "git checkout -b bar foo/master"
  4. ブランチの先頭にタグを付ける: "git tag barbegin"
  5. スクリプトを有効にします: "while true; do git add -A .; git commit -m 'autocommit'; done"
  6. 私は cron ジョブを使用しないので、自動コミットを簡単にアクティブ化/非アクティブ化できます。
  7. あなたの仕事をする
  8. 作業が完了したら、スクリプトを無効にします
  9. 保留中の変更をコミットする
  10. 現在、ブランチ bar に多くの自動コミットがあり、ブランチの最初のコミットに barbegin でタグを付けています。
  11. 自動コミットを公開します。
    1. 「gitタグベアエンド」
    2. "git push foo barbegin:refs/sessions/your user id/the session id/begin"
    3. "git push foo barend:refs/sessions/your user id/the session id/end"
  12. これで作品が公開され、講師がアクセスできるようになりました
  13. foo リポジトリを更新するには:
    1. 「git rebase -i --onto barbegin barbegin」を実行し、こちらの説明に従って進めます
    2. 私はすべてのコミットを押しつぶします。「最終的には、1 つしかありません」。
    3. "git push foo bar:master" # 1 つのコミットのみがプッシュされます
  14. クリーニング:
    1. 「git tag -d barbegin」
    2. 「git tag -d barend」
    3. 「git ブランチ -d バー」

結局のところ、この種のデータでは有用な情報が収集されない可能性があると思います。したがって、このワークフローを回避しようとします。しかし、本当に必要な場合は、そのようにします。

于 2009-04-17T11:44:36.023 に答える
5

定期的なスケジュールでコミットを設定することは、特に良い考えではないと思います。特に、テストと継続的インテグレーションを開始する場合はなおさらです。設定した間隔でコミットすると、ビルドが中断されます。これは、時間枠内に変更セットを完了するという保証がないためです。

自動コミットする場合のより良い方法は、コミットをビルドプロセス自体の一部にすることです。ビルド プロセスの最後のステップをリポジトリへのコミットにするだけです。そうすれば、ビルドが失敗しても、ガベージをコミットしません。

すべての種類の make で完全に可能であり、Visual Studio には、このようなことを行うように設定できるビルド前およびビルド後のイベントがあることを知っています。したがって、最新の IDE のほとんどがこれを処理できると確信しています。

特にこの問題に関する特別な考慮事項として
、コミットフックをプロセスの最初に移動して、いつ失敗したのか、どのようにしてエラーを修正したのかを追跡できるようにします。

于 2009-04-17T03:45:12.463 に答える
2

私は Subversion を使用しますが、代わりに単一の変更に取り組み、それらをリポジトリにコミットする習慣を身につけます。

このようにして、講師は、必要に応じて、が変わったかだけでなく、なぜ変わったのかを見ることができます。これは、私が想像するよりもはるかに便利です。

于 2009-04-17T08:45:00.213 に答える
2

このレシピを試すことができます: http://code.activestate.com/recipes/577570-watch-directory-and-do-periodic-commits-to-subvers/

于 2011-02-10T14:00:45.760 に答える
1

UNIX のフレーバーで実行している場合は、一定の間隔でコマンドを実行するcronジョブを作成することを検討してください。

于 2009-04-17T03:41:29.257 に答える