&引用;测试“;GitHub回购分行

&引用;测试“;GitHub回购分行,git,.htaccess,github,Git,.htaccess,Github,在我的Web服务器上,我目前有一个虚拟主机,它几乎完全复制了我的主要公共网站,用于测试目的,因此我可以编辑我的网站并测试新功能,而无需编辑我的实时网站。它使用.htaccess和.htpasswd进行简单的身份验证 AuthType Basic AuthName "Restricted access" AuthUserFile /home/USERNAME/.htpasswd require valid-user 我想知道是否有可能从我的主网站GitHub repo获得一个分支,当我将测试分支

在我的Web服务器上,我目前有一个虚拟主机,它几乎完全复制了我的主要公共网站,用于测试目的,因此我可以编辑我的网站并测试新功能,而无需编辑我的实时网站。它使用.htaccess和.htpasswd进行简单的身份验证

AuthType Basic
AuthName "Restricted access"
AuthUserFile /home/USERNAME/.htpasswd
require valid-user
我想知道是否有可能从我的主网站GitHub repo获得一个分支,当我将测试分支的更改合并到主分支时,它不会合并.htaccess和.htpasswd文件

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


请给出白痴般的答案,因为我对Git和GitHub仍然只有非常基本的了解

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

  • 版本仅为模板文件
  • 查找repo之外的值文件(如果它们是机密文件,如
    htpasswd
    应该是)或以分支命名的版本化文件(如果要在同一repo中跟踪它们,如
    .htaccess.master
    .htaccess.test

    这样,就不存在合并问题
为此,您需要在子模块repo a中注册(在a中)

(来自“”的图像,来自“”)

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

请参阅“”中的完整示例

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

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

这种回答通过避免问题(并作为我的评论的更详细的后续补充)来回避问题。假设您有两个分支(为了简单起见),
master
,所有开发和测试都在这两个分支进行(注意:通常情况下,对于开发和测试,我会有单独的分支),第二个分支用于生产,
prod
。我假设这两个都已经设置好了,并且相同,并且当前包含您的生产网站。(我不知道您使用哪个操作系统进行开发,但我假设是linux?)然后,在
主控
中进行一些更改,使用类似于
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()这样的工具可以调用这些脚本,并用于从QA服务器到登台主机的测试/部署……好的,您可以看到事情如何从“小脚本”慢慢过渡到“部署管道”——关键是保持每个步骤简单、有文档记录,并慢慢构建。继续做最简单的事情,并以此为基础。(注意:我只是将所有这些输入到S.O.中,所以这只是一个示例,而不是生产代码:-)

不过,这里的答案应该是内容过滤器驱动程序。并提供了一个非常详细的示例。一个选项是保持生产/测试分支不变,不要让git试图保持增量不变,只需在“depoy”程序/逻辑/脚本中加入“deploy test”与“deploy prod”逻辑,不管是什么(例如bash脚本、gradle构建、jenkins作业等等)@michael你这是什么意思?补充了一个更详细的评论作为回答:-)你能不能把你的回答说得稍微哑一点,这让我有点困惑。我已经看过了链接,但更多confusing@HarryCameron什么部分令人困惑?首先,您是否喜欢生成这些文件,避免任何合并问题?我真的不明白生成这些文件是什么意思。对不起,新手here@HarryCameron简单地说,
.htpasswd
.htaccess
不应进行版本控制(因为它们的内容应根据您使用的分支自动更改)。相反,它们应该根据分支自动生成正确的内容。ohhh ok这很有帮助,但有两个问题,一个是什么改变了代码末尾的$1,另一个是2,这两个.htaccess文件是否相同,因为在测试服务器上,它必须与主服务器不同,因为它在测试服务器上的文件中包含身份验证。为了解决这个问题,我想我可以将.htaccess文件添加到我的.gitignore文件中,如果我需要编辑它,我可以在服务器上进行编辑(注意:刚刚修复了一个复制/粘贴错误)-是的,您可以进一步自定义测试与产品-实际上可能会返回到更复杂的
git
选项。(就我个人而言:我过去也曾通过git尝试过同样的方法,并且总是回到更简单的方法)。例如,签入模板文件并通过
sed
进行修改(gradle/ant/maven/jenkins都直接支持这一点);或者根据扩展名选择要部署的文件(例如
htaccess.prod
vs
htaccess.test
)。总是选择在那个时候最容易实现的东西——很容易把时间浪费在更深层的git rabbit漏洞上。啊,打字错误现在是有意义的,你提到了使用Jenkins,我该如何使用Jenkins来调用脚本?