合并期间保持package.json版本完整

时间:2019-06-23 02:16:54

标签: gitlab

在将“功能”分支合并到“开发”之后,我需要找到一种方法来在“开发”分支的package.json中保持“版本”完整。我想不出最好的方法。 我可以仅使用.gitlab-ci.yml或bash脚本和gitlab yml的组合来执行此操作吗?请注意,“功能”分支在package.json中将始终具有与开发人员的package.json不同的“版本”。

我尝试使用bash并为package.json'version'分配一个变量,然后将合并的package.json与预合并版本合并。似乎不是一个好的解决方案。

2 个答案:

答案 0 :(得分:0)

一种方法是版本package.json(忽略它),而生成(其中带有正确的值)。

生成脚本可以使用以下命令确定已检出分支的名称:

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

这意味着您可以:

  • 仅版本模板文件package.json.tpl
  • 以分支命名的版本值文件:version.devversion.feature:由于它们是不同的,因此合并或切换分支时没有合并问题。

最后,您将(在.gitattributes declaration中注册 content filter driver

smudge (来自“ 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范围的个人访问令牌。