"试验"分支在GitHub回购

时间:2018-01-08 04:28:04

标签: git .htaccess github

在我的网络服务器上,我目前有一个虚拟主机,其中包含我的主要公共网站的几乎完全副本,设置用于测试目的,因此我可以编辑我的网站并测试新功能而无需编辑我的实时网站。它使用

进行简单的.htaccess和.htpasswd身份验证
AuthType Basic
AuthName "Restricted access"
AuthUserFile /home/USERNAME/.htpasswd
require valid-user

我想知道是否有可能从我的主网站GitHub repo中获得一个分支,当我将测试分支中的更改合并到主分支时,它将不会合并.htaccess和.htpasswd文件。

我还想知道是否可以将测试分支链接到我的网络服务器上的其他文件夹。例如,主分支将链接到/var/www/html,我希望测试分支链接到/var/www/test

请回答白痴证明,因为我对Git和GitHub只有非常基本的了解

2 个答案:

答案 0 :(得分:1)

这个答案通过避免问题来解决问题(并作为我的评论的更详细的后续添加)。假设您有两个分支(为简单起见),master所有开发人员都在测试发生了(注意:通常我会为dev& test提供单独的分支),以及第二个用于生产的分支prod。我假设这些已经设置,并且相同,并且目前包含您的生产网站。 (我不知道您用于开发的操作系统,但我会假设linux?)然后,在master中进行一些更改,使用类似deploy.sh的脚本部署到测试暂存区域:

#!/bin/bash
# usage: deploy [test | prod]
deploy_test() {
    git checkout master
    # copy site to remote
    scp -r ./path/to/site me@host:/var/www/test

    # or, you could generate htpasswd here
    read -p 'Input path to your htpasswd file: ' pw 
    scp -r $pw ./path/to/site me@host:~/
}

deploy_prod() {
    git checkout prod
    # copy site to remote
    scp -r ./path/to/site me@host:/var/www/html
}

if [ "$1" = "prod" ]; then 
    deploy_prod
elif [ "$1" = "test" ]; then 
    deploy_test
fi

好的,这是一个疯狂的简单示例,但同样的想法可以在您用于部署的任何内容中实现。除了与身份验证(密码,用户)相关的任何内容之外,所有内容都会签入git,这些内容可以是env vars,也可以输入到部署脚本中。此外,像jenkins(https://jenkins-ci.org/)这样的工具可以调用这些脚本,并用于从QA服务器到您的登台主机的测试/部署......好吧,您可以看到事情可以从“小脚本”慢慢移动“到”部署管道“ - 关键是保持每个步骤简单,记录并慢慢构建。继续做最简单的事情,并以此为基础。 (注意:我只是将所有这些输入到S.O.,所以这只是一个例子,而不是生产代码:-))

答案 1 :(得分:0)

每当您需要根据分支保留不同的内容时,一种方法是:

  • 仅版本模板文件
  • 在repo之外寻找值文件(如果它们是htpasswd应该是机密的)或在分支后命名的版本文件中(如果你想在同一个仓库中跟踪它们,比如.htaccess.master.htaccess.test
    这样就没有合并问题了。

为此,您需要在子模块库中注册(.gitattributes declaration content filter driver

smudge (来自“Customizing Git - Git Attributes”的图片,来自“Pro Git book”)

与模板文件(smudge.htpasswd.tpl相关联的.htaccess.tpl脚本将通过查看外部源来生成(自动在git checkout上)属性文件实际价值。 生成的实际.htxxx属性文件仍然被忽略(.gitignore)。

请参阅“git smudge/clean filter between branches”的完整示例。

您的smudge脚本可以通过以下方式确定已签出分支的名称:

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)