在自己的 GitLab 仓库中维护一个基于 GitHub 开源项目的代码库,同时能够实时监控 GitHub 上原项目的更新,并将其中有用的功能合并到自己的 GitLab 仓库中。以下是实现这个需求的具体方法:
方法:使用 Git Remote 管理多个远程仓库
你可以通过 Git 的远程仓库管理功能,将 GitHub 的原项目和自己的 GitLab 仓库同时关联到本地仓库,然后定期同步和合并代码。这种方法简单高效,适合长期维护。
具体步骤:
克隆你的 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 仓库。
- 假设你的 GitLab 仓库地址是
添加 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)
- 假设 GitHub 开源项目地址是
拉取 GitHub 原项目的最新更新
- 定期从
github
(GitHub)拉取更新到本地:git fetch github
- 如果你想查看主分支(通常是
main
或master
)的更新,可以切换到本地分支并查看:git checkout main git merge github/main
- 这会将 GitHub 的最新代码合并到你的本地
main
分支。你可以在这里检查有哪些新功能或变化(比如用git log
或git diff
)。
- 定期从
查看 GitHub 的最新提交
你可以用
git log
对比本地 GitLab 版本和 GitHub 版本:git log --oneline --graph --decorate --all
或者查看 GitHub 最新提交:
git log github/main --oneline
选择性合并有用的功能
- 如果你只想合并 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
- 如果你只想合并 GitHub 项目中的某些特定提交(而不是全部更新),可以用
推送更新到你的 GitLab 仓库
- 确认合并完成后,将代码推送到你的 GitLab 仓库:
git push origin main
- 确认合并完成后,将代码推送到你的 GitLab 仓库:
示例工作流
假设今天想检查 GitHub 更新并合并:
# 获取 GitHub 最新代码
git fetch github
# 查看更新日志
git log main..github/main
# 合并所有更新到本地
git checkout main
git merge github/main
# 推送至 GitLab
git push origin main
其他
- 也可以基于git rebase进行版本控制。