我将如何创建一个脚本,它将 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/