问题记录
电脑关联多仓库
WARNING
针对 mac 下操作,部分命令 windows 下不适用。
Git 客户端与服务器端的通信支持多种协议,其中 SSH 是最常用的。SSH 的公钥登录流程:用户将自己的公钥存储在远程主机,登录时,远程主机会向用户发送一条消息,用户用自己的私钥加密后,再发给服务器。远程主机用事先存储的公钥进行解密,如果成功,就证明用户可信。
- 第一步:进入.ssh 文件
$ cd ~/.ssh
如果报错:
no such file or directory: /Users/<电脑名称>/.ssh
表示电脑没有配置过;
如果是进入到了相应的文件夹内并且不是自己配置的,建议删除里面文件, 怎么删除?rm -rf *
但是一定要确认当前是在.ssh 文件夹下,不然千万千万不要执行rm -rf *
。
- 第二步:本地生成 GitLab 和 GitHub 的 SSH
$ ssh-keygen -t rsa -C "注册 GitLab 账户的邮箱" # 生成ssh key
$ ssh-keygen -t rsa -C "注册 GitHub 账户的邮箱" # 生成ssh key
WARNING
生成 ssh key 命令回车后,需要对 秘钥
保存地址进行自定义设置,后面 passphrase 密码可以直接忽略。
- GitLab 对应的
秘钥(gitlab_id_rsa)
地址可设置:~/.ssh/gitlab_id_rsa
; - GitHub 对应的
秘钥(github_id_rsa)
地址可设置:~/.ssh/github_id_rsa
。
桌面 ⌘ + F在“访达”窗口中开始“聚焦”搜索,找到<电脑名称>根文件, ⌘ + Shift + . 切换隐藏的文件,找到 .ssh 文件,可以看到:
- 第三步:将公钥分别配置到 GitLab 和 GitHub 的 ssh keys 中
设置 ssh keys
可根据以下步骤将 公钥
分别粘贴配置到对应 ssh keys 中:
- GitLab:
- 我的头像
==>
Settings==>
SSH keys==>
Add key
- 我的头像
- GitHub:
- 我的头像
==>
Settings==>
SSH and GPG keys==>
New SSH key==>
Add SSH key
- 我的头像
$ cd ~/.ssh
$ ls # 查看文件夹下有哪些文件
$ cat github_id_rsa.pub # 回车 将输出的内容复制下来
- 第四步:编写 config 文件
本地调用私钥时默认使用 id_rsa,针对于自定义名称的,需要编写 config 文件,告诉本地调用哪个私钥。
# 创建 config 文件
$ touch ~/.ssh/config
# config 文件内容
Host github.com
HostName github.com
User 任意名称
IdentityFile ~/.ssh/github_id_rsa
- 第四步:验证是否配置成功
# GitLab:
$ ssh -T git@xxx.com
# GitHub:
$ ssh -T git@github.com
输入 yes 后在
.ssh
目录下就多了一个文件known_hosts
如遇报错
- Command failed with exit code 128.
- git config --global --add safe.directory XXX
$ git config --global --add safe.directory "*"
如遇报错
Unable to negotiate with xxxxx port 22: no matching host key type found.
- 在
config
文件中添加
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
参考资料:Unable to negotiate with xxxxx port 22: no matching host key type found. Their offer: ssh-rsa报错的解决方法
本地调试 npm 模块
WARNING
在组件依赖开发中,项目作为依赖库没法独自间接运行,须要依赖进别的方式执行,这时候最常用的形式就是 npm link。但用 npm link 引入的依赖因为资源文件不在我的项目下,webpack 不会对其做预编译,导致构建或者运行时会报错。对于这样的状况,可以考虑一个很适宜的解决方案 —— yalc。
第一步:本地 link 模块
- 模块 package.json 添加个人信息,开启编辑权限
- 模块打包和运行
sh$ npm run build # 打包 # 模块(线上组件)运行 $ npm run lib $ npm run lib:hot # 热更新 # 相关命令配置 "lib": "rm -rf lib && babel src -d lib --copy-files", "lib:hot": "babel src -d lib --copy-files --watch",
- link 模块
sh# 项目和模块相同目录 或者 模块文件名和模块名一致的情况 $ npm link <本地模块绝对路径> # 链接模块目录 # 项目和模块不在同一个目录下,需要先把模块链接到全局,然后再在项目中链接模块 $ cd <模块目录> # 先去到模块目录,把它链接到全局 $ npm link $ cd <项目目录> # 再去项目目录 $ npm link <module-name> # 通过包名建立链接
- 解除链接
sh# 解除项目和模块的链接 $ cd <项目目录> $ npm unlink <module-name> # 解除模块的全局链接 $ cd <模块目录> $ npm unlink <module-name> # unlink 后会删除 package.json 里面包依赖信息,需重新下载最新指定版本的包
第二步:进行本地开发调试
第三步:打包发布 npm 包
- 打包前修改 package.json 里面的版本号
sh$ npm run build # 打包 $ npm publish --tag=beta # 测试版 $ npm publish # 正式版 # 如有需要 $ npm add user $ npm login
OpenSSL SSL_read: Connection was reset, errno 10054
原因:
这是服务器的 SSL 证书没有经过第三方机构的签署,所以报错。可全局执行:
# 关闭 Git 在 https 连接时对服务器证书的验证
$ git config --global http.sslVerify "false"
fatal: refusing to merge unrelated histories 解决
# 允许不相关历史提交,强制合并,然后本地处理冲突之后再进行提交
$ git pull origin master --allow-unrelated-histories
$ git pull --allow-unrelated-histories
$ git merge master --allow-unrelated-histories
husky > npm run -s precommit (node v10.xx.xx)
$ git commit -m "提交页面备注" --no-verify
代码回滚误操作如何恢复
- 代码有进行
commit
操作
# 回滚上一个版本(删除工作空间的改动代码,撤销commit且撤销add)
$ git reset --hard HEAD^
# 如何恢复删除的代码
$ git reflog
$ git reset --hard [hash]
- 代码没有
commit
,但进行了git add .
,解决方法参考链接
出现 git 提交冲突场景
# pull 和 push 同时存在
$ git pull --rebase
$ git rebase --continue
# 撤销 rebase 操作
$ git rebase --abort