🙆
gitリポジトリの特定ディレクトリを別のgitリポジトリにコピーする
zennとのリポジトリ連携をするにあたり、gitリポジトリの特定のディレクトリだけを連携する方法を紹介します。やり方としては以下の3つが考えられます。
rsync
rsync
によるファイル同期は単純なファイル同期のため、git履歴が消えてしまい検討外としました。
git subtree
git subtree
は有効なgitリポジトリを1つのリポジトリに集約するための用途として使えますが、今回は特定のディレクトリのみをミラーリングしたい。互いのgit履歴の管理は不要のため検討外としました。
git filter-repo
git filter-repo
は、特定のディレクトリのみのgit履歴だけを取得して別リポジトリへのコピーが可能です。今回はgit filter-repo
を利用することとしました。
ローカル環境での具体的なやり方は[2:1]を参照してください。以下はGitHub Actions上でのyamlを記載します。
github.com/{USERNAME}/{REPOSITORY_NAME}/{DIRECTORY}をgithub.com/{USERNAME}/zennへコピーします。
name: Sync Zenn Directory using git filter-repo
on:
push:
branches:
- main
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install git-filter-repo
run: |
pip install git-filter-repo
- name: Filter and sync directory
run: |
git clone https://{USERNAME}:${PERSONAL_ACCESS_TOKEN}@github.com/{USERNAME}/${REPOSITORY-NAME}.git
cd ${DIRECTORY}
git filter-repo --subdirectory-filter zenn
git remote add zenn https://{USERNAME}:${PERSONAL_ACCESS_TOKEN}@github.com/{USERNAME}/zenn.git
git push zenn main --force
env:
PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- actions/checkout[3]を当初利用していたが、zennリポジトリにpushする際actions/checkoutで取得したリポジトリとの認証情報とコンフリクトした。
git config --unset http.https://github.com/.extraheader=AUTHORIZATION
を利用すればzennリポジトリを参照可能。ただし、現時点では一番シンプルな方法を利用するとした。
Discussion