跳至主要內容

git 同步到服务器

大约 2 分钟

git 同步到服务器

反正我就一个人写写代码,想同步到服务器上的聊天机器人

初始化仓库

记得在之前先将主分支设为main而不是master,不然会弹警告,主要警告是master有歧义

git config --global init.defaultBranch main

然后 cd 到放代码的文件夹初始化仓库

git init

如果有想要忽略的文件而不是整个文件夹,这时候创建一个.gitignore文件并编辑

添加到暂存并且提交

git add .
git commit -m "init"

允许提交

git config receive.denyCurrentBranch ignore

注意

默认情况下,Git 服务器不允许在非裸仓库中更新当前分支,因为这会导致索引和工作树与您推送的内容不一致,需要使用 "git reset --hard" 命令来将工作树与 HEAD 匹配。

为了解决这个问题,您可以在远程仓库中设置 'receive.denyCurrentBranch' 配置变量,将其值设置为 'ignore' 或 'warn',以允许向当前分支推送更改。

但是,这并不推荐,除非您已经以某种方式安排更新其工作树以匹配推送的内容。

如果您仍然想保持默认行为并禁止在非裸仓库中更新当前分支,可以将 'receive.denyCurrentBranch' 配置变量设置为 'refuse'。

设置钩子

touch .git/hooks/post-receive

然后把这个塞进去

#!/bin/bash

# Location of the working directory on the server
WORK_DIR=/path/to/working/directory

# Branch that was pushed
BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)

# Git checkout the branch that was pushed
GIT_WORK_TREE=$WORK_DIR git checkout -f $BRANCH
我给 mc 资源包设置的钩子
#!/bin/bash

# Location of the working directory on the server
WORK_DIR=/opt/resource
OUT_ZIP=/opt/resource.zip

# Branch that was pushed
BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)

# Git checkout the branch that was pushed
GIT_WORK_TREE=$WORK_DIR git checkout -f $BRANCH

rm $OUT_ZIP
cd $WORK_DIR
zip -r $OUT_ZIP . -x ".git*"

请注意,需要将 /path/to/working/directory 替换为服务器上的工作目录的路径。

脚本将检查该分支的最新提交,并使用 git checkout 命令将更改应用到工作目录中。

添加权限

chmod +x .git/hooks/post-receive

客户端

git clone username@server_address:/path/to/repository

然后就能正常推送到服务器并更改服务器文件了

相关信息

需要注意的是,在服务器的文件修改后,也需要同步到git仓库,才能被本地拉取

git add .
git commit -m 'example'
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.0.0-alpha.10