具有多个网站的git中的结构

khe*_*bie 13 git

我有一个网站,我保持git.它是一个asp.net webforms网站(但这可能对这个问题不重要).

该网站由我们的客户用于2个(未来4个)网站.大多数功能都是共享的.但是像web.config和css文件夹这样的一些东西对于每个网站都是唯一的.

这是代码的简化版本

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

Git的优秀结构是什么?

例如,BackOffice代码将完全共享.除了Styles文件夹和web.config文件之外,将共享该网站.

你有一个很好的建议,结构不会使合并和分支太长发?

我试图建立一个这样的结构:

Master
|--Site1
|--Site2

但是,当我将代码从一个分支移动到另一个分支时,我预计会有太多的挑剔.子模块是否正常或是否会使事情复杂化?

编辑:我真正的大问题是我想直接从我的git repo部署.如果我留在这些目录/文件中,它们将在合并期间合并,除非我做一些复杂的事情(然后我不能让团队中的每个人都这样做).或者我将不得不忽略这些文件并从其他地方获取它们......

abh*_*297 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
Run Code Online (Sandbox Code Playgroud)

现在,所有网站共同的任何更改都会提交给此分支.

为各个站点建立单独的分支.例:

从主分支,

git checkout -b site1
git checkout -b site2
git checkout -b site3
git checkout -b site4
Run Code Online (Sandbox Code Playgroud)

现在,只要您想要更改任何特定于站点的文件,即Styles文件夹或web.config,就可以在这些分支中执行此操作.

现在是部署部分.假设您要部署site1,在基于master的本地系统上创建临时分支,将site1分支合并到其中并进行部署.最后删除temp分支.

git checkout -b temp
git merge site1
Run Code Online (Sandbox Code Playgroud)

tar或压缩代码并进行部署.之后,

git checkout master
git branch -D temp
Run Code Online (Sandbox Code Playgroud)

如果您不想公开部署的方式,您甚至可以创建一个小的shell脚本.让我们调用这个脚本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
Run Code Online (Sandbox Code Playgroud)

现在,当您说./deploy.sh site2时,此脚本将在幕后执行所有脏工作,并为您提供可在生产服务器上部署的tar文件.

我希望这是有帮助的...


Von*_*onC 6

子模块是共享的BackOffice代码良好的解决方案,其中每个站点充当父回购.

但这并没有解决配置文件.

对于那些,一种可能性是内容过滤器,但这将涉及为不同的客户端存储和推送变量的值.

最好将这些配置文件保存在特定于客户端的分支中的父repo中.