我正在开发一个用户脚本,我的雇主要求我开始通过Git管理。
现在,我有一个稳定的文件和一个测试版文件,因此组织中的每个人都可以安装稳定的代码,但如果他们愿意,可以选择帮助测试beta添加。该文件的某些部分应保持不同,内容和更改不应在分支之间合并。
例如,如果我将Beta文件转换为Git分支,然后决定Beta更改是稳定的并将Beta合并回Stable代码(这将不会更改)Git Merge过程,因为我理解它将根据Beta分支中这些行上的任何值“帮助”更新Stable Greasemonkey定义标头。这是完全不合需要的,因为这些标头包含Greasemonkey将检查更新的自动更新URL。
// ==UserScript== (stable)
// @downloadURL -- StableURL File Location
// ==/UserScript==
// ==UserScript== (beta)
// @downloadURL -- BetaURL File Location
// ==/UserScript==
>Git Merge<
// ==UserScript== (stable)
// @downloadURL -- BetaURL File Location
// ==/UserScript==
我希望保留在Beta代码和稳定代码之间具有不同URL的能力,但是无法识别使Git的合并过程忽略Greasemonkey正确执行其操作所需的行的方法,但是如果我没有将Beta作为单独的分支,我不确定如何使用Git轻松地将已更改的代码从Beta迁移到Stable,这是要求我采用Git功能的原因。 (嗯,另一个原因是让其他人更容易参与并确定项目的历史......)
非常感谢任何帮助。
答案 0 :(得分:3)
除了对这些值的更改之外,应合并所有更改,这使得它们与其他更改不同,不是对内部内容的更改,而是对特定于部署的更改。这些可能最适用于结账后挂钩。这是一个示例,每个分支包含处理器
cat <<\EOF >.git/hooks/post-checkout
#!/bin/sh
if branch=`git symbolic-ref HEAD --short -q`; then
for file in `git ls-files -cix*.@branch`; do
echo "* making ${file%.@branch} from $file with branch-specific includes"
echo '/^@include-branch-specific ([a-z/]*)$/ { s//cat \1.'$branch'/e }' \
| sed -rf- $file >${file%.@branch}
done
fi
EOF
chmod +x .git/hooks/post-checkout
# testing
git checkout beta
cat <<\EOF >config.@branch
// ==UserScript==
@include-branch-specific config
// ==/UserScript==
EOF
echo >config.stable '// @downloadURL -- StableURL File Location'
echo >config.beta '// @downloadURL -- BetaURL File Location'
git add config.*
# git rm --cached config
git commit -m'setting up per-branch configs'
git checkout
git checkout stable
git cherry-pick beta
git checkout
答案 1 :(得分:1)
在您的存储库中,创建三个名为header.master
,header.branch
和main.js
的文件。然后你可以在不同的分支中保留不同版本的main.js
,但保持头文件相同 - 每个分支一个,所有头文件都在所有分支中。
制作一个名为build.sh
的构建脚本,如下所示:
#! /bin/sh
cat header.$(git rev-parse --abbrev-ref HEAD) main.js >myscript.js
用户必须运行构建脚本,或者您必须自己提供预构建的用户脚本 - 但我猜您已经在执行后者,因为您有一个下载URL!
答案 2 :(得分:1)
你可以为git编写一个自定义合并驱动程序,并配置git来使用它 - 但这可能比它的价值更麻烦。
答案 3 :(得分:1)
从所有文件中删除@downloadURL
行。
从the @downloadURL
documentation开始,当省略该行时,Greasemonkey将检查脚本最初加载的URL,以获取更新。发布用户将从发布位置进行更新,测试版用户将从测试版位置进行更新。
如果用户想要从一个分支切换到另一个分支,他只需先删除脚本,然后从相应的分支加载。
同样,脚本也不应该有@updateURL
行。