二开代码同步

服务端代码不建议用户二开,而是以引入的方式进行使用,但是前端代码区别于服务端,开发一定会需要新增相关的业务页面或者组件信息。

此教程说明了如何在二开后方便的进行和源代码仓库进行同步。

服务端代码如果必须二开,建议不要改动包名,且项目的业务代码在独立的仓库进行开发,方便后续升级

添加远程仓库

将源仓库配置为二开仓库的一个远程仓库

  • 在本地仓库中使用 git remote -v 查看远程状态。

    本地仓库的 origin 地址在哪都不影响,示例中假定其在 github 上,实际开发时,可能在 gitlab 或者 gitee 上

git remote -v
# origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
# origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
  • 将源仓库添加为本地仓库的一个远程上有仓库
git remote add upstream https://github.com/ballcat-projects/ballcat-ui-vue.git
  • 再次查看状态确认是否配置成功。
git remote -v
# origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
# origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
# upstream  https://github.com/ballcat-projects/ballcat-ui-vue.git (fetch)
# upstream  https://github.com/ballcat-projects/ballcat-ui-vue.git (push)

同步更新

  • 从上游仓库 fetch 分支和提交点,传送到本地,并会被存储在一个本地分支 upstream/master git fetch upstream
git fetch upstream
# remote: Counting objects: 75, done.
# remote: Compressing objects: 100% (53/53), done.
# remote: Total 62 (delta 27), reused 44 (delta 9)
# Unpacking objects: 100% (62/62), done.
# From https://github.com/ballcat-projects/ballcat-ui-vue.git
#  * [new branch]      master     -> upstream/master
  • 切换到本地主分支(如果不在的话) git checkout master
git checkout master
# Switched to branch 'master'
  • 把 upstream/master 分支合并到本地 master 上,这样就完成了同步,并且不会丢掉本地修改的内容。 git merge upstream/master
git merge upstream/master
# Updating a422352..5fdff0f
# Fast-forward
#  README                    |    9 -------
#  README.md                 |    7 ++++++
#  2 files changed, 7 insertions(+), 9 deletions(-)
#  delete mode 100644 README
#  create mode 100644 README.md
  • 这时将合并后的代码推送到自己仓库的远程分支上,即可完成此次同步

常见问题

分支无法合并,控制台打印如下错误信息:

fatal: refusing to merge unrelated histories

这一般是因为,你的库并没有源仓库的提交历史,git 认为这两个仓库没有关联,所以拒绝了合并命令。 这时通过添加 --allow-unrelated-histories 参数来允许合并即可。

git merge upstream/master --allow-unrelated-histories

原文地址

https://gaohaoyang.github.io/2015/04/12/Syncing-a-fork/

https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-forks

https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork