2

私たちは、優れた開発プラクティスであると期待するものを導入しようとしています。すべてのコミットは、問題追跡システムの問題にリンクする必要があります。(この要件を満たすために新しい問題を作成することはまったく問題ありません。)

問題トラッカー (Redmine) と DVCS (Mercurial) はうまく統合されていますが、1 つの問題があります。開発者がオフライン中に何かをコミットする必要がある場合はどうなるでしょうか。現在、Redmine はオンラインでアクセスされ、Mercurial は TortoiseHG (Windows) またはシェル (Linux) を介してアクセスされます。

Redmine をオフラインで使用できる (問題を表示するだけでなく作成するための) ツール (例: Windows デスクトップ クライアント、商用または無料) を私は知りません。Redmine データベースを各開発者のマシンにコピーすることさえ気にしませんが、データベースを同期するのは簡単ではありません。

私たちは何をすべきか?次のオプションが表示されます。

  1. Redmine から、オフラインでサポートされている課題トラッカーに切り替えます。[Tracがそれほど優れているとは思わない]

  2. Redmine オフラインで問題を作成するためのいくつかのソリューションをハックします。[方法がわからない、問題を解決するのではなく、引き起こすことなく]

  3. コミットは常に既存の問題を参照する必要があるという考えをあきらめてください。[しかし、それはとても良いアイデアのように思えました]

  4. コミットを問題にさかのぼってリンクします。[これには、開発者が各問題の説明を一時的な場所に書き込み、後でそれらを Redmine にコピーしてから、手動で新しい問題をコミットにリンクする必要があります。非効率的でエラーが発生しやすい]

  5. オフライン コミットを禁止します (したがって、オフラインでの作業を禁止します)。[主にオフライン作業を可能にするために DVCS が選択されたことを考えると、ばかげているようです]

あなたのおすすめは何ですか?

4

3 に答える 3

1

オフラインで問題に取り組み、ローカルでコミットすることと、アップストリーム (指定されたサーバーなど) にプッシュすることは別のことです。

前者は redmine にアクセスしなくても実行できます。既存の redmine の問題があるか、新しい問題を作成してコミットに関連付ける必要があります。

変更を上流にプッシュする前に、最後のコミットを編集するか、複数のコミットを 1 つに折りたたむことで、課題 ID を更新できます。後者は、必要に応じて簡単にロールバックできる問題ごとに 1 つのコミット アップストリームがあるため、より適切なオプションである可能性があります。

于 2012-08-17T10:58:29.033 に答える
0

Redmineには、問題を作成するオフライン機能が効果的にあります。新しい問題を受け入れ、電子メールで更新を発行するように構成できます。また、ほとんどの電子メールクライアントはオフラインで動作します(ユーザーがオンラインになるまで、メッセージを送信トレイに一時的に保存します)。

電子メールは、(非常に限定された)オフライン表示モードを提供することもできます。すべての新しい問題と更新について電子メールで通知され、それらの電子メールを別のフォルダーに自動的に移動すると、対応する問題番号を見つけることができます。

これは理想的ではありませんが、redmineがオフラインモードを追加するまで、その場しのぎの解決策として機能します。そしてもちろん、それがあまりにも多くの人によって行われた場合、redmineがうまく解決するための準備が整っていないという競合のリスクがあります(たとえば、2人が問題のステータスを変更しようとしています)。

DVCSと(集中型の)課題追跡システムとの統合には、一般的で避けられない問題が1つあります。2人の開発者が特定の問題を解決し、彼らのコミットをそれにリンクするとします。両方がコミットをredmineに関連付けられたリポジトリにプッシュすると、競合解決プロセス中にソリューションの1つだけが保持されます。この問題は、コミットの1つが本質的に別のコミットによって非推奨になっていることを明確に示すことなく、引き続き個々のコミットにリンクされます。

于 2012-08-19T16:29:06.260 に答える
0

ここでは、特定の問題にリンクされたコミットがあります (バグ修正コミットの場合)。システムはシンプルです:

  1. コミット メッセージでは、角括弧内にバグ番号を入力します。
  2. リリースを行うとき、前回のリリース以降に行われたすべてのコミットを収集します。
  3. 正規表現を使用して、修正されたバグの ID を抽出します。
  4. このリストを使用して、バグ データベースを更新し、変更ログを作成します。

ここでの重要な教訓は、バグ データベースとバージョン管理システムが明示的にリンクされている必要はないということです。構文規則により、簡単に集計して概要を取得できるため、バグ データベースを手動で更新するのが (十分に) 簡単になります。

編集:「オフラインで作業」の部分について。Mercurial は DVCS であり、常時接続することを意図していません。これを受け入れ、ローカル コミットを許可し、オンラインまたはプッシュに戻ったときにバグ データベースを処理します。

于 2012-08-17T09:14:55.610 に答える