在将“功能”分支合并到“开发”之后,我需要找到一种方法来在“开发”分支的package.json中保持“版本”完整。我想不出最好的方法。 我可以仅使用.gitlab-ci.yml或bash脚本和gitlab yml的组合来执行此操作吗?请注意,“功能”分支在package.json中将始终具有与开发人员的package.json不同的“版本”。
我尝试使用bash并为package.json'version'分配一个变量,然后将合并的package.json与预合并版本合并。似乎不是一个好的解决方案。
答案 0 :(得分:0)
一种方法是不版本package.json
(忽略它),而生成(其中带有正确的值)。
生成脚本可以使用以下命令确定已检出分支的名称:
branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
这意味着您可以:
package.json.tpl
version.dev
,version.feature
:由于它们是不同的,因此合并或切换分支时没有合并问题。最后,您将(在.gitattributes
declaration中注册 content filter driver 。
(来自“ Customizing Git - Git Attributes”的图像,来自“ Pro Git book”的图像)
与模板文件(smudge
关联的package.json.tpl
脚本将通过在右侧{中查找值来生成(自动在git checkout
上)实际的package.json
文件。 {1}}值文件。
生成的实际version.<branch>
文件仍然被package.json
忽略。
在“ git smudge/clean filter between branches”中查看完整的示例。
答案 1 :(得分:0)
这是我想出的: 我的script.sh:
const test = {a: 'hey', b: 'hello'}
// something like this
const destruct = {
{a,b}: test
};
const destruct = {
{a}: test,
{b}: test
};
我的.gitlab-ci.yml:
#!/usr/bin/env bash
echo 'Current gitlab user and email'
echo $GITLAB_USER_NAME
echo $GITLAB_USER_EMAIL
git config user.email $GITLAB_USER_EMAIL
git config user.name $GITLAB_USER_NAME
git fetch --all
git checkout $CI_COMMIT_REF_NAME
echo 'Getting version from package.json master'
git checkout origin/master -- package.json
VERSION_DEV=$(cat package.json \
| grep version \
| head -1 \
| awk -F: '{ print $2 }' \
| sed 's/[",]//g' \
| tr -d '[[:space:]]')
git status
git reset
git checkout .
echo $VERSION_DEV
echo 'replacing version in package.json'
sed -i 's/\"version\":.*/\"version\": "'$VERSION_DEV'",/g' "package.json"
git add .
git commit -m "package.json version preserved"
# Success
echo "-------------------------------------------------------------------------"
echo "Success in preserving package.json version"
echo 'Checking out master'
git checkout master
echo 'Merging into master'
git merge $CI_COMMIT_REF_NAME --no-ff --no-edit
git push --follow-tags origin master
CI_PUSH_TOKEN是项目的CI / CD设置中的变量,它是具有api范围的个人访问令牌。