当我从本地工作区推送到远程VPS上的GitLab中的目标存储库时,我希望GitLab运行脚本并要求同一VPS上的beta存储库进行git checkout并拉取以检查我的更改。
Gitlab configurations
假设您的管理区域中已经有一个项目,只需获取它的相对路径
管理区域>项目
选择您的项目
在项目配置文件中获取路径(在这种情况下已隐藏)
在此位置创建一个名为custom_hooks
的新目录。
sudo su
cd /var/opt/gitlab/git-data/repositories/hashed/path/of/project
mkdir custom_hooks
post-receive
挂钩,文件名应为post-receive
,不带扩展名。cd custom_hooks
nano post-receive
#!/bin/sh
unset GIT_INDEX_FILE
cd /var/repo/beta.git && git checkout master && git up # --[see the note 2 below]
chmod +x post-receive
您可以在这里找到有关git hooks的更多信息:GitLab Documentation : Server hooks
VPS configurations
使用@RichardHansen重新创建新别名
git config --global alias.up '!git remote update -p; git merge --ff-only @{u}'
在研究过程中,我在论坛上找到了有关git pull
的有趣答案。
我决定遵循该建议,并命名为git up
。
重要的是:
您可以在此处找到有关“ git pull
在什么情况下可能有害? ”的更多信息:
Link to answer
# Create a repo for the project in apache area
mkdir /var/www/beta
# Create the git repo only folder
cd /var
mkdir repo && cd repo
# Create git repo and init
mkdir beta.git && cd beta.git
git init --bare # --bare means that our folder will have no source files, just the version control.
# Add gitlab remote
git remote add gitlab
# Accessing hooks folder to create script
cd hooks
cat > pre-receive
# On the blank line, write this script then 'ctrl + d' to save and press enter to exit
#!/bin/sh
unset GIT_INDEX_FILE
git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f
# Make the file executable
chmod +x post-receive
'git-dir'是git存储库的路径。使用“工作树”,我们可以定义文件实际传输到的不同路径。
每次完成推送时都会查看“ post-receive”挂钩,并在这种情况下设置将文件传输到/ var / www / beta的路径。
Local Workspace configurations
# Create in your workspace a folder to hold the project
cd /path/to/workspace
mkdir project && cd project
# Initialize git and add gitlab remote
git init
git remote add gitlab ssh://user@mydomain.com/gitlab/path/of/project
# Create an index.html file and send the initial commit
nano index.html
# copy this into the file then 'ctrl + x' then 'y' then 'enter' to save
<html>
<head>
<title>Welcome to Beta domain!</title>
</head>
<body>
<h1>Success! The beta virtual host is working!</h1>
</body>
</html>
# prepare the changes and then send the commit
git status
git add index.html
git commit -m "chore: add index.html :tada: :rocket:"
git push gitlab master
此过程的预期结果是,完成git push gitlab master
后,项目的gitlab哈希目录内的钩子将运行一个执行如下操作的脚本:
# Access the beta.git directory
cd /var/repo/beta.git
# Run command for updating repo
git checkout master && git up
# If we access the beta folder in apache area we should see index.html
cd /var/www/beta
ls
--index.html
没有结果。
没有错误消息。
如何设置这样的过程?
我的流程中有一些我没有考虑的东西吗?