13

私はgitで保持しているウェブサイトを持っています。これはasp.netwebformsWebサイトです(ただし、この質問ではおそらく重要ではありません)。

このウェブサイトは、お客様が2つ(将来的には4つ)のウェブサイトに使用します。ほとんどの機能は共有されています。ただし、web.configやcssを含むフォルダーなど、いくつかのものはWebサイトごとに異なります。

これがコードの簡略化されたバージョンです

| --BackOffice
| \-UI
| --BackOffice.UI
| \-WebControls
| --BackOfficeTests
|-展開
| \-db
| --BusinessLogicLayer
| | --bin
| | --obj
| \ - プロパティ
|-スクリプト
|-ウェブサイト
| | --admin
| | --App_Browsers
| | --App_Code
| | --App_Data
| |-スタイル
| | --web.config

これに適した構造はGitにありますか?

たとえば、BackOfficeコードは完全に共有されます。Stylesフォルダーとweb.configファイルを除いて、Webサイトは共有されます。

マージや分岐が長すぎない構造についての良い提案はありますか?

私はそのような構造を作ろうとしました:

マスター
| --Site1
| --Site2

しかし、あるブランチから別のブランチにコードを移動するときに、チェリーピッキングが多すぎると予測しています。サブモジュールは問題ないのでしょうか、それとも複雑になるのでしょうか。

編集:私の本当に大きな問題は、gitリポジトリから直接デプロイしたいということです。そして、これらのディレクトリ/ファイルに残しておくと、複雑なことをしない限り、マージ中にマージされます(チームの全員にこれを行わせることはできません)。または、これらのファイルを無視して、別の場所から取得する必要があります...

4

3 に答える 3

10

マスターブランチにプロジェクト全体が含まれていると仮定します。

|--BackOffice
|  \--UI
|--BackOffice.UI
|  \--WebControls
|--BackOfficeTests
|--Deployment
|  \--db
|--BusinessLogicLayer
|  |--bin
|  |--obj
|  \--Properties
|--scripts
|--Website
|  |--admin
|  |--App_Browsers
|  |--App_Code
|  |--App_Data
|  |--Styles
|  |--web.config

これで、すべてのWebサイトに共通する変更はすべて、このブランチにコミットされます。

さまざまなサイトに別々のブランチを作成します。例:

マスターブランチから、

git checkout -b site1
git checkout -b site2
git checkout -b site3
git checkout -b site4

これで、サイト固有のファイル、つまりStylesフォルダーやweb.configを変更する場合は、これらのブランチで変更できます。

次に、展開の部分があります。site1をデプロイする場合、マスターに基づいてローカルシステムに一時ブランチを作成し、site1ブランチをそのブランチにマージしてデプロイするとします。最後に、一時ブランチを削除します。

git checkout -b temp
git merge site1

コードをtarまたはzipして、デプロイします。その後、

git checkout master
git branch -D temp

デプロイメントの実行方法を公開したくない場合は、それを実行する小さなシェルスクリプトを作成することもできます。このスクリプトをdeploy.shと呼びましょう。例:

#!/bin/bash

if [ ! $1 ]; then
        echo "Please pass in the name of the site you want to deploy."
        exit 1
fi

#Check if we are on master branch
git status | grep "On branch master"
if [ $? -ne 0 ]; then
        echo "You are not on master. Please execute 'git checkout master'"
        exit 1
fi

#Check if the entered site for deployment actually exists
git branch | grep $1 || { echo "No branch $1 exists for deployment."; exit 1; }

#Update from remote
git checkout -b temp
git merge $1
tar -cvf deploy-$1.tar ./deploy.sh *
[ $? -ne 0 ] && echo "Some problem archiving the files..." && exit 1
git checkout master
git branch -D temp

echo "Please use deploy-$1.tar file to deploy the site. Thanks."

exit 0

./deploy.sh site2と言うと、このスクリプトはバックグラウンドですべてのダーティな作業を実行し、本番サーバーにデプロイできるtarファイルを提供します。

これがお役に立てば幸いです...

于 2012-12-24T03:30:57.647 に答える
6

サブモジュールは、共有BackOfficeコードの優れたソリューションであり、各サイトが親リポジトリとして機能します。

しかし、それは設定ファイルに対応していません。

それらの場合、1つの可能性はコンテンツフィルターですが、これには、さまざまなクライアントの変数の値を格納およびプッシュすることが含まれます。

これらの構成ファイルは、クライアント固有のブランチの親リポジトリに保持するのが最善です。

于 2012-12-13T14:36:36.163 に答える
2

次のように、戦略ポイントのシンボリックリンクと1つまたは両方のサブモジュールを含む「Common」を使用して、「Site」ディレクトリと「Common」ディレクトリを別々に作成する場合があります。

 Project
 |==.git
 |--Site
 |  |--.git
 |  \--Website
 |     |--Styles
 |     \--web.config
 \--Common
    |--.git
    |--BackOffice
    |  \--UI
    |--BackOffice.UI
    |  \--WebControls
    |--BackOfficeTests
    |--Deployment
    |  \--db
    |--BusinessLogicLayer
    |  |--bin
    |  |--obj
    |  \--Properties
    |--scripts
    \--Website
       |--admin
       |--App_Browsers
       |--App_Code
       |--App_Data
       |--Styles -> ../../Site/Website/Styles
       \--web.config -> ../../Site/Website/web.config

役立つレイアウトはこれだけではありません。たとえば、さまざまなサイトで微調整するものを簡単に選択できるようにする必要がある場合は、現在のレイアウトを保持し、「共通」サブプロジェクトを追加して、そこから使用するものを変更せずにシンボリックすることができます。そのようです:

 Site
 |==.git
 |--BackOffice -> Common/BackOffice
 |--BackOffice.UI -> Common/BackOffice.UI
 |--BackOfficeTests -> Common/BackOfficeTests
 |  [...]
 |--Website
 |  |--admin -> ../Common/Website/admin
 |  |--App_Browsers -> ../Common/Website/App_Browsers
 |  [...]
 |  |--Styles
 |  \--web.config
 \--Common
    |--.git
    |--BackOffice
    |  \--UI
    |--BackOffice.UI
    |  \--WebControls
    |--BackOfficeTests
    |--Deployment
    |  \--db
    |--BusinessLogicLayer
    |  |--bin
    |  |--obj
    |  \--Properties
    |--scripts
    \--Website
       |--admin
       |--App_Browsers
       |--App_Code
       |--App_Data
       |--Styles.example
       \--web.config.example

見れば見るほど、最後のものが好きになります。

于 2012-12-15T16:08:07.197 に答える