推荐

常用操作整理

  • git目录下的index文件损坏会出现fatal: unknown index entry format 0xa0400000
  • 初始化gitcommit再创建分支否则报错
  • 查看当前有哪些改动的状态git status红色表示有问题 绿色一般是没问题

git仓库

仓库地址修改

  • git remote -v # 查看远程仓库的地址
  • 方式一:修改本地远程仓库地址
    • git remote set-url origin URL更换远程仓库地址,URL为新地址。
    • git remote set-url origin https://gitee.com/cxvh/cxvh.git
  • 方式二:先删除本地远程仓库地址,然后再添加
    • git remote rm origin删除现有远程仓库
    • git remote add origin url添加新远程仓库
      1
      2
      3
      4
      git remote rm origin
      git remote add origin https://gitee.com/cxvh/cxvh.git
      git remote add gitlab https://gitee.com/cxvh/cxvh.git
      git remote add gitee https://gitee.com/cxvh/cxvh.git

远程库与本地库不一致报错

  • 提交git push origin main
  • 报错error: failed to push some refs to 'https://github.com/cxvh/***'
  • 解决方法git pull --rebase origin main
  • 该命令的意思是把远程库中的更新合并到(pull=fetch+merge)本地库中,–-rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。出现如下图执行pull执行成功后,可以成功执行git push origin master操作。
1
2
3
4
5
6
7
8
error: inflate: data stream error (invalid distance too far back)
error: corrupt loose object '755a6139104a9ed1acce91901d70d36829aebf3b'
fatal: loose object 755a6139104a9ed1acce91901d70d36829aebf3b (stored in .git/objects/75/5a6139104a9ed1acce91901d70d36829aebf3b) is corrupt
fatal: the remote end hung up unexpectedly
fatal: the remote end hung up unexpectedly
fatal: the remote end hung up unexpectedly
Pushing to https://github.com/cxvh/***
error: failed to push some refs to 'https://github.com/cxvh/***'

403错误(一般就是权限问题)如何解决、多账号ssh如何配置?

账号密码管理仓库

  • 凭据
    • win 打开控制面板—>右上角搜索凭据—>点击管理 Windows 凭据—>找到你的gitee凭据操作
    • mac 打开 mac 钥匙串访问

配置ssh免密管理仓库

1
2
3
4
5
6
7
8
9
10
11
# 生成 ssh
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 生成 ssh 一路enter
clip < ~/.ssh/id_rsa.pub # win 复制ssh
pbcopy < ~/.ssh/id_rsa.pub # mac 复制ssh

git init # 初始化仓库。
git add . # 添加文件到暂存区。
git commit -m '第一次提交' # 将暂存区内容添加到仓库中。
git branch -M main # 创建分支
git remote add origin git@github.com:code-ba/hexo-issueslink.git # 添加远程版本库 (origin 是远程地址的意思)
git push -u origin main # 提交或者强制覆盖提交 git push -f origin main

配置文件

1
2
3
4
# 常用命令
less ~/.gitconfig # 查看账号配置
vi .git/config # (工程当前路径的Git配置文件)
vi ~/.gitconfig # (全局的Git配置文件)

配置ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Host 39.100.*.*
HostName 39.100.*.*
User root
ForwardAgent yes

Host github.com
HostName github.com
User baran
PreferredAuthentications publickey
IdentityFile E:\git\baran-demo

Host github.com
HostName github.com
User cxvh
PreferredAuthentications publickey
IdentityFile C:\Users\你的用户名\.ssh\id_rsa

Host code.aliyun.com
HostName code.aliyun.com
User cxvh
PreferredAuthentications publickey
IdentityFile C:\Users\你的用户名\.ssh\alicode\id_rsa

Host gitlab.com
HostName gitlab.com
User cxvh
PreferredAuthentications publickey
IdentityFile C:\Users\你的用户名\.ssh\gitlab\id_rsa

创建 Git 账户 和 仓库

账号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建 Git 账户并赋予权限
adduser git
chmod 740 /etc/sudoers
# 编辑 /etc/sudoers 文件
vim /etc/sudoers
# 按i键进入编辑模式,找到root ALL=(ALL) ALL,在其下方加入:
git ALL=(ALL) ALL # 加入完成后按esc,再输入:wq,保存退出。
# 更变/etc/sudoers权限
chmod 400 /etc/sudoers
# 设置 git 账户密码
sudo passwd git
# 切换至 git 用户,创建 ~/.ssh 文件夹
su git
mkdir ~/.ssh
vi ~/.ssh/authorized_keys # 粘贴公钥进去即可,参考文章 linux ssh
# 更改权限
chmod 600 /home/git/.ssh/authorized_keys
chmod 700 /home/git/.ssh
# 本地测试,直接链接上就对了,出现输入密码就要重新配置(格式:ssh -v git@服务器ip地址或域名)
ssh -v git@cxvh.com

仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建文件夹
mkdir /var/repo
# 赋予权限
chown -R git:git /var/repo
chmod -R 755 /var/repo
# 创建网站根目录,并赋予权限
mkdir /var/hexo
chown -R git:git /var/hexo
chmod -R 755 /var/hexo
# 创建一个空白的git仓库
cd /var/repo
git init --bare hexo.git
# 创建一个新的 Git 钩子用于自动部署
vim /var/repo/hexo.git/hooks/post-receive
# 下面连续两行粘贴进去 去掉前面的,去掉 \#!/bin/bash 前面的 反斜杠(\)
\#!/bin/bash
git --work-tree=/var/hexo --git-dir=/var/repo/hexo.git checkout -f
# 修改权限
chown -R git:git /var/repo/hexo.git/hooks/post-receive
chmod +x /var/repo/hexo.git/hooks/post-receive

使用

1
git clone git@cxvh.com:/var/repo/hexo.git

github 杂记

raw.githubusercontent.comgithub.com是什么关系呢?

字面意思解读:githubusercontent===>github user content
raw意思是===>生的; 未经加工的; 自然状态的; 未经处理的; 未经分析的; 原始的;
此时打开github页面https://github.com/cxvh/cxvh,再点开README.md

  • 当前链接地址https://github.com/cxvh/cxvh/blob/main/README.md
  • README.md内容部分上面有按钮:Raw
  • Raw按钮链接为:https://github.com/cxvh/cxvh/raw/main/README.md
  • Raw链接内容跳转至:https://raw.githubusercontent.com/cxvh/cxvh/main/README.md
  • 由此得出raw.githubusercontent.comgithub.com的原始访问地址。
  • raw.githubusercontent.com由于经常被屏蔽,可以用另一种方法获取原始文件。
  • 复制当前文件地址https://github.com/cxvh/cxvh/blob/main/README.md粘贴到jsdelivr
  • 自动生成链接:https://cdn.jsdelivr.net/gh/cxvh/cxvh@main/README.md
  • 发现内容和raw.githubusercontent.com的一样:https://raw.githubusercontent.com/cxvh/cxvh/main/README.md
  • 此时已完美解决raw.githubusercontent.com无法访问可能导致的问题(如:brew无法正常安装)。

加速下载 github 代码

  • 原理就是从国外下载到码云(码云的服务器比较快),然后从码云再下载到本地
  • 登录码云—>点击新建仓库—>点击导入已有仓库—>粘贴 github 仓库地址—>点击创建—>好了后直接下载即可

github 获取:token

github token push

  • https://cxvh:${GITHUB_TOKEN}@github.com/cxvh/blogs.git
  • git config --global user.name "cxvh"
  • git config --global user.email "***@qq.com"

发布一个 github packages

  • 初始化 package.json
  • npm init --scope=cxvh中的cxvh必须是你的github用户名,其他随便填写一些description和author,然后一路回车就好。
  • Step 1: 添加 publishConfigpackage.json
    • "publishConfig": { "registry": "https://npm.pkg.github.com/" }
  • Step 2: 登录namegithub登录账号,密码用githubtoken,上面有生成方法,邮箱用github邮箱
    • npm login --registry=https://npm.pkg.github.com/
    • package.json name格式为 @登录名/包名 如:@cxvh/hello-world-npm
  • Step 3: Publish
    • npm publish

github action 配置

根据时间自动构建,文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
on:
schedule: # 自动运行工作流程
- cron: '0 * * * *' # 每小时运行一次(每小时的0分钟开始运行)
# - cron: '0 6 * * *' # 每天运行一次(每天的6时0分钟开始运行)
# - cron: '0 6 1 * *' # 每月运行一次(每月1号的6时0分钟开始运行)
# - cron: '*/30 * * * *' # 每 30 分钟更新一次
# - cron: '0 19 */7 * *' # 应该是每 7 天的 19 时 0 分更新
workflow_dispatch: # 直接通过Github Actions工作流程页面手动运行工作流程(无需等待cron调用)

push 或者 pull_request 触发构建

1
2
3
4
5
6
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:

action克隆到当前仓库示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
name: 每天自动同步仓库
on:
schedule:
#- cron: '*/30 * * * *' 每小时的30分钟
- cron: '0 19 * * *'
workflow_dispatch:
jobs:
copy:
runs-on: ubuntu-latest
steps:
- name: 同步到当前仓库
uses: andstor/copycat-action@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }} # 具有 repo 权限的 token
# src_path: 改成来源仓库的要拷贝的路径,根目录则填/.
# dst_path: 改成目标仓库的拷贝位置,以斜杠结尾。这里需要填写斜杠非主页仓库名斜杠
# dst_owner: 改成目标仓库所在的用户名
# dst_repo_name: 改成目标仓库名(也就是用户名点github点io)
# dst_branch: 改成目标仓库的分支名
# src_branch: 改成来源仓库的分支名
# clean: true # 这里要保证目标目录先清空,否则非主页仓库若有删除文件就不会同步到主页仓库
# username: 改成操作的用户名
# email: 改成操作用户的邮箱
src_path: /.
dst_path: /
dst_owner: code-ba
dst_repo_name: rss-reader
dst_branch: main
src_branch: main
clean: true # 这里要保证目标目录先清空,否则非主页仓库若有删除文件就不会同步到主页仓库
username: cxvh
email: ${{ secrets.PERSONAL_EMAIL }} # 当前的仓库邮箱

报错解决记录

密钥
  • win生成密钥ssh-keygen写入权限不够报错
    1
    Saving key "\033[A\033[B/c/Users/Baran.Lee/.ssh/id_rsa)\033[D\033[D\033[C\033[\033[D\033[D\033[D\033[D\033[D\033[Dcodeba/id_rsa" failed: No such file or directory
  • 进入文件夹C:\Users\用户\.ssh\gitlab再执行ssh-keygen命令
git rebase
  • 历史中不连续的commit合并 git rebase -i head~3,然后报错如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    interactive rebase in progress; onto bbef1ea
    No commands done.
    Next commands to do (3 remaining commands):
    s ae093ef 更新 circleci 配置文件
    s 1ab23ac 更新 circleci 配置文件2
    (use "git rebase --edit-todo" to view and edit)
    You are currently editing a commit while rebasing branch 'main' on 'bbef1ea'.
    (use "git commit --amend" to amend the current commit)
    (use "git rebase --continue" once you are satisfied with your changes)

    nothing to commit, working tree clean
  • 回到rebase执行之前的状态 git rebase --abort
git push
  • git push orgin main
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fatal: 'orgin' does not appear to be a git repository
    fatal: Could not read from remote repository.

    Please make sure you have the correct access rights
    and the repository exists.
    #
    $ git push orgin主要
    致命的:“orgin”似乎不是git存储库
    致命:无法从远程存储库读取。

    请确保您具有正确的访问权限
    并且存储库存在。
  • 干掉.git目录,重新配置 git init…
git push提交会提示
1
fatal: unable to access 'https://github.com/cxvh/cxvh-cli-test.git/': OpenSSL SSL_connect: Connection was reset in connection to github.com:443

https链接改为ssh链接即可:git remote set-url origin git@github.com:cxvh/cxvh-cli-test.git

小技巧

  • git update-git-for-windows升级git版本
  • 使用ssh协议克隆时记得先生成公钥配置到git仓库
  • 生成密钥时,确保路径是正确的(路径存在),默认会生成在user用户下面的.ssh文件夹下面,如果.ssh不存在则保存失败,需要手动创建.ssh文件夹