每当有推送到源存储库的主分支时,我想将更改从源存储库同步到目标存储库。但是,我不想同步对
main.py
文件的更改。我在源代码库中创建了一个名为 workflow.yml
的文件,其中包含下面附加的代码。
我已经回顾了GitHub actions Push to Remote repo,它非常接近,但不一样。
我在我的源存储库上创建了名为
PAT
的存储库机密,我在其中粘贴了我的个人访问令牌(我通过进入我帐户的开发人员设置来创建它)。
我的问题是关于我不希望更新的文件。如果我删除以下行
git checkout HEAD^ main.py
,当我向源存储库发出推送请求时,该操作将成功运行并同步我所做的所有更改。我需要 gitignore 不知何故,但我不知道如何在这种情况下应用。我认为如果我创建 .gitignore
文件,当我将提交推送到源存储库时可能会产生问题。如果我克隆我的源代码库,进行更改,提交并推送它们,.gitignore
不会让我的main.py
更新,对吗?
我添加了以下行
if: github.repository == 'myname/source_repo
,以便该操作不会在目标存储库上运行。理想情况下,我不想将 workflow.yml
同步到目标存储库(并删除一次)。因此,我不想同时同步 main.py
和 workflow.yml
文件。
name: Sync Repos
on:
push:
branches:
- main
jobs:
sync:
runs-on: ubuntu-latest
if: github.repository == 'myname/source_repo'
steps:
- name: Checkout source repository
uses: actions/checkout@v2
- name: Configure Git
run: |
git config --global user.email "[email protected]"
git config --global user.name "myname"
git config --global credential.helper store
- name: Clone destination repository
run: |
echo "https://${{ secrets.PAT }}@github.com" > ~/.git-credentials
git clone https://${{ secrets.PAT }}@github.com/myname/sync_project.git
cd sync_project
git remote add source https://${{ secrets.PAT }}@github.com/${{ github.repository }}.git
git fetch source
git checkout -b temp-branch source/main
git checkout main
# Restore the main.py file from the temp-branch
git checkout HEAD^ main.py
git merge temp-branch --allow-unrelated-histories
git push origin main
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
我尝试在工作流程中运行
git checkout HEAD^ main.py
,以便将 main.py
恢复到上一次提交中的状态(不是将其同步到目标存储库),但它没有成功。我尝试了git restore --source=HEAD@{1} -- main.py .github/workflows/workflow.yml
,但也没有成功。由于我上面提到的原因,我没有创建包含 .gitignore
的 main.py
文件。
考虑到源存储库是只读的,仅将 .gitignore 添加到目标存储库。