通过 git 在仓库和服务器之间自动同步,忽略但不从源中删除 .gitignore 中的文件

问题描述 投票:0回答:1

我想以稍微复杂的设置从 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 中删除,即使它们不在回购协议。

我目前正在手动处理此过程。有人可以概述一下可以用来将这种关系设置为自动化的方法吗?

如果您需要更多信息,请告诉我。

git ubuntu github version-control
1个回答
0
投票

鉴于我有一个 ci 用户和 sudo 运行此过程的不同部分,导致最多问题的原因是各个步骤上的选项 --flags 不正确,即

    初始备份上的
  • --recursive
    --delete
    ,以便从之前的备份中删除最近删除的项目
  • ---no-group
    合并来自Github的最新更改以防止文件权限导致的rsync错误
  • 将备份中的更改合并到 Github 时使用
  • --no-group
    delete
    ,以便从 Github 中删除已删除的项目并从用户的文件权限中删除错误。

我的解决方案:

  1. 复制当前 Web 文件夹:
rsync --recursive --links --delete /directory/web /directory/backup
  1. 将 Git 文件夹中的新更改合并到 Web 文件夹:
rsync -aO --no-group --exclude='.git/' --exclude='.gitignore' --exclude='*.en.txt' /directory/git /directory/web
  1. 将备份文件夹中的新更改合并到 Git 文件夹:
rsync -aO --no-group --delete --filter='P .gitignore' --exclude='.git/' --include='*/' --include='*.en.txt' --exclude='*' /directory/backup/ /directory/web

希望这个答案可以帮助处于这种困境的其他人。

© www.soinside.com 2019 - 2024. All rights reserved.