我正在编写一个post-receive挂钩来更新一些服务器。
我的git repo有一个每个服务器的文件夹。我的目标是让所有已修改的文件夹(服务器)只在那些服务器上运行一些脚本。
以下是我工作树的示例:
├── host1
│ ├── examplefile.json
│ └── configfile.cfg
├── host2
│ └── file1.txt
├── host3
│ └── binfile.rpm
可以在收件后写出类似的内容吗?
更新1 : 我的post-receive到目前为止在另一台服务器上执行了一个脚本,该服务器上有这个repo的副本,这个服务器比fetch,reset和执行脚本更新每个主机上的那些文件。
答案 0 :(得分:0)
我刚刚发现,在接收后执行的服务器上运行差异要简单得多:
我的收到后,这只是对ssh的命令:
#!/usr/bin/env bash
ssh root@controller-host -C /root/sync.sh
控制器主机上的同步脚本:
cd /root/mytest/myrepo
git fetch --all
git diff --name-only origin/master
git reset --hard origin/master
git diff --name-only origin/master
输出:
Fetching origin
host1/file1
host2/file1
host3/file1
host4/file1
HEAD is now at 8e57e51 startei
现在可以解析diff输出只有同步的host1,host2,host3和host4。
如果有人找到更好的方法,请分享。