创建删除 git repo 中指定文件的 Shell 脚本

创建删除 git repo 中指定文件的 Shell 脚本

我将如何创建一个脚本,它将 git 存储库中的文件名列表(我计划使用每行一个文件名的 .txt 文件,但我愿意接受其他建议)作为输入,然后从存储库中删除那些指定的文件?

我正在考虑使用“cat”命令和管道,以便在终端中命令看起来像这样:

cd my-git-repo
cat fileNames.txt | myShellScript.sh
git push origin master

然后“myShellScript.sh”将是:

#!/bin/bash
git rm $0
git add .
git commit -m "removed unused file"

我还知道应该有某种类型的“读取”命令来逐行读取 fileNames.txt 。

答案1

您可以使用 .git 从 git 存储库部署代码rsync。例如,一个文件exclude-rsync.txt可以包含您不想部署到目标的所有文件和目录(每行一个)(也可以是一个新目录)。

排除-rsync.txt

.git
.gitignore
include/database.yml

rsync命令

 rsync -avz --delete --exclude-from=exclude-rsync.txt . [email protected]:/var/www/foobar/

CI/CD 管道

使用 gitlab、travis ci (& jenkins),您通常可以在 yaml 文件中定义 ci/cd piplines。每当有东西被推送到 git(lab) 或分支被合并到 master 时,管道就会自动启动。对于 gitlab,您将添加一个名为的文件.gitlab-ci.yml,它可能如下所示:

stages:
  - deploy
deploy_production:
  stage: deploy
  environment: production
  only:
    - master@my_repo
  before_script:
    - yum -y install rsync    
  script:
    - |
       rsync -avz --delete --exclude-from=exclude-rsync.txt . [email protected]:/var/www/foobar/

但在更简单的情况下,您可以添加一个 shell 文件,例如,deploy.sh记住这些管道存在,这可能是一个很好的做法。

#!/bin/bash
rsync -avz --delete --exclude-from=exclude-rsync.txt . [email protected]:/var/www/foobar/

相关内容