Gitlab 合并期间保持package.json版本不变
在将“feature”分支合并到“dev”之后,我需要找到一种方法,使“dev”分支的package.json中的“version”保持不变。我想不出最好的办法。 我可以只使用.gitlab-ci.yml或bash脚本和gitlab-yml的组合来实现这一点吗。注意,package.json中的“feature”分支的“version”总是与dev的package.json不同 我尝试使用bash并为package.json“version”分配一个变量,然后在合并后使用预合并版本更新package.json。这似乎不是一个好的解决方案。一种方法是不使用versionGitlab 合并期间保持package.json版本不变,gitlab,Gitlab,在将“feature”分支合并到“dev”之后,我需要找到一种方法,使“dev”分支的package.json中的“version”保持不变。我想不出最好的办法。 我可以只使用.gitlab-ci.yml或bash脚本和gitlab-yml的组合来实现这一点吗。注意,package.json中的“feature”分支的“version”总是与dev的package.json不同 我尝试使用bash并为package.json“version”分配一个变量,然后在合并后使用预合并版本更新packa
package.json(忽略它),而是生成它(包含正确的值)
生成脚本可以通过以下方式确定签出分支的名称:
branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
这意味着你可以:
- 仅版本模板文件
package.json.tpl
- 以分支命名的版本值文件:
version.dev
,version.feature
:由于它们不同,因此在合并或切换分支时没有合并问题
最后,您将(在a中)注册一个
(来自“”的图像,来自“”)
与模板文件(package.json.tpl
)关联的smudge
脚本将通过查看右侧版本中的值来生成(在git签出时自动生成)实际的package.json
文件。
值文件。
生成的实际package.json
文件仍然被忽略(被.gitignore
)
请参阅“.”中的完整示例。一种方法是不使用版本package.json(忽略它),而是生成它(其中包含正确的值)
生成脚本可以通过以下方式确定签出分支的名称:
branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
这意味着你可以:
- 仅版本模板文件
package.json.tpl
- 以分支命名的版本值文件:
version.dev
,version.feature
:由于它们不同,因此在合并或切换分支时没有合并问题
最后,您将(在a中)注册一个
(来自“”的图像,来自“”)
与模板文件(package.json.tpl
)关联的smudge
脚本将通过查看右侧版本中的值来生成(在git签出时自动生成)实际的package.json
文件。
值文件。
生成的实际package.json
文件仍然被忽略(被.gitignore
)
请参见“.”中的完整示例。以下是我的想法:
My script.sh:
#!/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
my.gitlab-ci.yml:
job-merge:
before_script:
- git remote set-url origin https://oauth2:${CI_PUSH_TOKEN}@gitlab.com/mysername/myrepo.git
script:
- echo 'STARTING TO RUN SCRIPTS'
- bash ./script.sh
only:
- merge_requests
CI_PUSH_令牌是项目CI/CD设置中的一个变量,它是api范围内的个人访问令牌。以下是我的想法:
My script.sh:
#!/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
my.gitlab-ci.yml:
job-merge:
before_script:
- git remote set-url origin https://oauth2:${CI_PUSH_TOKEN}@gitlab.com/mysername/myrepo.git
script:
- echo 'STARTING TO RUN SCRIPTS'
- bash ./script.sh
only:
- merge_requests
CI_PUSH_TOKEN是项目CI/CD设置中的一个变量,它是api作用域的个人访问令牌。@hypnobluez Great!别忘了在这里发布关于如何处理它的答案。@hypnobluez Great!别忘了在这里发布关于如何处理它的答案。