代码管理、版本管理是件老大难的事情,尤其多人开发中的代码冲突、突击功能时面临的 hotfix 等。本文只是简单说说如何将一套代码提交到两个 Git 平台(GitHub、GitEE)上。其他的 Git 操作:如本地 commit、远程 push、pull、开启新分支、分支合并等操作,再后面的文章中都会有操作 —— 每一个功能点我都会开启一个新分支。

1 初始化本地 Git 仓库

1.1 初始化仓库

将本地一个目录初始化为本地 git 仓库的命令是:

git init
 

由于咱的工程是通过 vue-cli 创建的,默认已经初始化本地 git 仓库了,故不需要执行上述命令。

1.2 查看状态

在 webstorm 中打开底部的 Termial 窗口,默认会进入到当前工程根路径的命令行中,输入下列命令查看当前代码的状态:

git status
 

显示如下内容:

 MacBook-Pro dscloudy-admin-single % git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        src/modules/
nothing added to commit but untracked files present (use "git add" to track)

提示 src/modules/ 没有纳入到 git 的版本管理中。(虽然咱们新创建了很多目录,但里面没有文件,故 git 是不会提示的,只有当里面有文件时,才会检测)。

1.3 添加文件

按照上面的提示,将 src/modules/ 添加到 Git 版本管理中:

 git add src/modules/
 

说明:如果上面提示的内容都全部需要添加到提交列表中,则可以使用 . 匹配全部:

git add .
 

此时再执行 git status, 会发现 上面的提示变成 黄色的。如果还是红色,也许你 add 后面的路径有错误。

1.4 提交文件

上面的操作已经将新文件或有改动的文件,添加到待提交的列表中,接下来便是将改动提交到本地仓库:

 git commit -m '初始化工程'
 

此时再次执行 git status, 会显示:

MacBook-Pro dscloudy-admin-single % git status
On branch master
nothing to commit, working tree clean
 

git 提交建议遵循业内规范,随着项目增大、提交数越来越多,git commit message 可以提供很多历史信息、便于快速查找,我个人偏好 Angular 的规范,推荐使用工具 commitizen 规范提交信息的格式。同时还可以借助 conventional-changelog 生成 Change Log。

1.5 安装使用 commitizen

commitizen的运行基于 Node JS,在命令行中全局安装:

npm install -g commitizen
 

显示如下信息,则说明安装成功:

MacBook-Pro ~ % npm install -g commitizen
/usr/local/bin/git-cz -> /usr/local/lib/node_modules/commitizen/bin/git-cz
/usr/local/bin/cz -> /usr/local/lib/node_modules/commitizen/bin/git-cz
/usr/local/bin/commitizen -> /usr/local/lib/node_modules/commitizen/bin/commitizen
+ commitizen@4.2.0
added 1 package from 1 contributor, removed 1 package and updated 9 packages in 145.447s
 

安装好该工具后,需要在命令行中进入工程的根目录,执行下面语句,使工程支持 Angular 的Commit Message 格式:

 commitizen init cz-conventional-changelog --save --save-exact
 

咱这工程以后提交代码,就不再使用 git commit -m 'xxx' 来提交代码了,改为使用 git cz 命令。

由于刚才执行命令使工程支持 commitizen,故自动修改了 package.json 文件。执行 git status , 会看到:

 -MacBook-Pro dscloudy-admin-single % git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   package-lock.json
        modified:   package.json
no changes added to commit (use "git add" and/or "git commit -a")
 

咱就提交这个改动尝试 commitizen。 首先还是执行 git add . , 接着执行:

 git cz
 

提示:

 -MacBook-Pro dscloudy-admin-single % git cz
cz-cli@4.2.0, cz-conventional-changelog@3.2.1
? Select the type of change that you're committing: (Use arrow keys)
❯ feat:     A new feature 
  fix:      A bug fix 
  docs:     Documentation only changes 
  style:    Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) 
  refactor: A code change that neither fixes a bug nor adds a feature 
  perf:     A code change that improves performance 
  test:     Adding missing tests or correcting existing tests 
(Move up and down to reveal more choices)
 

这里出现了几个选项,这些选项分别代表不同的提交类型: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert:

 feat: feature, 新功能
fix: 修复 bug
docs: 修改了文档
style: 格式,不影响代码运行的改动(空格、格式化、分号等)
refactor: 重构代码
perf: 性能优化的改动
test: 增加测试
build: 影响构建或外部依赖
chore: 辅助工具的变动,不包括源码和测试文件(如 ESLint 的配置等)
revert: 回到以前提交
 

刚才咱们的改动影响 package.json, 属于 build 类型,选择 build,回车后提示:

 ? What is the scope of this change (e.g. component or file name): (press enter to skip) 
 

改动影响的范围,直接回车即可。接下来提示输入改动的简短描述:

? Write a short, imperative tense description of the change (max 93 chars):
 

简要描述本次提交的改动即可,我这里输入:添加 commitizen 的支持。回车后,会依次让输入 详细描述、选择是否是 breaking changes、是否影响未关闭的 issues, 全部都直接回车即可。最后会提示:

[master 491531b] build: 添加 commitizen 的支持
 2 files changed, 547 insertions(+)
 

这样就完成了git cz 代码提交。关于生成 Change Log,后面遇到在写。接下来需要分别推送到远程仓库。

2 生成 SSH-Key

我们需要把代码分别推送到 GitHub 和 Gitee,由于两个平台对应两个 git 账号,故需要分别生成两个 SSH-Key。

1、 生成 gitee 的 SSH-Key:

ssh-keygen -t rsa -C '你的邮箱' -f ~/.ssh/dscloudy_gitee_id_rsa
 

执行该命令时会提示 Enter passphrase, 直接回车即可。

2、同样的方式生成 github 的 SSH-Key

ssh-keygen -t rsa -C '你的邮箱' -f ~/.ssh/dscloudy_github_id_rsa
 

3、查看生成的文件列表

ls -la ~/.ssh
 

4、配置 config 文件

~/.ssh 目录下会有一个 config 文件,如果没有就新建一个,里面内容如下:

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/dscloudy_gitee_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/dscloudy_github_id_rsa
  

3 推送到 Gitee

3.1 创建仓库

Gitee 地址:https://gitee.com

如果没有账号,先创建账号,登录。 点击页面右上角+ 创建新仓库

3.2 设置密钥

在命令行中输入命令查看公钥:

cat ~/.ssh/dscloudy_gitee_id_rsa.pub
 

将显示的内容复制到上面的文本框中,点击确定。

输入密码后点击验证按钮。 验证通过后,在命令行中输入命令判断是否配置成功:

ssh -T git@gitee.com
 

回车后会看到如下提示:

 Are you sure you want to continue connecting (yes/no/[fingerprint])? 
 

一定要手动输入 yes, 再回车,会提示:

Hi dscloudy! You've successfully authenticated, but GITEE.COM does not provide shell access.
 

看到 successfully 的字眼,说明配置成功。

3.3 推送代码

在命令行中回到工程的根路径,输入如下命令添加到远程仓库:

git remote add gitee_origin git@gitee.com:cloudyly/dscloudy-admin-single.git
 

推送到远程仓库:

git push -u gitee_origin master
 

推送成功后,在网页上面便可以看到这个工程了。

4 推送到 GitHub

4.1 创建仓库

GitHub 地址:https://github.com

如果没有账号,先创建账号,登录。 点击页面右上角+ 创建新仓库。

4.2 设置密钥

进入该页面后,点击 'New SSH Key'。在命令行中查看之前生成的 GitHub的 SSH-Key:

 cat ~/.ssh/dscloudy_github_id_rsa.pub
 

将结果复制到输入框中。点击确定后,会让输入 github 的密码,验证通过后便添加完成。在命令行中输入命令判断是否配置成功:

ssh -T git@github.com
 

回车后会看到提示仍然输入“yes”,最后出现 successfully authenticated便配置成功。

4.3 推送代码

在命令行中回到工程的根路径,输入如下命令添加到远程仓库:

git remote add github_origin git@github.com:cloudyly/dscloudy-admin-single.git
 

推送到远程仓库:

git push -u github_origin master
 

推送成功后,在网页上面便可以看到这个工程了。

至此,咱们完成了多个 SSH-Key 的配置,一级一套代码关联两个远端仓库的操作。其他操作将会贯穿到后面的实战中。


欢迎关注我的个人公众号,留言可加我个人微信或交流问题

Vue企业级优雅实战02-准备工作03-提交 GIT 平台的更多相关文章

  1. Vue企业级优雅实战-00-开篇

    从2018.1.开始参与了多个企业的中台建设,这些中台的技术选型几乎都是基于 Spring Cloud 微服务架构 + 基于 Vue 全家桶的前端.我前后端架构及开发我几乎各占一半的精力,在企业级前端 ...

  2. Vue企业级优雅实战05-框架开发01-登录界面

    预览本文的实现效果: # gitee git clone git@gitee.com:cloudyly/dscloudy-admin-single.git # github git clone git ...

  3. Vue企业级优雅实战03-准备工作04-全局设置

    本文包括如下几个部分: 初始化环境变量文件 JS 配置文件初始化:如是否开启 Mock 数据.加载本地菜单.URL 请求路径等: 国际化文件初始化:初始化国际化文件的结构: 整合 Element UI ...

  4. Vue企业级优雅实战04-组件开发01-SVG图标组件

    (后续的文章 公众号会提前一周更新,欢迎关注文末的微信公众号:程序员搞艺术) 预览本文的实现效果: # gitee git clone git@gitee.com:cloudyly/dscloudy- ...

  5. Vue3 企业级优雅实战 - 组件库框架 - 1 搭建 pnpm monorepo

    前两篇文章分享了基于 vite3 vue3 的组件库基础工程 vue3-component-library-archetype 和用于快速创建该工程的工具 yyg-cli,但在中大型的企业级项目中,通 ...

  6. Vue3 企业级优雅实战 - 组件库框架 - 2 初始化 workspace-root

    上文已经搭建了 pnpm + monorepo 的基础环境,本文对 workspace-root 进行初始化配置,包括:通用配置文件.公共依赖.ESLint. 1 通用配置文件 在项目 根目录 下添加 ...

  7. Vue3 企业级优雅实战 - 组件库框架 - 3 搭建组件库开发环境

    前文已经初始化了 workspace-root,从本文开始就需要依次搭建组件库.example.文档.cli.本文内容是搭建 组件库的开发环境. 1 packages 目录 前面在项目根目录下创建了 ...

  8. Vue3 企业级优雅实战 - 组件库框架 - 4 组件库的 CSS 架构

    在前一篇文章中分享了搭建组件库的基本开发环境.创建了 foo 组件模块和组件库入口模块,本文分享组件库的样式架构设计. 1 常见的 CSS 架构模式 常见的 CSS 架构模式有很多:OOCSS.ACS ...

  9. 如何优雅的使用vue+vux开发app -02

    如何优雅的使用vue+vux开发app -02 很明显这又是一个错误的示范,请勿模仿 使用动态组件实现保留状态的路由 <!DOCTYPE html> <html> <he ...

随机推荐

  1. 2019 7 8 HL 模拟赛

    今天 很不爽 昨天晚上没有睡好觉 大约2点才睡着吧 反正翻来覆去睡不着 不知道为什么可能可行流 或者可行费用流并没有深刻理解 .我不会写 让我心情非常的焦躁. 大凶 顺理成章的被3位强者吊着锤(妈呀我 ...

  2. CF 633 div1 1338 B. Edge Weight Assignment 构造

    LINK:Edge Weight Assignment 这场当时没打 看到这个B题吓到我了 还好当时没打. 想了20min才知道怎么做 而且还不能证明. 首先考虑求最小. 可以发现 如果任意两个叶子节 ...

  3. synchronized的锁升级/锁膨胀

    偏向锁 偏向第一个拿到锁的线程. 即第一个拿到锁的线程,锁会在对象头 Mark Word 中通过 CAS 记录该线程 ID,该线程以后每次拿锁时都不需要进行 CAS(指轻量级锁). 如果该线程正在执行 ...

  4. SparkBench安装使用入门

    SparkBench安装以及快速开始 欢迎关注我的GitHub~ 本指南假定已经可以正常使用Spark 2.x,并且可以访问安装它的系统. 系统环境 CentOS 7.7.1908 Ambari-Sp ...

  5. RNN神经网络模型原理

    1. 前言 循环神经网络(recurrent neural network)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络. 传统的机器学习算法非常依赖于人工提取的特征, ...

  6. KMP算法-从入门到进阶

    题目描述 给定一个文本串text和模式串pattern,从文本串中找出模式串第一次出现的位置 先来看最简单的方法,方便理解题目,也就是暴力求解 暴力求解 放大上面的图,得到下面这个.题目要求匹配到整个 ...

  7. 一张图理清 Python3 所有知识点

    如果你前几天一直有关注 GitHub Trending,那你应该会留意到「Python3 in one pic」这个开源项目. 很多人学习python,不知道从何学起.很多人学习python,掌握了基 ...

  8. ES6 面向对象笔记

    JS面向对象两大编程思想 面向过程 面向对象 面向过程编程POP         面向过程就是分析出问题的需要步骤,然后用函数一步一步的实现,使用的时候一个一个调用就可以了 面向对象编程OOP     ...

  9. 【计算机算法设计与分析】——SVM

    一.简介 支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解.由简至繁的 ...

  10. 11 Linux(CentOS)用户与权限

    用户管理 root 在root用户下可以进行以下操作 useradd 用户名      新增用户 userdel 用户名       删除用户,同时应该删除家目录下的用户文件,与邮箱目录下的用户文件 ...