Git-GitHub-操作问题和经验

分割线

实用操作

三种合并方式

  • 设当前 git-status:

merge

合大分支常用

保留所有 commit 信息,merge 操作生成一个 merge-commit

squash

压缩合并, 将几次提交的信息合并, 很不常用

需手动提交所以会改变 commit-user [1]

适用场景为: 同一开发者负责的两 branch, 并且被合并的 branch 记录并不重要

rebase

rebase 变基不会像 squash 那样变更 commit-user 信息, 而且 commit 的合并是手动选择性的

常用于在某一 pull request 内的分支合并

比如下面合并 commit D1 和 E1, 然后 rebase

  • 总图


  • 分三步图


配置代理

  • 有时候 github 会被墙,导致无法推送,需要挂代理

  • 方案:

    git config --global https.proxy http://127.0.0.1:1080
  • 或者直接修改~/.gitconfig文件

    [core]
    autocrlf = true
    longpaths = true
    editor = code.exe
    [user]
    name = Weidows
    email = utsuko27@qq.com
    [http]
    proxy = localhost://127.0.0.1:7890
    [https]
    proxy = localhost://127.0.0.1:7890

版本回退

不小心把 ssh 私钥 copy 到了 git 库里提到了 github 上,差点 GG

Git 恢复之前版本的两种方法 reset、revert(图文详解)

  1. reset 到出错提交的前一个提交
  2. 修改,提交
  3. 强制提交(不强制的话不行): git push origin master -f

缩小仓库体积

删除提交记录

有的仓库因为有时候会提交图片,导致仓库体积格外的庞大

而且大到一定程度会被平台检查 (所以要想办法缩小)


  • 我要压缩的是 Keeper 项目

    因为每天都要提交一张必应壁纸,所以一年下来体积到了 400+ MB

    我想把壁纸拿走,并且把 git 中提交记录也删掉以抹除体积


  • 开始我想的是把现有文件复制到一个新建的库,再把这个库 force push 到 github

    出乎意料,旧的提交并没有消失; 可以看到强推 重构 前面有一个断档,那之前的就是旧提交

    20211102134046
  • 为什么出现这情况? 我给画了个图

    20211102144127

    所以,原因是没删除 github 上的 tags,删掉就没了捏


分支独立法

  • 起初使用的是上面的方法,后来突然想到把这些大文件独立分支

    当需要减小体积时,本地保留好当前内容然后直接删除分支

    再重新拉起一个同名分支 force push

  • 这个方法应该更好些,避免删除不必要内容.


分割线

GitHub

首页绿格子

  • Github 不显示 fork 仓库的 commit, 需要独立出来

License-choice

License

一般盲怼 MIT 就好,不过上图没给出

感觉菜鸟教程的文章最详细: 各种开源协议介绍


pages-域名

  • GitHub 与 Gitee-pages 部署域名规则不同.

  • github 上当且仅当 Repo 名字为userName.github.io时,域名为userName.github.io

    • 其他 Repo 名字为userName.github.io/repoName/
  • Gitee 是当且仅当 Repo 名字为userName.gitee.io时,域名为userName.gitee.io

    • 否则类似上面

删除远程分支

  • 不能删除当前默认分支.

github-action

checkout

20211124165145
  • checkout 默认下只会检出默认分支,不会 clone submodules,可以设置自定义

    - name: Clone repository
    uses: actions/checkout@v2
    with:
    ref: dev # checkout dev branch
    submodules: true

国内时区错位问题

  • 我在东八区,布置的 GitHub Action 是 0 点执行
    • 结果是在早上八点多才执行的(大概是八点半左右,误差<5min)
    • 因为 GitHub 服务器不是在国内,时区不同,其对应的大概是欧洲伦敦那块的标准时区.
  • 结论:布置 Action 定时任务时,设置的时间要早八个小时(对应东八区)

error-when-deploy2server

github action upload files to server via ssh, 本地可以, 但 action 不行

一定要加上最后的 StrictHostKeyChecking=no

bzip2: I/O or other error, bailing out.  Possible reason follows.
bzip2: Broken pipe
Input file = (stdin), output file = (stdout)

Host key verification failed.
bzip2: i/o or other error, bailing out. possible reason follows.
ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no

JsDelivr-刷新缓存

fastly.jsdelivr.net 换为 purge.jsdelivr.net 访问几次 [2]

  • 返回的 JSON 显示 cdn 更新时间戳

    {
    "id": "0p2xZacfrSQPrdsO",
    "status": "finished",
    "timestamp": "2022-03-26T05:31:48.172Z",
    "paths": {
    "/gh/Weidows-projects/live2d-moc3/dist/live2d.min.js": {
    "throttled": true,
    "throttlingReset": 3554
    }
    }
    }

    最近测试似乎失效了…


ssh-config-github-多账号

# GitHub Personal Account
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_personal
IdentitiesOnly yes

# GitHub Work Account
Host github.com-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_work
IdentitiesOnly yes

分割线

Gitlab

pipeline-error

remote: You are not allowed to download code from this project.

去 Manage -> Members 添加触发运行的用户才可以

分割线

凭证和权限

credential-store

如果不保存凭据, 每次 push 都要输用户名和密码, 很烦人

服务器如果不考虑安全问题, 也可以这么用

git config --global credential.helper store

凭据失效

无权限推送到 xxx 仓库

github 删除 ~/.git-credentials

gitlab 去控制面板-凭据管理器删除对应凭据

分割线

借物表

[1]: git merge 的三种操作 merge, squash merge, 和 rebase merge

[2]: https://github.com/wayne0926/jsd