跟踪 GitHub 上游仓库的更新,并挑选有用的功能合并到你的 GitLab 仓库

半兽人 发表于: 2025-05-07   最后更新时间: 2025-05-08 00:05:56  
{{totalSubscript}} 订阅, 43 游览

在自己的 GitLab 仓库中维护一个基于 GitHub 开源项目的代码库,同时能够实时监控 GitHub 上原项目的更新,并将其中有用的功能合并到自己的 GitLab 仓库中。以下是实现这个需求的具体方法:

方法:使用 Git Remote 管理多个远程仓库

你可以通过 Git 的远程仓库管理功能,将 GitHub 的原项目和自己的 GitLab 仓库同时关联到本地仓库,然后定期同步和合并代码。这种方法简单高效,适合长期维护。

具体步骤:

  1. 克隆你的 GitLab 仓库到本地

    • 假设你的 GitLab 仓库地址是 git@gitlab.com:your-username/your-repo.git,在本地执行:
      git clone git@gitlab.com:your-username/your-repo.git
      cd your-repo
      
    • 这会创建一个本地仓库,默认的远程仓库名为 origin,指向你的 GitLab 仓库。
  2. 添加 GitHub 原项目作为第二个远程仓库

    • 假设 GitHub 开源项目地址是 git@github.com:original-owner/original-repo.git,执行以下命令添加一个新的远程仓库(可以命名为 github):
      git remote add github git@github.com:original-owner/original-repo.git
      
    • 运行 git remote -v 检查确认,现在你应该看到两个远程仓库:
      origin  git@gitlab.com:your-username/your-repo.git (fetch)
      origin  git@gitlab.com:your-username/your-repo.git (push)
      github  git@github.com:original-owner/original-repo.git (fetch)
      github  git@github.com:original-owner/original-repo.git (push)
      
  3. 拉取 GitHub 原项目的最新更新

    • 定期从 github(GitHub)拉取更新到本地:
      git fetch github
      
    • 如果你想查看主分支(通常是 mainmaster)的更新,可以切换到本地分支并查看:
      git checkout main
      git merge github/main
      
    • 这会将 GitHub 的最新代码合并到你的本地 main 分支。你可以在这里检查有哪些新功能或变化(比如用 git loggit diff)。
  4. 查看 GitHub 的最新提交

    你可以用 git log 对比本地 GitLab 版本和 GitHub 版本:

     git log --oneline --graph --decorate --all
    

    或者查看 GitHub 最新提交:

     git log github/main --oneline
    
  5. 选择性合并有用的功能

    • 如果你只想合并 GitHub 项目中的某些特定提交(而不是全部更新),可以用 git cherry-pick
      • 找到想要的提交的哈希值(通过 git log github/main 查看)。
      • 执行:
        git cherry-pick <commit-hash>
        
      • 这样只会将指定的提交应用到你的本地分支。
    • 或者,如果 GitHub 项目使用了特性分支,你可以直接合并某个分支:
      git fetch github
      git checkout -b feature-branch github/<feature-branch-name>
      git checkout main
      git merge feature-branch
      
  6. 推送更新到你的 GitLab 仓库

    • 确认合并完成后,将代码推送到你的 GitLab 仓库:
      git push origin main
      

示例工作流

假设今天想检查 GitHub 更新并合并:

# 获取 GitHub 最新代码
git fetch github

# 查看更新日志
git log main..github/main

# 合并所有更新到本地
git checkout main
git merge github/main

# 推送至 GitLab
git push origin main

其他

git
更新于 2025-05-08

查看git更多相关的文章或提一个关于git的问题,也可以与我们一起分享文章