如何设置git策略使目录下的文件不能被删除?



在我的git repo中,我想强制执行一个策略,即某个目录下的文件不能被删除。我想允许以下内容:

  • 创建新文件
  • 修改现有文件

该策略需要是服务器端策略:

  • 预接收钩子,如果你有访问/控制Git远程存储库托管服务器
  • GitHub Action(如果远程托管服务是GitHub.com),在一个受保护的分支上使用tj-actions/changed-files(你会通过拉请求更新):你可以推送任何你想要修改的功能分支,但动作将确保分支不能被合并到一个受保护的分支,如果文件被删除在一个特定的文件夹
name: Check Deleted Files
on:
push:
branches: [ main ]
jobs:
check-deleted-files:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Get Changed Files
id: changed-files
uses: actions/changed-files@v1
- name: Check Deleted Files
run: |
if echo "${{ steps.changed-files.outputs.all_modified_files }}" | grep -q "^folder-to-check/.*$"; then
if ! echo "${{ steps.changed-files.outputs.deleted_files }}" | grep -q "^folder-to-check/.*$"; then
echo "A file has been deleted in folder-to-check. Aborting commit."
exit 1
fi
fi

类似的想法也适用于其他托管服务,如GitLab或Bitbucket。