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/