独书先生 Menu

Viewing all items for tag git

git error: bad signature fatal: index file corrupt 解决方案

问题

写好代码准备使用 git desktop 提交的时候,发现我的项目提示 can’t find XXX (XXX 为项目名),并且使用 git bash 输入:git pull 会提示:

error: bad signature 
fatal: index file corrupt

然后尝试remove掉我的项目,重新 Add Repositories, 也无法识别我的本地项目

解决方案:

步骤1

项目根目录下打开 git bash ,输入:

rm -f .git/index

步骤2

接着输入:

git reset

参考自: https://appsoftea.com/zh/git-error-bad-signature-fatal-index-file-corrupt , 感谢!

master提交PR到main分支出现There isn’t anything to compare

master提交PR到main分支出现:There isn't anything to compare.main and master are entirely different commit histories.

解决方案

以下操作会强制覆盖原有代码,所以需要将要保留的内容提前存下来,覆盖后再手动更新上去。

git checkout master
git branch main master -f
git checkout main
git push origin main -f

为何不能合并?

在git checkout main之后会提示你执行git pull,试验发现合并失败,提示:fatal: refusing to merge unrelated histories,应该是和master不允许提交PR到main分支一个意思,没有相同的关联记录,即使代码差不多。

删除不需要的分支

删除本地master分支

git branch -D master

删除远程master分支

git push origin --delete master

如何github commit记录全部清除?

解决

  1. 新建orphan分支
git checkout --orphan latest_branch
  1. 将需要的文件添加到暂存区
git add -A
  1. Commit
git commit -m "..."
  1. 删除main分支
git branch -D main
  1. 将当前latest_branch分支重命名为main分支
git branch -m main
  1. 最后,推送到远程仓库
git push -f origin main

参考

  • https://stackoverflow.com/questions/23344320/there-isnt-anything-to-compare-nothing-to-compare-branches-are-entirely-diffe
  • https://github.com/lishuhao/blog/issues/9

github clone很慢,github上不去,github.io无法访问

问题

github 是程序员必备的代码仓库和学习网站,但是当你发现一个开源库并把它clone下来的时候,发现一直卡住不动,及时能下载也只有几k的速度。

并且,虽然能上github,细心的同学可以发现,大多数github站内图片也是打不开的。

还有的项目的博客或者文档是托管在github.io上的,这个网址也经常是访问不了。

有没有什么补救措施?

解决

首先参考众多网友的智慧,马上就有了方案

方案一:设置git config

修改下git的配置

git config --global http.postBuffer 524288000

有同学用了这个配置,速度就提升了,但是小编用了没有效果,可能还是要看网络原因。

方案二:cnpm镜像

国内大型镜像系统cnpm的服务又来啦!

操作很简单,只要我们将原本的网站中的https://github.com 进行替换为https://github.com.cnpmjs.org即可,比如,

git clone https://github.com/openHacking/vuepress-plugin-qrcode

可以改为

git clone https://github.com.cnpmjs.org/openHacking/vuepress-plugin-qrcode

笔者经过试验,速度确实有所提升,快的时候大概有500k的样子。但是因为镜像是有同步周期的,如果是对实时性要求比较高的小伙伴,需要注意下这个问题。

方案三:gitee同步

这是一个利用gitee.com(码云)的github仓库的一键同步服务,来做一个中转,实现快速下载github项目的目的。

具体操作:

1.注册【码云】

2.通过【码云】【从github导入已有项目】

3.git clone【码云】中的项目

注意:笔者试验过确实可以同步,而且码云的速度还挺快。但是有两个缺点:1.每看到一个库就同步再下载,有点麻烦 2.如果仓库太大,是同步不过来的。所以这个方案也不是万能的。

方案四:修改host文件

git clone特别慢是因为github.global.ssl.fastly.net域名被限制了。
只要找到这个域名对应的ip地址,然后在hosts文件中加上ip–>域名的映射,刷新DNS缓存便可。

具体操作:

  1. 在网站 https://www.ipaddress.com/ 分别搜索:
github.global.ssl.fastly.net
github.com

得到对于的ip地址

  1. 打开hosts文件

– Windows上的hosts文件路径在C:\Windows\System32\drivers\etc\hosts
– Linux的hosts文件路径在:sudo vim /etc/hosts

  1. 在hosts文件末尾添加两行(对应上面查到的ip)
151.101.185.194 github.global-ssl.fastly.net
192.30.253.112 github.com
  1. 保存更新DNS

– Winodws系统的做法:打开CMD,输入ipconfig /flushdns
– Linux的做法:在终端输入sudo /etc/init.d/networking restart

  1. 重新git clone试试

注意:建议多试验几家ip地址获取的服务,因为ip也有被污染的情况,通常一个ip不一定靠谱。笔者经过尝试,发现这种方法并不是很奏效,git clone还是龟速。

方案五:代理

通过本地代理软件,将github代理转发到可以高速访问的服务器上,代理技术有很多应用场景,现在就是一个。

大致步骤:
1. 大多数同学会推荐shadowsocks,加上免费白嫖的账户,就可以链接上了
2. 设置github代理

git config --global http.https://github.com.proxy https://127.0.0.1:1080
git config --global https.https://github.com.proxy https://127.0.0.1:1080

注意这是对https的仓库链接有效果。

小编试验完,发现这个代理并没有作用,已经显示连接上了,但是网速依然感人,不知道哪里出了问题。欢迎试验成功的小伙伴留言区告诉小编。

其实小编估摸着大家已经把所有的方案都试过一遍了,效果还是不如人意。饱含着一整个工作日的研究与心酸泪,小编最后终于发现了一个终极大招:EXPRESS

因为小编想通了一件事情,作为一个合格的程(da)序(gong)猿(ren),没有一款能够稳定输出、坚挺硬刚的强力代理软件,是无法正常享受流畅开发体验的,现在都5G时代了,下个github代码还在5k的速度,内心再也不能接受。

可能有小伙伴对这块有所研究,或许已经成为大家的每日必(kan)备(pian)工(shen)具(qi)。如果有小伙伴对此有所疑虑,那么小编推荐大家仔细阅读下面这篇文章。小编仔细阅读了这篇推心置腹的文章之后,就迅速入手了,也解决了小编多年的上网烦恼。

程序员必备姿势

这是小编使用过的最稳定最快的代理服务,没有之一。

动手做起来,你就成功了一半。

The operation was rejected by your operating system.

问题

npm install报错:

The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

解决

  1. 查看是否有程序占用项目文件夹,比如:
    • git bash打开了项目
    • github desktop打开了项目
    • 另外的cmd窗口打开了此文件夹/项目文件夹
    • 开启了本地服务器/vscode等编辑器软件打开了项目
  2. 在项目中已管理员身份运行cmd(如何以管理员身份运行cmd)

git commit规范

依赖安装

1. 生成commit信息

npm install --save-dev commitizen

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

package.json

"scripts": {
   "commit": "git-cz"
}

2. commit校验

npm install --save-dev @commitlint/config-conventional @commitlint/cli

echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
修改文件commitlint.config.js为正常格式

3. 更新版本、生成changelog、打tag

npm i --save-dev standard-version

package.json

 "scripts": {
    "release": "standard-version"
  }

commit使用步骤

提交代码

git pull
git add .
npm run commit
npm run release -- --prerelease
git push --follow-tags origin master

commit规范

npm run commit后根据交互提示编写
1. type

type为必填项,用于指定commit的类型
# 主要type
feat:     增加新功能
fix:      修复bug

# 特殊type
docs:     只改动了文档相关的内容
style:    不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
build:    构造工具的或者外部依赖的改动,例如webpack,npm
refactor: 代码重构时使用
revert:   执行git revert打印的message

# 不常使用type
test:     添加测试或者修改现有测试
perf:     提高性能的改动
ci:       与CI(持续集成服务)有关的改动
chore:    不修改src或者test的其余修改,例如构建过程或辅助工具的变动
复制代码当一次改动包括主要type与特殊type时,统一采用主要type。
  1. scope

scope也为必填项,用于描述改动的范围,例如在业务项目中可以依据菜单或者功能模块划分,如果是组件库开发,则可以依据组件划分

  1. subject

subject是commit的简短描述

  1. body

commit的详细描述,说明代码提交的详细说明。主要描述改动之前的情况及修改动机,对于小的修改不作要求,但是重大需求、更新等必须添加body来作说明。

  1. break changes

break changes指明是否产生了破坏性修改,涉及break changes的改动必须指明该项,类似版本升级、接口参数减少、接口删除、迁移等。

  1. affect issues

affect issues指明是否影响了某个问题。格式为: fix #{issue_id}
例如:

re #2
fix #14

发布版本

在多次commit之后,可能需要发布一个新版本,以下命令会自动更新版本号

npm run release -- --prerelease
git push --follow-tags origin master 

详细使用:https://github.com/conventional-changelog/standard-version

参考

  • https://juejin.im/post/5cea2c4bf265da1b6836993f
  • https://juejin.im/post/5cc4694a6fb9a03238106eb9
  • https://juejin.im/post/5d0b3f8c6fb9a07ec07fc5d0

centos下安装 docker, git, node, python环境

1. git

yum install git

2. docker

centos下

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

或者参考docker-ce安装

3. node

1. install latest nvm

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

if no any response,try curl:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

v0.35.3 is latest version currently i use, change the version if you need.learn more aboutnvm

if you get error

curl: (7) Failed connect to raw.githubusercontent.com:443; Connection reset by peer

just try open the https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh in browser,download install.sh file manually, then upload to your server, tap sudo bash install.sh manually.

2. solve commond not found

source ~/.nvm/nvm.sh

3. install node v12.X latest version

nvm install 12

4. check node version

node -v

4. python 3

udo yum install yum-utils
sudo yum-builddep python
curl -O https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
tar xf Python-3.8.3.tgz
cd Python-3.8.3
./configure
make
sudo make install
alias python='/usr/local/bin/python3.8' #edit python command python3

git创建仓库提交代码

创建一个仓库后

# Git global setup
git config --global user.name "独书先生"
git config --global user.email "1414556676@qq.com"

# Create a new repository
git clone ssh://git@github.com/DuShuSir/openSource.git
cd jystaticft
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

# Push an existing folder
cd existing\_folder
git init
git remote add origin ssh://git@github.com/DuShuSir/openSource.git
git add .
git commit -m "Initial commit"
git push -u origin master

# Push an existing Git repository**
cd existing\_repo
git remote rename origin old-origin
git remote add origin ssh://git@github.com/DuShuSir/openSource.git
git push -u origin --all
git push -u origin --tags

删除GitHub中的所有提交历史记录

删除.git文件夹可能会导致git存储库中的问题。如果要删除所有提交历史记录,但将代码保持在当前状态,可以按照以下方式安全地执行此操作:

  1. 尝试 运行 git checkout –orphan latest_branch
  2. 添加所有文件 git add -A
  3. 提交更改 git commit -am “commit message”
  4. 删除分支 git branch -D master
  5. 将当前分支重命名 git branch -m master
  6. 最后,强制更新存储 git push -f origin master

设置本地多账户

git init
git add .
git commit -m "init"
git remote add origin https://github.com/Dushusir/lwa.git
git remote set-url origin https://Dushusir@github.com/Dushusir/lwa.git
git config --local credential.helper store
git push -u origin master

详细理解多账户:

git多账户管理: 区分全局账户和本地账户

git tag 打标签

在commit之后

git tag -a release-v0.0.0 -m "内容"
git push origin release-v0.0.0

git 撤销 add commit 操作:

git reset HEAD .

参考

https://appsoftea.com/zh/git-init-repository-push-code/

git多账户管理: 区分全局账户和本地账户

问题

公司使用gitlab私有仓库,开发把代码clone下来,并配置了全局账户,这样每次提交不用登陆,然后自己在github私有仓库的代码clone下来后续如何配置提交?

解决方案

针对使用https作为git地址的方法:
采用git提供的本地存储账户信息功能,把github自己的账户配置上本地登录信息.

步骤

  1. 查看项目地址
git remote -v

得到 https://github.com/XXX/YYY.git 的项目地址,XXX:为你的用户名, YYY是你的项目名, 复制下来,其实直接从github仓库中copy也一样

  1. 设置新的带用户名的地址,即在https://和github之间加上”用户名@”即可
git remote set-url origin https://XXX@github.com/XXX/YYY.git
  1. 设定本地项目的账户密码存储
git config --local credential.helper store
  1. 正常修改代码push一次,第一次会让你输入密码,之后就不用了
    git常用操作

tips:

查看是否有credential.helper

git config --global -l
git config --system -l

清除全局设置

git config --global --unset credential.helper
git config --system --unset credential.helper

我的是使用 git config --system -l 打印中包含 credential.helper=manager
说明全局已经配置

文章 github多账号如何切换? 中提到要把全局配置unset掉,我没弄,本地仓库也可以正常push,所以有什么细节可以参考下原文

https://appsoftea.com/zh/git-multiple-account/
引用自: https://www.zhihu.com/question/23028445 感谢!