タグ付けされた質問 「versioning」

バージョン管理は、同じソフトウェアの連続するバージョンを、一意のバージョン名または一意のバージョン番号を使用して識別する方法です。

2
重要なバグを修正する際のセマンティックバージョニング
私は現在、多くのパブリックな用途があるライブラリを管理しており、セマンティックバージョン管理について質問がありました。正しく実装されていないライブラリのかなり重要な部分をリファクタリングしたい-そして常に正しく実装されていない。ただし、これを行うと、パブリックAPIが変更されることになり、これは大きな決断です。 私が行いたい変更は、イテレータの使用方法を中心に展開します。現在、ユーザーはこれを行う必要があります。 while ($element = $iterator->next()) { // ... } 少なくともPHPのネイティブIteratorインターフェイスでは、これは正しくありません。これに置き換えたい: while ($iterator->valid()) { $element = $iterator->current(); // ... $iterator->next(); } これは次のようなものです: foreach ($iterator as $element) { // ... } トムのセマンティックバージョニングのガイドを見ると、パブリックAPIへの変更(つまり、下位互換性のないもの)はメジャーリリースを正当化すべきであると明確に述べています。したがって、ライブラリは1.7.3から2.0.0にジャンプしますが、これは私にとってはあまりにも大きな一歩です。修正される機能は1つだけです。 最終的に2.0.0をリリースする計画はありますが、ライブラリを完全に書き直し、多数のパブリックAPIの変更を実装したときだと思いました。このリファクタリングの導入は、メジャーバージョンリリースを保証しますか?私は本当にそれがどのように見えるかわかりません-私は1.8.0または1.7.4としてそれをリリースすることをより快適に感じます。誰かアドバイスがありますか?

4
新しいバージョンをプッシュする際のデータベーススキーマ変更の処理
重い開発の時代には、データベーススキーマは急速かつ継続的に変化し、ベータビルドへの毎週のプッシュが来るまでに、スキーマは大きく変化したため、唯一可能な賢明なオプションは、可能な限りすべてのテーブルを破棄することですdevデータベースから新しいバージョンをコピーします。明らかに、これは起動後は機能しません。プロダクションデータの削除は災害のレシピであるため、あるバージョン/リビジョンから別のバージョン/データベーススキーマへの変更を管理するための戦略はどこにあるのでしょうか。 私が見つけたまたは経験したもの: あるデータベースから別のデータベースへの直接的な核ダンプ(今私がやっていること) スクリプトまたは手動で実行されるSQLステートメントを含むUPDATE.sqlファイルを維持します。 アクティブなデータベースで対応する「db-schema-version」値を持つupdate.phpファイルを維持する 3番目のオプションは最も賢明な方法のようですが、不完全に構築されたSQLクエリがスクリプトの途中で失敗し、データベースが半分更新された状態のままになり、バックアップの復元が必要になる可能性がまだあります。 それは問題ではないように見えますが、チームとしてphpMyAdminを使用しているため、実際に実行されます。実行されたSQLステートメントをコピーしてupdate.phpファイルに貼り付けることを忘れないでください。別のページに移動したら、SQLステートメントを手動で書き直すか、変更を元に戻して再度実行する必要があります。 私が望んでいるのは、確立された開発ワークフローに影響を与えないソリューションですか?

4
高速なメジャーバージョンバンピングは、デザインの悪さの証拠ですか?
私は数ヶ月前にジュニアプログラマーとして仕事を始めました。私たちが取り組んでいるシステムは、2年ほど実稼働しています。私はシステムと設計の物inいには関与していませんでした。 私が気づいたことの1つは、システムのメジャーバージョンがすでに11.YZであるということです。他のシステムやライブラリでの作業経験から、製品がメジャーバージョンをそれほど速く動かしたのを見たことはありません。1.XYで長年使用されている製品がありますが、まだ機能とバグ修正を受けています。 セマンティックバージョニングが適切に使用されていると仮定すると、これは、システムがほぼ4か月ごとに重大な重大な変更を行うため、設計が不十分であることを示していますか?

2
セマンティックバージョニングでは、バージョン番号に4つのコンポーネントを使用できますか?
私が見たセマンティックバージョニングのすべての例は、使用中の3つのコンポーネントを示しています。ピリオド文字は2つまでです。では$DAYJOB、リリース番号で4つのコンポーネントを使用しています。 5.0.1.2 セマンティックバージョニングはこれを許可しますか? そして、より高レベルでより議論の余地のある副質問として、それは本当に重要なのでしょうか?セマンティックバージョニングを実施するのは良い考えだと思い始めましたが、最終的にはPCIなどのエンティティがそれをオーバーライドします。 PCIコメントについて明確にすべきでした。問題は、主要コンポーネントとマイナーコンポーネントが変更されたときに監査とそのコストが影響することであり、必ずしも真の新機能ではありません。たとえば、支払いに関連する機能が導入された場合、PCIのマイナー番号を増やします。ただし、GUIの何かに関連するまったく新しい機能を追加しても、追加されません。パッチのみが変更されます。したがって、この場合、他の誰かがそれらの決定を下すため、開発者としての問題について実際には発言権を取得しません。

3
REST APIのバージョン管理。各APIには独自のバージョンがあります
URLのREST APIのバージョンを指定することは非常に一般的です。具体的には、パスの先頭、つまり次のようなものです。 POST /api/v1/accounts GET /api/v1/accounts/details ただし、バージョンが各APIに関連付けられているデザインは見ていません。つまり、各APIのバージョンを個別に管理します。すなわち: POST /api/accounts/v2 GET /api/accounts/details/v3 このアプローチを使用すると、破壊的な変更が必要なときに特定のAPIのAPIバージョンをインクリメントします。API全体のバージョンをインクリメントする必要はありません。 一般的なスタイルの代わりにこのスタイルを使用することの欠点は何ですか?

5
ユーザーが機能だと思ったバグをどのように処理しますか?
質問: エンドユーザーが機能だと思ったバグに対処する適切な方法は何ですか? 精緻化: かなりの割合のユーザーが機能として期待している場合、より安定させるために「未修正」または「修正済み」のままにしておくべきだと思いますか?ただし、ユーザーのごく一部が0.1%または1%などの機能であると期待している場合は、このバグを修正する必要があります。 理論的には、これはマイナーなバグ修正であるため、セマンティックバージョニングで考慮されるようにPATCHとして認定できます:xyZ それが文書化されている限り、(機能として意図されていないので)PATCHとしてまだ資格がありますか? 編集:この特定のケースでは、他の開発者が使用する内部使用ライブラリのAPIのバグです。

2
ファイル名の一部としてのバージョン番号
一部のソフトウェアには、ファイル名の一部としてバージョン番号が含まれていますが、他のソフトウェアには含まれていません。私は後者のタイプにもっと慣れており、それはより一般的だと思いますが、前者のタイプはjavascriptライブラリで時々見ます。たとえば、jQueryのファイル名はのjquery-2.1.0.js代わりに似ていますjquery.js。これらの種類のファイルを更新するたびに、これらのファイルを読み込む他のプログラムの場所を探し、それらが参照するファイル名を変更し、これらのライブラリの古いバージョンを手動で削除する必要があります。それは私にとって不便なので、ファイルの名前を変更してバージョン番号を除外し、ファイル名にバージョン番号を含めないようにします。 これらの数字は何らかのバージョン管理のためのものではないかと疑っていますが、いつどのように使用されるかは明確ではありません。 ファイル名にバージョン番号を含めることの長所と短所は何ですか? ソフトウェアまたは言語のどの領域がファイル名にバージョン番号を使用し、どの領域/言語が使用しないかについて事実上のコンセンサスはありますか?もしそうなら、その理由はありますか?

5
依存ソフトウェアコンポーネントのバージョン番号付けのベストプラクティスを探している
相互に依存しているソフトウェアコンポーネントのバージョン番号付けを行うための適切な方法を決定しようとしています。 もっと具体的に見てみましょう: ソフトウェアコンポーネントAは組み込みデバイスで実行されるファームウェアであり、コンポーネントBは通常のPC(Linux / Windowsマシン)用のそれぞれのドライバーです。これらは、カスタムプロトコルを使用して互いに通信しています。当社の製品は開発者も対象としているため、両方のコンポーネントの安定版と不安定版(実験版)を提供します(ファームウェアはクローズドソースで、ドライバーはオープンソースです)。私たちの最大の困難は、通信プロトコルでAPIの変更を処理する方法です。 ドライバーに互換性チェックを実装している間(ファームウェアバージョンがドライバーのバージョンと互換性があるかどうかをチェックします)、バージョン番号付けの複数の方法について議論し始めました。 私たちは1つの解決策を思いつきましたが、車輪を再発明したいとも感じました。これがプログラマー/ソフトウェア開発者コミュニティーからフィードバックを得たい理由です。これはよくある問題だと私たちは考えているからです。 だからここに私たちのソリューションがあります: 広く使用されているmajor.minor.patchをフォローする予定ですバージョン番号、安定/不安定バージョンには偶数/奇数のマイナー番号を使用するです。APIに変更を導入する場合、マイナー番号を増やします。 この規則は、次の状況例につながります。 現在の安定版ブランチは1.2.1で、不安定版は1.3.7です。現在、unstableの新しいパッチによりAPIが変更され、新しい不安定なバージョン番号が1.5.0になります。不安定なブランチは安定していると見なされます。たとえば、1.5.3では、1.4.0としてリリースします。 以下の関連する質問のいずれかに対する回答があればうれしいです。 上記の問題を処理するためのベストプラクティスを提案できますか? 私たちの「カスタム」慣習は良いと思いますか? 説明されている規則にどのような変更を適用しますか?
15 versioning 


1
Javaバージョン間の違いの概要 [閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 2年前に閉店。 この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答やインタラクションを受け入れていません。 ソフトウェア開発に関して、Javaバージョン間の主な違いは何ですか?プログラミングに関連する最も重要な変更点の概要はどこにありますか? http://www.oracle.com/technetwork/java/javase/releasenotes-136954.htmlなどのリリースノートは読みにくい場合があります。 たとえば、Java 1.5には「for each」という新しいコード構造があります。
14 java  versioning 

3
マルチリポジトリ環境でのパッケージおよびバージョン戦略
私たちは、独自のgitリポジトリを管理する複数のチームを持つ小規模企業です。これはWebプラットフォームであり、各チームの成果物は夜間テストのために1日の終わりに展開されます。バージョン管理とパッケージングに関するプロセスを形式化しようとしています。 すべてのチームには、日々の開発を行うマスターブランチがあります。各チームの品質保証メンバーは、チームの変更による成果物を、すべてのコンポーネントがシェフによって結合されるテストベッドに展開することを望んでいます。アーティファクトはtarballですが、それらをRPMに変換して、バージョンについて正しく考え、推論できるようにします。 リリースプロセスには、各gitリポジトリの開発ブランチ(ほとんどの場合マスター)からリリースブランチを切り離すことが含まれます。これは、成果物のセットでテストとサインオフを実行する品質保証に与えられます。 たとえば、これは関連するリリースブランチを持つ典型的なgitリポジトリです。 0-0-0-0-0-0-0-0-0-0 (master) | | 0 0 (rel-1) | 0 (rel-2) 開発ブランチから来るパッケージのバージョン管理を実行するスキームを見つけようとして立ち往生しています。各リポジトリのmasterブランチに過度にタグを付けたり、タグをリリースブランチのみに制限したりするのは望ましくありません。ただし、標準のyum / rpmセマンティクスを使用して、テストマシンにデプロイされたパッケージを照会できる必要があります。masterブランチにタグがない場合、開発バージョンはどのようになりますか?私git describeはビルドバージョンの有用な表現を提供できることを理解していますが、ブランチ上のさまざまなリリースポイントがタグ付けされている場合はうまく機能します。 EDIT1:@ Urban48の回答に応えて リリースプロセスについてもう少し説明する必要があると考えました。この議論のためにmaster、すべてのリポジトリにブランチがあると仮定しましょう。このmasterブランチは開発ブランチと見なされ、CI-CD対応の自動化されたQA環境に展開されます。これは、マスターの安定性を確保するために夜間テストのサブセットが実行される場所です。リリースブランチをカットする前に、このジョブのパイプラインを確認します。リリースブランチは短命です。リリースブランチを(安定したマスターから)カットした後、完全なリグレッションが実行され、修正が行われ、運用環境に展開されたとします。これには約1週間かかります。ほぼ2週間ごとに実稼働環境にリリースします。 機能ブランチは常にマスターから切り離され、CI-CD安定性チェックを受けるマスターとマージする前に、ある程度の開発者テストを受けます。 修正プログラムは(リリースブランチからカットされた)修正プログラムブランチで作成され、本番環境への影響を最小限に抑えて展開されます。 リリースおよびホットフィックスブランチのバージョン管理戦略は、semverに従います。QAサイクル中のリリースブランチはv2.0.0-rc1、v2.0.0-rc2などのバージョンを通過し、最終的にQAサインオフがになりv2.0.0ます。 バージョンがになるリリースブランチ(およびマスター)にマージされる小さな機能のドットリリースを行うことがありますv2.1.0。また、ホットフィックスはv2.1.1パターンを想定しています。 ただし、問題はこれらのブランチをバージョン管理することではありません。このバージョン管理スキームをまったく変更しないことをお勧めします。唯一の変更点は、開発ブランチ、つまり 主人。CI-CD環境で、以前のリリースから実稼働環境に存在するバージョンを確実に示す方法を教えてください。これは、理想的にはスマートgitタグ付けによって行われますが、masterブランチに過度にタグ付けしないものが推奨されます。

2
git、maven、およびjenkins-バージョン管理、開発、およびリリースビルドのワークフロー
git、maven、およびjenkinsを使用して次のことを行うための好ましい方法は何ですか: 「dev」ブランチと「release」ブランチを維持したいアプリケーションを開発しています。ジェンキンスに両方を構築してほしい。リリースアーティファクトのバージョンが1.5.2になり、開発ビルドが0.0.1-SNAPSHOTになるだけになる可能性があります。2つの異なるpom.xmlファイルを持つ必要はありません。 プロファイルを調べましたが、アーティファクトのバージョンを変更できないようです。私が見た1つの方法は、テストビルドに「修飾子」を追加することです。もちろん、ファイルの名前を変更することもできます。これは、アプリがスタンドアロンのものであるため、これに関する実際のアーティファクト情報は重要ではないからです。 これを行うための好ましい方法は何ですか?または、これをどのように行いますか?

3
MySQLデータベースでリレーショナルデータをバージョン管理するためのパターン?
ユーザーがレコードを編集し、それらのレコードの過去のバージョンを表示できるプロジェクトのアプローチを見つけようとしています。リストを使用した、簡単なスキーマの例を次に示します。 TABLE list ( id int auto_increment primary key, user_id int, title varchar(255) ); TABLE list_tasks ( id int auto_increment primary key, list_id int, title varchar(255), order int, is_complete tinyint ); したがって、ユーザーがリストにアクセスして、リストにいくつかの編集を加え(タスクの追加または削除、タスクの並べ替え、完了のマーク付け、名前の変更など)、保存します。この時点で、リストとタスクの「バージョン2」を生成し、以前のバージョンを表示できるようにしますが、リストにアクセスするときは常に最新バージョンを取得します。 MySQLデータベースでこのようにバージョン管理データを処理するための一般的なアプローチ/設計パターンはありますか?
12 mysql  versioning 

6
共有ライブラリの分岐およびバージョン管理戦略
これらの 投稿は関連しているように見えますが、私の脳は溶け始めています:P 私の雇用主はソース管理の使用を開始しました。主に、彼らがより多くの開発者を雇う前に、「リポジトリ」は主に自宅で働く孤独な開発者のハードドライブだったからです。彼が書いた.NETコードはすべてまとめてチェックインされ、多くの重複した(読み取り:コピーアンドペースト)機能があります。現時点では、SCMシステムは栄光のバックアップです。 重複したコードの一部を共有ライブラリに引き込みたいです。元のリポジトリはそのままにしておき、何も壊さないようにします。必要に応じて既存のコードを移動および/またはリファクタリングできます。それで、ライブラリを含む新しいコードのためだけにリポジトリを設定しました。 私の問題は、過度のプロセスに悩まされることなくライブラリをバージョン管理することを中心にしています。ソリューションが生産性に影響を与え始めた場合、うまく落ちます。 私の強迫観念での理想的な解決策は、ライブラリを個別にビルドし、各依存プロジェクトを意図的に選択した互換性のあるバージョンに対してビルドすることです。そのようにして、どのクライアントがどのライブラリのどのバージョンを持っているか、バグをより確実に再現でき、製品とライブラリの独立したリリースブランチを維持でき、共有コードを変更するときに互いのプロジェクトを壊さないようにできます。 これにより、特に自宅で働く開発者にとっては、ライブラリの更新が面倒になります。少なくとも当初は(最終的に)共通部分をまとめると、ライブラリが急速に変化することを期待しています。私はこれを完全に考えすぎている可能性が高く、最新のライブラリコミットに対してすべてを構築するだけで構いませんが、少なくとも一部のコンポーネントを個別にバージョン管理する必要があると判断した日には備えたいと思います配布されました。一部のライブラリをGACにインストールする必要があるという事実により、バージョン管理は特に重要になります。 だから私の質問は:私は何が欠けているのですか?1つのソリューションに固執しているように感じますが、現在、変更をよりスムーズにするバリエーションを見つけようとしています。以前、この種の問題を解決するためにどのような戦略を使用しましたか?この質問はあちこちにあることを理解しています。不確実な点を整理し、明確にするために最善を尽くします。 そして、私はMercurialを使いたいと思っていますが、私たちはすでに集中型商用SCM(Vault)にお金を費やしており、切り替えはオプションではありません。また、ここでの問題は、バージョン管理ツールの選択よりも深くなると思います。

5
プロジェクトを分岐しました。バージョン番号はどこから始まりますか?
私はプロジェクトを分岐し、その多くを変更しました。この分岐は、ここでの小さな機能の変更や、そこに埋められたバグの修正ではなく、かなり大きな変更です。ほとんどのコアコードのみが共有されます。 このプロジェクトはv2.5.0で分岐しました。しばらくの間、v3.0でフォークのバージョン管理を開始しました。ただし、これが正しい方法かどうかはわかりません。主にそのプロジェクトがv3.0に到達すると、混乱するからです。しかし、私はv1.0またはv0.1からやり直したくありません。これは、プロジェクトの初期段階、不安定性、および非検索性を意味するためです。ほとんどのコアコードは非常に洗練され安定しているため、これは事実ではありません。 私は何をすべきか本当に失望しているので、ここで尋ねます:この種の状況に対処する標準的な方法は何ですか?ほとんどの分岐は最初からやり直したり、バージョン番号を上げたり、私が知らない何かをします。
12 versioning 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.