異なるサーバーの異なるコードベースでGitを使用するにはどうすればよいですか?


11

背景:私は最近会社で一連のプロジェクトを継承しており、それらの処理方法に関するいくつかの基本的な問題を整理しようとしています。つまり、以前の開発者(もはや会社にいない)は、いかなる形式のソース管理も使用せず、ほとんどドキュメントを作成せず、実際には適切な開発プロセスもありませんでした。

そのため、私は3つのサーバーに相当するプロジェクト(開発、ステージング、プロダクション)を手に入れました。これらは、主にWebサイト、アプリケーション、および使用するサードパーティアプリケーションとAPI用に構築されたツールから成り立っています。私が最初に考えたのは、変更と修正が行われる前にこれらすべてをGitに取り込むことでしたが、それを行う最善の方法を見つけるのは困難です。

これまでの多くの開発は、運用サーバーで直接行われたため、各サーバーのコードベースに格差が生じました。すべての違いがどこにあるのかすぐにはわかりません-開発/ステージングに引き継がれないバグ修正と、ステージング/プロダクションに移行していない開発の新機能が見られます。

質問:これらを整理してGitに移動する最良の方法は何でしょうか?コードの違いに対応するためにレポジトリ/ブランチをどのように構成しますか?

実稼働サーバーコードのクローンから開発を継続し、開発/ステージングコードベースを履歴参照として保持することを検討しました。とにかく開発/ステージングコードについて何も知らないことを考えると、これは潜在的に最初のポイントになるでしょうか?各Webサイト、ツール、スクリプトセットなどの本番サーバーのリポジトリを作成し、既存の開発/ステージングコードのブランチを作成するだけで、新しい開発は本番サーバーのコードベースから分岐します。これは理にかなっていますか?


そう、すべてのあなたが開始する前に、左の開発者?
ユアン

はい; この特定のプロジェクトセットの開発者は3人だけでしたが、彼らはかなり長い間この作業に取り組んでいました。私は彼らが突然去ったと言われ、私は彼らが残したものの断片を拾い始めるために連れてこられました。
user9268966

nvie.com/posts/a-successful-git-branching-model」をご覧ください。これはよく使用されるモデルです。
パトリックメヴゼク

1
@RobertHarveyそして?「1人の男」ソフトウェア開発(私)で同じモデルを使用していますが、重要なポイントは、master、dev(elop)、feature-X、hotfix-Yなどのブランチを使用したセットアップです。これは、人とリポジトリの数に関係なく機能します。
パトリックメヴゼク

2
私が言った@RobertHarvey:よく使われます、明らかに100%のユースケースの解決策ではありませんが、使用するモデルを決定する前に読むことは少なくとも有用です。そして、以前の開発者がいたので、一人の男がいつも一人ではないかもしれません... :
パトリックメヴゼク

回答:


10

運用スタッフをmaster新しいリポジトリのブランチにプッシュします。developそれからブランチを作成し、ステージングサーバーをマージします。解決する必要がある競合が発生する可能性があります。これらが解決されたら、別のものを作成するfeature_branchからdevelop、そこに開発サーバーを統合。発生する競合を解決します。

これにより、実稼働環境、ステージング環境、および開発環境を表す3つのブランチが残ります。生産-> master、ステージング-> develop、開発-> feature_branch。したがって、すべての開発は、機能が実行され、テストされ、安定したときにfeature_branchesのみdevelopブランチで行われ、ブランチにマージされます。安定しているため、ステージングとして使用できます。リリースの準備ができたらreleaseブランチを切り、developゆるい端を結び付けて、それをmasterにマージすると、新しいプロダクションビルドができます。

このセットを取得した後、ビジネスのあなたの最初の注文の一つは、マージするべきであるfeature_branchに背中をdevelop、その後*、およびdevelop背面にmaster。ことを念頭に置いてクマfeature_branchにそれをマージする際に未テストコードと機能、運動注意してが含まれていてもよいdevelop、その後とmaster。それが完了すると、すべてのブランチに同じコードが含まれるようになり、本番サーバーで行われた開発はすべて開発「サーバー」に移植されます。

このモデルでは、各プロジェクトは独自のリポジトリにあり、そのリポジトリにはmasterand developブランチがあり、加えfeature_branchesて実行中の作業があります。

編集、コメントに対処する:はい、これはGitflowです。

この戦略(または一般的なGitflow)は、既存の3レベルシステム(本番、ステージング、開発)を、開発から本番までの明確なマージパスに保ちます。この方法でコードベースをインポートすると、本番環境で現状を維持しながら、少なくともマージをテストできるまで、ブランチを同期できます。これにより、いくつかの目標が達成されます。ソース管理でコードを取得し、さまざまなコードベースを同期してマージします(したがって、本番ではバグ修正がなくなり、開発ではなくなります)。そして、多くの人々/チーム/会社によって使用されます)。OPが、Gitflowが彼のプロジェクト/チーム/会社の使用/会社の成長に適していないと判断した場合、


*あなたは、他の機能ブランチをカットし、任意の明白な新機能を削除し、マージすることを望むかもしれないことに支店をdevelop(し、その後にmaster)。これにより、これから行う他のすべてのテストの上に新しい機能をテストする必要がなくなります。


1
GitFlowのように聞こえます。
ロバートハーヴェイ

1
これはちょっとしたカルトの答えです。gitflowは、質問に記載されている問題の解決にどのように具体的に役立ちますか?
コチェッセ氏18年

@MrCocheseは私の編集を見る
-mmathis

最初は、あなたの答えはGitflowの単なる説明のように思えましたが、私が探していたものではありませんでしたが、あなたの編集は実際の質問に答えるために必要なコンテキストを追加しました。Gitflowは状況にふさわしいとは思わないので、Gitflowは使用しませんが、アイデアの背後にあるロジックとその徹底性に感謝しています。先に述べたように、そのコンテキストを提供するために、将来の回答に思考プロセスをさらに追加することをお勧めします。
user9268966

3

staging最初のインポートの最適なベースラインとしてコードを推奨します。これproductionstaging、ホットフィックスにより変更が反映されていないためですが、変更が反映されていない場合ははるかに少ないstagingためですproduction。同様に変更があるdevelopmentではないというstagingの変更ならば、新機能のために、しかし、おそらくはるかに少ないがstagingでませんdevelopment

最初のインポート後にベースラインになりたくないことに注意してくださいstaging。これは、変更が以前に追跡されていないための一時的な状況です。変更を削除するのではなく追加する場合、ブランチ操作はよりスムーズに進みます。最初のインポート後、ニーズに最も適した分岐モデルに切り替えてください。

したがって、stagingコードをstagingブランチにチェックインしてから、を実行してブランチgit checkout -b master stagingを作成し、masterそこに実動コードをチェックインします。次に、git checkout -b development stagingを実行してdevelopmentブランチを作成し、そこに開発コードをチェックインします。

developmentブランチをチェックアウトして、そこにマージmaster ます。これmasterにより、実際に本番環境にあるものの記録として維持しながら、可能性のある膨大な量のマージ競合を解決できます。 development現在、すべての環境からのすべての変更が含まれています。これで、最適な分岐モデルに切り替えることができます。


2

歴史を持つことは良い考えです。最も安定した環境からリポジトリ(または製品ごとに1つ)を作成します。他のブランチまたはブランチを作成します。

高レベル:

  1. 新しいレポを作成する
  2. 本番ベースの作業コピーから:すべて追加、コミット、プッシュ
  3. マスターを新しいディレクトリにチェックアウトする
  4. 追加の環境ごとに XYZ
    1. ブランチを作成 Archive-XYZ
    2. すべてをXYZソースに置き換えます(.gitを除く)
    3. すべて追加、コミット、プッシュ

また、git diff > XYZ.diff実際にコミットしてプッシュする代わりに、この値に懐疑的である場合は、差分をアーカイブします。

どちらの場合でも、各環境で実行しているコードを簡単に比較できる状態で終了する必要があります。この状態を使用して、各プロジェクトの単一の開始点を決定できます。そして、何かが壊れた場合、理論的には3つの環境のいずれかに対して変更を比較することができます。

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