如何在GitHub中实现Repo B指定文件向Repo A的同步?
如何将Repo B的文件同步到Repo A并保持自动更新?
作为GitHub新手,要实现把Repo B的文件复制到Repo A还持续同步,其实有两种实用的方法,我给你一步步拆解清楚:
方法一:用Git子模块(保留仓库关联,手动触发更新)
这种方法适合你需要保留两个仓库之间的关联,能随时追踪Repo B变更的场景:
- 第一步:先把Repo A克隆到本地
打开终端,执行命令:git clone https://github.com/你的用户名/RepoA.git cd RepoA - 第二步:添加Repo B作为子模块
执行命令把Repo B关联到Repo A的指定目录(比如你想把Repo B的文件放在Repo A的repo-b-files文件夹里):
执行完后,Repo B的所有文件就会出现在git submodule add https://github.com/你的用户名/RepoB.git repo-b-filesrepo-b-files目录下了。 - 第三步:提交并推送到GitHub
把子模块的配置文件和新增的目录提交到Repo A:git add .gitmodules repo-b-files git commit -m "添加Repo B作为子模块" git push - 第四步:后续更新Repo B的内容
当Repo B有更新时,进入子模块目录拉取最新代码,再同步到Repo A:cd repo-b-files git pull origin main # 这里的main是Repo B的主分支,如果是其他分支就改成对应的名字 cd .. git add repo-b-files git commit -m "同步Repo B的最新内容" git push
小提示: 其他人克隆你的Repo A时,需要加上--recurse-submodules参数才能同时拉取子模块内容:
git clone --recurse-submodules https://github.com/你的用户名/RepoA.git
如果已经克隆了,也可以执行git submodule update --init --recursive来拉取子模块。
方法二:用GitHub Actions(自动同步,无需手动操作)
如果你想实现“一劳永逸”的自动同步,比如每天自动把Repo B的最新文件同步到Repo A,那GitHub Actions是最佳选择:
- 第一步:在Repo A中创建工作流
打开Repo A的GitHub页面,点击顶部的Actions标签,然后点击New workflow,选择set up a workflow yourself。 - 第二步:编写同步工作流代码
把页面里默认的YAML代码替换成下面的内容,记得替换其中的你的用户名、RepoB、分支名(比如main)以及你想要存放文件的目录(比如repo-b-files):name: Sync Repo B to Repo A on: schedule: # 每天凌晨1点自动同步,你可以修改Cron表达式调整时间 - cron: '0 1 * * *' workflow_dispatch: # 允许手动触发同步(在Actions页面点Run workflow就行) jobs: sync: runs-on: ubuntu-latest steps: - name: 拉取Repo A代码 uses: actions/checkout@v4 with: persist-credentials: false - name: 拉取Repo B代码到临时目录 uses: actions/checkout@v4 with: repository: 你的用户名/RepoB path: repo-b-temp persist-credentials: false - name: 复制Repo B的文件到Repo A run: | # 创建存放文件的目录(如果不存在的话) mkdir -p repo-b-files # 复制Repo B的所有文件到目标目录,不想复制.git的话可以加rm -rf repo-b-files/.git cp -r repo-b-temp/* repo-b-files/ - name: 提交并推送同步后的内容 uses: ad-m/github-push-action@master with: branch: main # Repo A的主分支 github_token: ${{ secrets.GITHUB_TOKEN }} message: "Auto sync from Repo B at $(date +'%Y-%m-%d %H:%M:%S')" - 第三步:保存工作流
点击页面下方的Start commit,输入一个提交信息(比如添加自动同步Repo B的工作流),然后提交即可。
小提示: 如果Repo B是私有仓库,你需要生成一个带repo权限的Personal Access Token(PAT),然后在Repo A的Settings -> Secrets and variables -> Actions里添加一个名为REPO_B_TOKEN的密钥。之后在工作流的拉取Repo B代码步骤里加上token: ${{ secrets.REPO_B_TOKEN }},并把github_token换成${{ secrets.REPO_B_TOKEN }},这样才能有权限访问私有仓库。
内容的提问来源于stack exchange,提问作者maxrena
相关产品推荐
相关产品推荐

