git repoから指定されたファイルを削除するシェルスクリプトを作成する

git repoから指定されたファイルを削除するシェルスクリプトを作成する

Gitリポジトリのファイル名のリストを入力として使用するスクリプトを作成する方法(1行に1つのファイル名を持つ.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行ずつ読み取るには、一種の「読み取り」コマンドが必要であることも知っています。

答え1

.gitを使用してgitリポジトリからコードを配布できますrsync。たとえば、ファイルには、exclude-rsync.txtターゲットに配布しないすべてのファイルとディレクトリ(1行に1つ)を含めることができます(または新しいディレクトリにすることもできます)。

除外-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パイプラインを定義できます。何かがgit(lab)にプッシュされるか、ブランチがマスターにマージされるたびに、パイプラインが自動的に開始されます。 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/

ただし、より簡単な場合は、たとえばこれらのパイプが存在することを覚えておくためにシェルファイルを追加できます。deploy.shこれは良い方法です。

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

関連情報