我想以稍微复杂的设置从 GitHub 存储库推送和拉取。
CMS/服务器 ⇄ GitHub ⇄ 翻译服务
我使用的是平面文件 CMS,它将内容存储为
.txt
文件,每种语言一个:*.en.txt
、*.de.txt
、*.es.txt
。它还将多媒体文件存储在相同的目录中,*.png
、.mp4
、*.jpg
等
我的
.gitignore
从存储库中排除所有媒体文件,因为它们与翻译服务无关。
通过 CMS 进行更改时,需要将
*.txt
文件推送到 GitHub 存储库。翻译服务读取 *.en.txt
文件,并每 24 小时将其他语言文件(*.en.txt
、*.de.txt
、*.es.txt
)存入/更新到存储库中。然后,服务器需要将这些文件拉回 CMS,同时不删除不在存储库中的文件,例如多媒体文件。
我想编写脚本并自动化服务器/CMS 和 GitHub 存储库之间的推/拉过程,确保从存储库获取/拉取时媒体文件不会从服务器/CMS 中删除,即使它们不在回购协议。
我目前正在手动处理此过程。有人可以概述一下可以用来将这种关系设置为自动化的方法吗?
如果您需要更多信息,请告诉我。
鉴于我有一个 ci 用户和 sudo 运行此过程的不同部分,导致最多问题的原因是各个步骤上的选项 --flags 不正确,即
--recursive
和 --delete
,以便从之前的备份中删除最近删除的项目---no-group
合并来自Github的最新更改以防止文件权限导致的rsync错误--no-group
和 delete
,以便从 Github 中删除已删除的项目并从用户的文件权限中删除错误。我的解决方案:
rsync --recursive --links --delete /directory/web /directory/backup
rsync -aO --no-group --exclude='.git/' --exclude='.gitignore' --exclude='*.en.txt' /directory/git /directory/web
rsync -aO --no-group --delete --filter='P .gitignore' --exclude='.git/' --include='*/' --include='*.en.txt' --exclude='*' /directory/backup/ /directory/web
希望这个答案可以帮助处于这种困境的其他人。