Git 配置 GitLab + GitHub 仓库 && VuePress + GitHub Pages 搭建博客

665 阅读4分钟

0. 项目背景

进入公司时,接手了公司的组件库项目,在之前项目的基础上,使用 VuePress 给项目添加了项目文档,一开始是部署在公司的 GitLab 上, 后来组件开源,现在将项目发布至 npm 上, 项目文档发布至 Github Pages 上。

两件事情需要解决: 1)如何将本地的代码推送到 GitHub 上(公司用的是 GitLab)。 2)将项目文档部署到 GitPage 上(之前对 GitPage部署不是特别熟悉,这里走了很多弯路,花了我大半天的时间)

1. 将本地项目上传到 GitHub 上

第一个想到的是难道是要重新从 GitHub 上下载一个新的项目代码么(开源项目项目领导已在 GitHub 上创建好,但是只有他原本的代码,我接手后升级及文档的代码没有,思考中....)。可能是自己浏览器搜索关键字有问题,没有搜索到如何在连接了 GitLab 仓库后又连接 GitHub。后面想到的是,难道是要把自己原来的 GitLab 远程仓库先移除再添加 GitHub 上的仓库么?

后面实际上我是那样做了,等到快下班的时候询问了领导,他说你可以不用那么做,git 上可以添加多个远程仓库,比如添加 GitHub 上的仓库,可以使用代码 git remote add github git@github.com:用户名/仓库名.git这样来添加 GitHub 上的仓库,提交代码的时候再使用 git push github来提交代码。我按照这操作重新把公司 GitLab 上的和 GitHub 上的仓库重新设置回去。

1.1 关键代码:

# 1. 到项目的根目录下
# 2. 查看当前配置有哪些远程仓库, 执行时加上 -v 参数可以看到每个别名的实际链接地址
$ git remote -v  

# 3. 打印出来的信息, 其中 xxx 为公司的名称,yyy 为项目名称,这边用 xxx 和 yyy 代替
origin  git@git.xxx.io:xxx/yyy.git (fetch)
origin  git@git.xxx.io:xxx/yyy.git (push)

# 4. 添加新的仓库, github 为别名,可以随便取, xxx 为在 github 上的用户名,yyy 为项目名
$ git remote add github git@github.com:xxx/yyy.git

# 5. 重新查看当前配置了哪些远程仓库
$ gt remote -v

# 6. 打印信息,此时可以看到有两个远程仓库的信息
github  github git@github.com:xxx/yyy.git (fetch)
github  github git@github.com:xxx/yyy.git (push)
origin  git@git.xxx.io:xxx/yyy.git (fetch)
origin  git@git.xxx.io:xxx/yyy.git (push)

1.2 将本地的项目上传到 GitHub

# 1. [branch] 代表分支名,因为远程没有本地要上传的分支,加 -u
git push github [branch] -u 

# 2. 报错了,报错信息
git@github.com: Permission denied (publickey)

# 3. 忘记添加密钥了,给仓库添加 ssh 密钥

# 4. 因为是要一个 git 同时绑定 gitlab 与 github,所以操作如下

# 4.1 查看已有密钥
$ ls ~/.ssh/

# 打印信息, 因为 git 已经配置过 gitlab, 看到 id_ed25519.pub 与 id_ed25519  说明已经有一对密钥。
config      id_ed25519.pub  
id_ed25519   known_hosts

# 4.2 生成新的密钥, 给 github 使用, 将此次密钥命名为 id_rsa_github, 最后参数为注册 github 的邮箱,一直回车就成
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C "xxxxx@qq.com"

# 4.3 重新查看已有密钥
$ ls ~/.ssh/

# 打印信息
config      id_ed25519.pub  id_rsa_github.pub
id_ed25519  id_rsa_github   known_hosts

# 4.5 设置不同 Host 对应同一HostName, 但密钥不同

# 4.5.1 在 .ssh 文件下找到 congfig 文件(没有就新建一个)并编辑,输入以下代码并保存

Host github.com
HostName github.com
User xxx@xxx.com       //user后边为github的邮箱
IdentityFile ~/.ssh/id_rsa_hy

Host gitlab.xxx.cn    //host后边为公司gitlab域名
HostName gitlab.xxx.cn   //同上为公司gitlab域名
User xxx@xxx.com          //user后为gitlab的邮箱
IdentityFile ~/.ssh/id_rsa

# 4.5.2 测试 ssh 连接, 提示成功则表示连接成功
$ ssh -T git@github.com
$ ssh -t git@gitlab.xxx.cn

# 5. 重新执行push 操作, 成功push, 后期push 只需要 git push github 即可
git push github [branch] -u 

2 将 VuePress 文档部署到 GitHub Pages 上

具体的步骤我就不写了,可以参考官方文档。记录下部署过程中的重点部分。

2.0 GitHub Pages部署要确保你的仓库是公开的,及仓库性质为 public 才有 Pages 这个东西。

2.1 指定 vuepress build 的输出目录

module.exports = {
  	// 默认为 .vuepress/dist
    dest: 'dist',
  	//...
}

2.2 VuePress 部署到 GitHub Pages 上的路径设置

  • .vuepress/config.js文件下 base 路径配置,这里的vue-amap为 github 上的仓库名
module.exports = {
  	// 路径名为 '/<REPO>/'
    base: '/vue-amap/',
  	//...
}

2.3 创建符合条件的 deploy.sh 文件, 放在 VuePress 文件目录下

参考 官方文档--VuePress部署

#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e

# 生成静态文件
npm run docs:build

# 进入生成的文件夹, 因为修改了 vuepress build 的输出目录为 dist, 这里要设置正确的路径
cd dist

git init
git add -A
git commit -m 'deploy'

# 如果发布到 https://<USERNAME>.github.io/<REPO>
# xxx 为github上的用户名,yyy 为项目名, gh-pages为要发布的分支,若想发到到其他的分支,将 gh-pages 改为其他的分支名即可
git push -f git@github.com:xxx/yyy.git master:gh-pages

cd -

2.4 切换到 VuePress 项目目录底下,执行 sh deploy.sh即可将项目 build 并提交到 github项目上的对应分支。

参考文档

一个git如何同时绑定gitlab与github

一篇带你用 VuePress + Github Pages 搭建博客

使用vuepress搭建GitHub pages静态博客页面