我有一个网站,我保持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文件.
我希望这是有帮助的...
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |