2014-11-06 121 views
1

如何为共享目录中的Web应用程序创建单独的Git存储库,以便通过GitHub将每个应用程序部署到生产环境? Web应用程序设置是常见的惯例,所以如果没有办法实现这一点,我感到很惊讶。通过GitHub将Web应用程序部署到生产

对于每个应用程序,索引文件和资产居住在各自的public_html目录:

/home/user/public_html/app1 
/home/user/public_html/app2 
/home/user/public_html/app3 

每个网站的应用程序文件住在他们各自的上层目录:

/home/user/app1 
/home/user/app2 
/home/user/app3 

那么,运行git init有每个应用程序的回购?这里是挑战:

  1. git init"user"目录将创建一个单一的回购为 所有应用
  2. "/home/user/public_html/app1"git init不会 包括在"/home/user/app1""/home/user/app1"
  3. git init应用程序文件将不包括 指数和资产在"/home/user/public_html/app1"

注意:此问题被大量编辑为使用非IIS术语,希望能更好地传达问题。

+0

试试capistrano进行部署。 – 2014-11-28 10:14:19

回答

-1

所以从我得到的映射的想法是,它是这样的:
一些fodlder
|
- > wwwroot文件
        |
        - >指数
           资产
|
- >的Inetpub

这样的wwwroot和的Inetpub在同一个主文件夹
如果是这种情况,那么你需要开始你的git的init在你的主文件夹(标记上方为“某些文件夹”),如果有是你的“主文件夹”中的其他文件和文件夹,那么你必须手动添加文件到你的提交,在这种情况下,如果你选择做'git add wwwroot/assets/somepicture.png'(如果你选择了“offcourse” git add --all在这个建议的情况下,你会将主文件夹中的所有文件添加到你的提交中,所以这不会是最好的实践。

0

我建议在/home/user/app1级别为每个应用程序创建一个git存储库。然后在每个目录中创建一个assets目录。然后,您可以将符号链接/home/user/public_html/app1设置为/home/user/app1/assets

+---home 
    +---user 
     +---app1 (git repo) 
     | +---assets 
     +---app2 (git repo) 
     | +---assets 
     +---public_html 
      +---app1 -> /home/user/app1/assets 
      +---app2 -> /home/user/app2/assets 

git存储库将包含您的应用程序和资产文件,但Web服务器仍然能够访问资产文件。

或者,您可以重新配置您的Web服务器以直接访问assets目录。

1

我认为有3种方法可以做到这一点。第一个将使用git submodule。基本上,你在你的目录/home/user中创建一个主存储库,这恰好是所有其他存储库等子模块。在这种情况下,每个应用程序需要2个存储库,一个用于app_n,另一个用于public_html/app_n。检查下面的示例说明2个应用:

#Create the repositories etc 
cd test && mkdir repositories && cd repositories 
mkdir app1 app2 public_html_app1 public_html_app2 
cd app1/ && git init && touch file && git add . && git commit -m "msg" && cd .. 
cd app2/ && git init && touch file && git add . && git commit -m "msg" && cd .. 
cd public_html_app1/ && git init && touch file && git add . && git commit -m "msg" && cd .. 
cd public_html_app2/ && git init && touch file && git add . && git commit -m "msg" && cd .. 

#Create the master repo and add submodules 
cd .. && mkdir deployment && cd deployment 
git init && mkdir public_html 
git submodule add ../repositories/app1 app1 
git submodule add ../repositories/app2 app2 
git submodule add ../repositories/public_html_app1 public_html/app1 
git submodule add ../repositories/public_html_app2 public_html/app2 
git commit -m "creating repo structure" 

在上面,部署目录类似于你/home/user/目录。

第二种方法是在app_n目录中创建public_html目录,并从那里为静态资产等提供服务。这应该可以通过apache或运行的任何Web服务器轻松配置。第三种方法将使用symlinks。由于您使用的是IIS,因此无法为您工作(您需要在Windows上浏览虚拟目录)。基本上,您可以在public_html目录中创建符号链接。您的public_html文件将仅用应用程序进行跟踪,但是,您可以在public_html目录中创建符号链接。检查下面的步骤以重现2应用场景的相同情况

mkdir -p app1/public_html app2/public_html public_html 
ln -sf app1/public_html/ public_html/app1 
ln -sf app2/public_html/ public_html/app2 
+0

没有必要维护一个单独的子模块来拆分git repo。请参阅http://stackoverflow.com/a/13738951/4231110 – 2014-11-24 15:34:14

+0

@justinhoward我不认为这适用于此。我们可以维护一个单一的回购,但是OP明确地提出了这样一个问题:'如何为Web应用程序创建单独的Git存储库...' – 2014-11-25 03:19:34

+0

第二个选项听起来很有希望。是否有.htaccess示例或资源您知道,您可以显示如何完成从Web根上方提供静态文件? – suncoastkid 2015-01-14 13:27:01