如何将源存储库的更改同步到目标存储库,这些更改是由推送到源主文件触发的(除了某些文件之外)

问题描述 投票:0回答:1

每当有推送到源存储库的主分支时,我想将更改从源存储库同步到目标存储库。但是,我不想同步对

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
文件。

git github-actions gitignore
1个回答
0
投票

考虑到源存储库是只读的,仅将 .gitignore 添加到目标存储库。

© www.soinside.com 2019 - 2024. All rights reserved.