• 主页
  • 分类
  • 归档
所有文章 大纲

  • 主页
  • 分类
  • 归档

git使用汇总


阅读数: 171    2021-03-17

Git基础使用

  1. 首先,我们这里选用GitHub作为代码存储仓库,git bash是我们常用的git操作窗口(cmd也可以,建议用git bash)。

    GitHub:https://github.com/

    Git工具:https://git-scm.com/download/win

    注册GitHub账号并安装好git就可以在项目目录下右键打开git bash了。

    img

  2. 设置/查看git用户名和邮箱:

    1
    2
    3
    4
    5
    6
    7
    # 设置用户名和邮箱
    git config --global user.name "username"
    git config --global user.email "email"

    # 查看用户名和邮箱:
    git config user.name
    git config user.email
  3. 接下来就要连接仓库了,这时候就需要SSH Key添加到项目owner(项目拥有者)的GitHub上。

    • 创建SSH Key

      在项目主目录或者系统的目录( C:\Users\[账号,默认是Administrator]\.ssh )下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有,跳到下一步。如果没有,打开Shell(或者Git Bash),创建SSH Key:

      1
      ssh-keygen -t rsa -C "[youremail@example].com"

      这里的youremail@example.com是GitHub的注册邮箱。如果一切顺利的话,可以在项目主目录或者( C:\Users\[账号,默认是Administrator]\.ssh )里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人,所以大胆地把id_rsa.pub告诉我吧。

  4. owner根据你的GitHub账号(注册邮箱)和id_rsa.pub就能将你拉入项目组里面了,然后团队开发的环境就建立起来了。

  5. 接下来描述一下团队开发方式。

    第一步:若本地没有从GitHub上下载过代码,那么请在一个文件夹下打开git bash ,直接使用下面命令拿取代码到当前目录:

    1
    git clone git@github.com:Cheerfulion/scut-v2.0.git

    git clone 命令后面的 git@github.com:Cheerfulion/scut-v2.0.git 这么一串是项目的git地址,可以在任何一个git的托管平台项目上看到,而且不需要建立链接(即不需要添加你的ssh key到他的项目上)就能下载代码。GitHub的git地址显示位置如下:

    img

    第二步:在项目上创建新的分支,在新的分支上进行代码调整,调整完成后到第三步。

    第三步:提交前担心有冲突可以先git pull同步下代码,然后add并且commit提交本次修改。(git pull就是git fetch和git merge的集合)

    第四步:最后使用git push提交当前分支到远程仓库就完成。(注意:一般在正式项目上是不允许提交的当前分支是dev或者master分支的,这两个分支提交到远程也是对应远程的dev和master分支,而这两个分支通常都是要保证绝对无误的,也就是要测试部门测试通过才能合并。)

Git 基础命令

查看分支:git branch

img

前面带*号的是远程分支。默认是查看本地分支,带上参数 -r是查看远程分支,-a是远程和本地的所有分支

创建分支:git branch

1
2
3
4
5
6
7
8
# 示例1 从本地某一分支继承代码创建新分支
git branch new-branch-name dev

# 示例2 从远程某一分支继承代码创建分支
git branch new-branch-name origin/dev

# 示例3 不指定继承分支,默认继承当前所在分支
git branch new-branch-name

切换分支:git checkout <branch-name>

img

创建并切换分支:git checkout -b <new_branch_name>

img

删除分支:git branch -d <branch_name>

img

查看两个版本的差异:

查看两个提交版本的修改记录差异:git diff [commit-id1] [commit-id2]

img

查看两个提交版本修改文件差异:git diff [commit-id1] [commit-id2] --stat

img

若你的代码不是从远程克隆(git clone)下来的,提交代码到远程时就会因为没有关联到远程库而失败,关联远程库使用下面命令(后面的依旧是git地址,和git clone倒是很相似):git remote add origin git@[server-name]:[path]/[repo-name].git;

img

之后就可以使用 git push -u origin 使进行提交了。

备注:今天这样子执行遇到一个问题,如下:

img

解决方法来自:https://jingyan.baidu.com/article/f3e34a12a25bc8f5ea65354a.html

今天(2019-06-06 23:38)又遇到了上面这个问题,无法使用git pull –rebase origin master 解决。

img

解决方法:

img

img

img

参考:https://blog.csdn.net/u012145252/article/details/80628451

git三种回退类型和两种回退方式

回退的三种类型:soft mixed(默认) hard

在本地git会分三个区:工作区、暂存区、本地库。

  • hard
    ①移动本地库HEAD指针

    ②重置暂存区

    ③重置工作区

    意思就是,回滚后,工作区和你回退版本的代码是一致的。

  • soft
    ①移动本地库HEAD指针

    意思就是,回滚后,仅仅是把本地库的指针移动了,而暂存区和你本地的代码是没有做任何改变的。

  • mixed
    ①移动本地库HEAD指针

    ②重置暂存区

    意思就是,回滚后,不仅移动了本地库的指针,同时暂存区的东西也没了。

回退的两种方式 HEAD~n commitID

  • HEAD~n

    回退到倒数第n个版本,如强制回退到上个版本是:

    1
    git reset --hard HEAD~1
  • commitID

    回退到指定版本

    1
    2
    3
    4
    # 通过 git log 或者 git reflog 拿到 commitID
    git log
    # commit 8a56a0d19766c237328c2941794769219053cf5f (HEAD -> master, origin/master)
    git reset --hard 8a56a0d19766c237328c2941794769219053cf5f

window下配置.gitignore

  • 在仓库目录下打开GitBash,输入命令 touch .gitignore

  • 常用的.gitignore配置

    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
    33
    34
    .mvn
    .iml
    mvnw
    mvnw.cmd
    target/
    help.md
    .cache
    .project
    .settings
    .classpath

    *.log
    logs/

    .idea
    .idea/

    # dependencies
    node_modules/

    # production
    build/
    dist/

    # misc
    .idea/
    .happypack
    .DS_Store

    npm-debug.log*
    yarn-debug.log*
    yarn-error.log*

    application.properties
  • 保存,提交到本地仓库

配置无效几种情况

  • 命令格式错误

  • 在配置语句的前后面添加空格、Tab、注释等,会导致当前行的配置语句失效

  • 配置语句对已经add、commit或者远程仓库存在的文件无效

    .gitignore只能忽略原来没有被追踪的文件,如已被纳入了版本管理中,则修改.gitignore是无效的

  • 对于提交到了远程仓库的文件,解决方法参考这里:https://segmentfault.com/q/1010000000430426

这里提供对于已经关联git的文件忽略的处理方法,比较难以理解的就是用上面最后一点文章里面提到的 “删除本地缓存” 的方法,即:

1
2
3
4
# . 可以改成不希望关联的文件
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

我通常使用的最直接暴力的方法,备份文件,删除文件,重新提交并push到远程后(让文件不再被track),再复制备份文件回来

1
2
3
4
5
6
mv node_modules /var/backup/node_modules
rm -rf node_modules
git add .
git commit -m "rm node_modules"
git push
mv /var/backup/node_modules node_modules

Git删除工作区或暂存区或版本库中的文件

原文链接:https://www.cnblogs.com/cposture/p/git.html, 略做补充修改。

基础说明:

我们知道Git有三大区(工作区、暂存区、版本库)以及几个状态(untracked、unstaged、uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的其他有关Git的文章【链接】。

  • 打开你的项目文件夹,除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit)。

  • 首次新建的文件都是untracked状态(未跟踪),此时需要git add到暂存区,Git便会在暂存区中生成一个该文件的索引,文件此时处于uncommited状态,需要git commit生成版本库。添加到了版本库之后,再对文件进行修改,那么文件的状态会变为unstaged状态。

    简单的认识了Git的工作流程,接下来便可以看看如何删除错误添加到暂存区或版本库里的文件了!

删除修改错误的工作区文件

1
2
3
4
# 单个文件没有add过的修改撤销
git checkout <filenpath>
# 当前目录下的所有文件没有add过的修改撤销
git checkout .

删除错误添加到暂存区的文件

有时你在工作区新建了文件TestFile,并且已经将它添加到了暂存区,git会告知,现有有一个文件未提交到版本库,如下图:

img

  • 仅仅删除暂存区里的文件

    git rm --cache 文件名

    上面的命令仅仅删除暂存区的文件而已,不会影响工作区的文件,此时输入git status,git会告知有一个未跟踪的文件。

  • 删除暂存区和工作区的文件

    git rm -f 文件名

删除错误提交的commit

有时,不仅添加到了暂存区,而且commit到了版本库,这个时候就不能使用git rm了,需要使用git reset命令。

错误提交到了版本库,此时无论工作区、暂存区,还是版本库,这三者的内容都是一样的,所以在这种情况下,只是删除了工作区和暂存区的文件,下一次用该版本库回滚那个误添加的文件还会重新生成。

这个时候,我们必须撤销版本库的修改才能解决问题!

git reset有三个选项,--hard、--mixed、--soft。

1
2
# 仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --soft 版本库ID
1
2
# 仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
git reset --mixed 版本库ID
1
2
# 彻底将工作区、暂存区和版本库记录恢复到指定的版本库
git reset --hard 版本库ID

那我们到底应该用哪个选项好呢?

(1)如果你是在提交了后,对工作区的代码做了修改,并且想保留这些修改,那么可以使用git reset –mixed 版本库ID,注意这个版本库ID应该不是你刚刚提交的版本库ID,而是刚刚提交版本库的上一个版本库。如下图:

(2)如果不想保留这些修改,可以直接使用彻底的恢复命令,git reset –hard 版本库ID。

(3)为什么不使用–soft呢,因为它只是恢复了版本库,暂存区仍然存在你错误提交的文件索引,还需要进一步使用上一节的删除错误添加到暂存区的文件,详细见上文。

img

nano如何使用?

git的默认编辑器是nano,使用方法见下文。

http://www.vpser.net/manage/nano.html

在gitlab创建项目仓库后提示记录

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
## Git global setup
# git config --global user.name "【你的账号】"
# git config --global user.email "【你的邮箱】"

# Create a new repository
git clone git@gitlab.xxx.com:projects/xxx.git
cd xxx
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

# Existing folder
cd existing_folder
git init
git remote add origin git@gitlab.xxx.com:projects/xxx.git
git add .
git commit -m "Initial commit"
git push -u origin master

# Existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.xxx.com:projects/xxx.git
git push -u origin --all
git push -u origin --tags

Conventional Commits 规范

Commit 规范有助于团队成员更好地理解每次提交所做的更改,方便项目的维护和管理。

Conventional Commits 规范 是目前最流行的 Commit 规范,它的格式如下:

1
2
3
4
5
<类型>[可选 范围]: <描述>

[可选 正文]

[可选 脚注]
  • 类型(Type):描述提交的性质,常用类型如下:
    • feat:新增功能。
    • fix:修复 bug。
    • docs:文档相关的修改,如 README、注释等。
    • style:不影响代码逻辑的格式调整,如空格、缩进、分号等。
    • refactor:代码重构,既不是新增功能也不是修复 bug。
    • perf:性能优化。
    • test:添加或修改测试代码。
    • chore:构建过程或辅助工具的变动,如更新依赖、配置文件等。
  • 范围(Scope):可选字段,用于说明本次提交影响的范围,比如某个模块、功能或文件。
  • 描述(Description):对提交内容的简短描述,应使用祈使句,首字母小写,结尾不要加句号。
  • 正文(Body):可选字段,对本次提交进行更详细的说明,可包含修改的原因、背景等。
  • 脚注(Footer):可选字段,可用于关联 issue、Breaking Changes 等信息。

示例

1
2
3
4
5
6
feat(user-module): add user registration feature

This commit adds a new user registration feature to the user module.
It includes a registration form and backend API to handle the registration process.

Resolves: #123

关于如何在项目中约束提交,可见:开发者必看!在团队中我是这样实现 Git 提交规范化的

Git使用场景处理方法

删除untracked files(略)

1
2
3
4
5
6
7
8
9
10
11
12
13
## 删除 untracked files
git clean -f

## 连 untracked 的目录也一起删掉
git clean -fd

# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd

## 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

危险操作,了解即可

放弃本地全部修改,将远端库强制覆盖到本地

1
2
3
git fetch --all
git reset --hard origin/master (这里master要修改为对应的分支名)
git pull (解决可能的冲突)

有时候同一个分支,远程的和本地的都被修改的面目全非了,这时候想要把本地的替换成远程的用该方式非常方便

忘记切换分支,误将代码提交到了别的远程分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 回滚提交 reset
# 首先我想到的是 reset 命令将我最近一次提交放回暂存区, 并取消此次提交.
git reset HEAD~1

# 将更改到缓存区
git add .

# 将被跟踪的内容stash, 新建的文件不用担心, 依旧是未跟踪文件.
git stash

# 切换到正确分支(或者创建一个分支)
git checkout -t origin/production -b issue-0

# 将stash的内容pop出来
git stash pop

# 提交和推送了
git add .
git commit -m "提交信息"
git push origin issue-0

# 但原来的分支production依旧是多了一次提交, 这时候需要切回去, 提交一次
git checkout production
git push origin production -f # 这里要加上-f强制提交

如何快速关联/修改Git远程仓库地址

  1. 方法一(最推荐): 把修改旧Git地址,添加新的Git远程仓库地址

    1
    2
    3
    4
    5
    6
    git remote rename origin old-origin
    git remote add origin git@gitlab.xxx.cn:xxx/xxx.git
    git push -u origin --all
    git push -u origin --tags
    # 查看结果
    git remote -v
  2. 方法二:删除本地仓库当前关联的无效远程地址,再为本地仓库添加新的远程仓库地址

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 查看git对应的远程仓库地址
    git remote -v
    # 删除关联对应的远程仓库地址
    git remote rm origin
    # 查看是否删除成功,如果没有任何返回结果,表示OK
    git remote -v
    # 重新关联git远程仓库地址
    # 这里需要注意,关联https的话部署秘钥是无效的,还是要通过账号密码去拉取代码。
    # 如果一定要关联https的路径的话,可以百度下缓存账号密码的方式
    git remote add origin git@gitlab.xxx.cn:xxx/xxx.git
    # 测试是否可以连接到远程仓库,如果没有welcome,需要配置秘钥(参考上面的ssh key生成)
    ssh -T git@gitlab.xxx.cn
    # 设置关联,这里是关联本地master分支和远程master分支
    git branch --set-upstream-to=origin/master master
  3. 方法三:直接修改本地仓库所关联的远程仓库的地址

    1
    2
    3
    4
    5
    6
    # 查看远程仓库名称:origin 
    git remote
    # 查看远程仓库地址
    git remote get-url origin
    # 如果未设置ssh-key,此处仓库地址为 http://... 开头
    git remote set-url origin https://github.com/developers-youcong/Metronic_Template.git
  4. 方法四:修改 .git 配置文件

    1
    2
    3
    4
    # 进入.git目录
    cd .git
    # 修改config配置文件,快速找到remote "origin"下面的url并替换即可实现快速关联和修改
    vim config

撤回远程仓库里面的提交记录(略)

  • git log 查看要回退到的版本号

  • git reset [–soft| –mixed | –hard] <版本号>

  • git push –force

    因gitlab的提交历史在本地的前面,需要加上–force强制推送,需要注意的是对于保护分支依旧会报错,这时需要管理员暂时取消分支保护。

    当然这种做法不可取,但是如果你不小心在远程仓库的提交信息里面写了老板的坏话的话还是用该方法保命吧,哈!一般来说,分支的合并会有专人审核,所以基本上该方法不会使用到,但是了解总归没错的。

去除gitlab对分支的保护(略)

有时候对master分支进行强制push【git push -f】时会报错

img

这是因为master分支受保护,处理方式是去掉这个保护。解决方法如下:
找到Branches—-project setting –Protected Branches–点击master的unprotect即可。

img

img

img

解决 git pull/push 每次都要输入用户名密码的问题

首先明确一点:出现这种问题的原因都是因为使用 http 的方式拉取代码才出现的,如下图所示:

img

第一种解决方法(windows)

出现上面这种情况 先按提示输入用户名和密码,接着执行 git config –global credential.helper store
这句命令的意义是在本地生成包含 git 账号和密码的文件,具体操作如下图:

img

检验方式:C:\Users\你的电脑名; 这个文件夹(如下)下面是否能找到.git-credentials文件,如果文件的内容是有关你的gitlab的设置,格式为:http://{用户名}:{密码}@{git 网址}

再次执行 git pull 操作就不需要再输入用户名和密码了

img

第二种解决方法(通用)

切换 git 的拉取方式,将 http 改为 ssh 的方式
1、查看clone 地址:git remote -v

img

2、移除 http 的方式:git remote rm origin

img

移除完之后再次查看拉取方式会发现为空,此时我们需要添加 ssh 的拉取方式

3、换成 ssh方式: git remote add origin [git 地址]

img

此时通过 git remote -v 查看会发现成功的从 http 拉取方式切换为 ssh 拉取方式了
大功告成!

Git命令行中文乱码

git默认是不能识别中文的。需要在终端修改能识别中文。

1
git config --global core.quotepath false

core.quotepath设为false的话,就不会对0x80以上的字符进行编码。中文显示正常。

1609771436187

本地Git仓库关联多个远程仓库的两种方法

原文链接:https://zhuanlan.zhihu.com/p/82388563

背景

通常情况下,一个本地Git仓库对应一个远程仓库,每次pull和push仅涉及本地仓库和该远程仓库的同步;然而,在一些情况下,一个本地仓库需要同时关联多个远程仓库,比如:同时将一个项目发布在Github和Coding上,以兼顾国内外的访客。

那么,如何让一个本地仓库同时关联多个远程仓库呢?

方法1:每次push、pull时需分开操作

首先,查看本地仓库所关联的远程仓库:(假定最初仅关联了一个远程仓库)

1
2
3
$ git remote -v
origin git@github.com:keithnull/keithnull.github.io.git (fetch)
origin git@github.com:keithnull/keithnull.github.io.git (push)

然后,用git remote add <name> <url>添加一个远程仓库,其中name可以任意指定(对应上面的origin部分),比如:

1
$ git remote add coding.net git@git.coding.net:KeithNull/keithnull.github.io.git

再次查看本地仓库所关联的远程仓库,可以发现成功关联了两个远程仓库:

1
2
3
4
5
$ git remote -v
coding.net git@git.coding.net:KeithNull/keithnull.github.io.git (fetch)
coding.net git@git.coding.net:KeithNull/keithnull.github.io.git (push)
origin git@github.com:keithnull/keithnull.github.io.git (fetch)
origin git@github.com:keithnull/keithnull.github.io.git (push)

此后,若需进行push操作,则需要指定目标仓库,git push <repo> <branch>,对这两个远程仓库分别操作:

1
2
$ git push origin master
$ git push coding.net master

同理,pull操作也需要指定从哪个远程仓库拉取,git pull <repo> <branch>,从这两个仓库中选择其一:

1
2
$ git pull origin master
$ git pull coding.net master

方法2:push和pull无需额外操作

在方法1中,由于我们添加了多个远程仓库,在push和pull时便面临了仓库的选择问题。诚然如此较为严谨,但是在许多情况下,我们只需要保持远程仓库完全一致,而不需要进行区分,因而这样的区分便显得有些“多余”。

同样地,先查看已有的远程仓库:(假定最初仅关联了一个远程仓库)

1
2
3
$ git remote -v
origin git@github.com:keithnull/keithnull.github.io.git (fetch)
origin git@github.com:keithnull/keithnull.github.io.git (push)

然后,不额外添加远程仓库,而是给现有的远程仓库添加额外的URL。使用git remote set-url -add <name> <url>,给已有的名为name的远程仓库添加一个远程地址,比如:

1
$ git remote set-url --add origin git@git.coding.net:KeithNull/keithnull.github.io.git

再次查看所关联的远程仓库:

1
2
3
4
$ git remote -v
origin git@github.com:keithnull/keithnull.github.io.git (fetch)
origin git@github.com:keithnull/keithnull.github.io.git (push)
origin git@git.coding.net:KeithNull/keithnull.github.io.git (push)

可以看到,我们并没有如方法1一般增加远程仓库的数目,而是给一个远程仓库赋予了多个地址(或者准确地说,多个用于push的地址)。

因此,这样设置后的push 和pull操作与最初的操作完全一致,不需要进行调整。

总结

以上是给一个本地仓库关联多个远程仓库的两种方法,二者各有优劣,不过出于简便考虑,我最终采用了方法2。

此外,上述内容中涉及到的Git指令略去了许多不常用的参数,如需更加详细的说明,可以查阅Git文档,或者直接在命令行运行git remote --help。

统一项目的换行符

参考文章:Git配置autocrlf来处理文件crlf

ps:如果提交的代码diff的时候显示一些没有修改的地方也修改了,而且还是几乎整个文件的时候,就可以检查是否是换行符的问题了。这个在IDE的diff时候也有提示,只是不太明显。

格式化与空白是许多开发人员在协作时,特别是在跨平台情况下,遇到的令人头疼的细小问题。由于编辑器的不同或者Windows程序员在跨平台项目中的文件行尾加入了回车换行符,一些细微的空格变化会不经意地进入大家合作的工作或提交的补丁中。不用怕,Git 的一些配置选项会帮助你解决这些问题。

core.autocrlf概念

Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF:

$ git config --global core.autocrlf true
表示要求git在提交时将crlf转换为lf,而在检出时将crlf转换为lf。

Linux或Mac系统使用LF作为行结束符,因此你不想 Git 在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉 Git 在提交时把CRLF转换成LF,签出时不转换:

$ git config --global core.autocrlf input
表示在提交时将crlf转换为lf,而检出时不转换 。
这样会在Windows系统上的签出文件中保留CRLF,会在Mac和Linux系统上,包括仓库中保留LF。

如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:

$ git config --global core.autocrlf false
表示提交和检出代码时均不进行转换

实际项目处理建议:

  1. 如果项目中没有对源文件的换行符作出规定,在Mac/Linux上设置 autocrlf = input, 在Windows上设置autocrlf = true(默认值);
    这样的话,

    • Windows:(true)
      提交时,将CRLF 转成 LF再提交;
      切出时,自动将LF 转为 CRLF;
    • MAC/Linux: (input)
      提交时, 将CRLF 转成 LF再提交;
      切出时,保持LF即可;

    即可保证仓库中永远都是LF. 而且在Windows工作空间都是CRLF, 在Mac/Linux工作空间都是LF.

  2. . 如果项目对源文件的换行符作出强制规定,比如在.editorconfig文件中设置end_of_line = lf:
    在这里插入图片描述
    那么就没必要autocrlf = true;因为此时工作区代码会因为上面这个设置换行符作了强制规定为LF,如果autocrlf 再设为true就会有冲突了;
    此种情况autocrlf = input即可。

  3. 文件的换行符类型可以在编辑器(如VSCODE,IDEA等)的右下角查看。

    image-20210908141455484

注意:当修改了autocrlf的值后,项目代码最好删除再重新clone,不然本地文件换行符不会自动变的。

名词解释

  • CR:Carriage Return,对应ASCII中转义字符\r,表示回车
  • LF:Linefeed,对应ASCII中转义字符\n,表示换行
  • CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行

众所周知,

  • Windows操作系统采用两个字符来进行换行,即CRLF;
  • Unix/Linux/Mac OS X操作系统采用单个字符LF来进行换行;
  • 另外,MacIntosh操作系统(即早期的Mac操作系统)采用单个字符CR来进行换行。

交互式rebase

案例1: 修改提交信息

当我们项目的git commit message需要修改时,可以使用git rebase -i 进行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
# git rebase到需要修改message的那个commit的前1个commit,这里假设commit id是32e0a87f
git rebase -i 32e0a87f

# 在git bash中运行上面的命令后,会弹出编辑框,在编辑框中会分行依次显示以pick开头的这个commit之后的所有commit message。
# 将需要修改的commit message之前的"pick"改为"reword",保存后,这时会执行rebase操作。

# 接着会再次弹出编辑框,这次编辑框中只有之前改为"reword"的那个commit message,此时修改commit message的内容,保存后,rebase修改提交信息就成功了。

# 查看提交信息是否修改成功
git log

# 提交远程
git push --force

交互式rebase的其他操作有:

1
2
3
4
5
6
7
8
9
10
11
reword:修改提交说明

edit:修改提交内容(amend)

squash:将该提交合并到前一个提交

fixup: 将该提交合并到前一个提交,不保留提交的日志消息

exec: 在想要 rebase 的每一个提交上执行命令

drop: 删除提交

git worktree

团队的一个痛点:在maint版本和feature版本交集阶段,在feature版本分支开发新特性过程中,当有maint版本的Bug时,需要切换到maint版本分支修复Bug——由于2个版本分支的工程依赖环境差异较大,导致每次切换分支后,工程都都需要重新安装依赖以及做全量编译——这无疑增加了编译时间,导致开发效率下降。

针对这个痛点,目前发现 git worktree 这个方案有助解决。

在这里插入图片描述

git worktree方案可以概括为:通过创建共享版本仓库的多个工作区,实现多分支并行开发,从而实现多个工程环境的缓存,达到提升开发效率的目的。具体地:

  • 可为一个分支创建一个工作区

  • 每个工作区的工程环境独立运行

  • 每个工作区共享同一个版本仓库信息

相比通过git clone方式创建多个独立工程环境的工作区,git worktree的优点在于:

  • 更节省硬盘空间
    git clone方式下,每个工作区都有一个版本仓库
    git worktree方式下,每个工作区共享同一个版本仓库,节省了n-1/n(n为工作区数量)的硬盘空间
  • 各个工作区之间的更新同步更快
    git clone方式下,A工作区和B工作区同步更新的路径:A工作区commit - A工作区push - B工作区pull
    git worktree方式下,A工作区只要本地提交更新后,其他工作区就能立即收到(因为它们共享同一个版本仓库)

git worktree的使用示例如下:

  1. 为maint_branch分支创建一个工作区maint_branch_worktree
1
2
3
4
5
# maint_proj 工程目录
cd path/to/maint_proj

# 创建工作区
git worktree add ../maint_worktree maint_branch

如果需要拉取一个不存在的分支,可加-b参数,在拉取worktree的同时创建新分支

1
git worktree add ../new-dir -b a-not-existing-branch
  1. 进入工作区maint_worktree上完成修复Bug工作
1
2
3
4
# ios 工程目录
cd path/to/maint_worktree

# fix your bug
  1. 在工作区maint_worktree上完成修复Bug工作后,清理工作区maint_worktree
1
2
3
4
5
6
7
8
# maint_proj 工程目录
cd path/to/maint_proj

# 删除 maint_worktree 文件夹
rm -rf ../maint_worktree

# 清理工作区信息
git worktree prune

worktree指令汇总:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 添加worktree 
git worktree add [-f] [--checkout -b <new-branch>] <path> <commit-ish>

# 列出所有worktree
git worktree list [--porcelain]

# worktree上锁
git worktree lock [--reason <string> <worktree>]

# worktree解锁
git worktree unlock <worktree>

# 移动worktree到其他目录
git worktree move <worktree> <new-path>

# 清除那些检出目录已经被删除的worktree
git worktree prune -n --expire <expire>

# 删除worktree, 同时删除检出目录
git worktree remove -f <worktree>

补充:在工程项目中,存在不关联版本库的依赖文件,这些文件也会占据不小的空间。因此可以使用软链接的方式,将相同的依赖文件“拷贝”到工作目录

1
2
# 下面以windows下链接node_modules为例,将master分支的工作目录下的依赖库链接到5DCV2这个工作目录(管理员权限执行)
mklink /d "E:\project\mysite\5DCV2\node_modules" "E:\project\mysite\master\node_modules"

生成配置多个ssh key

和正常生成ssh key步骤基本一致,下面只说明需要做的不同操作

  1. 在 C:\Users\ion\.ssh 目录打开 git Bash

  2. 输入命令生成ssh key(注意文件命名为id_rsa_gitlab)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ion@ionluo MINGW64 ~/.ssh
    $ ssh-keygen -t rsa -C "xxx@xxx.cn"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/c/Users/ion/.ssh/id_rsa): id_rsa_gitlab
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in id_rsa_gitlab.
    Your public key has been saved in id_rsa_gitlab.pub.
    The key fingerprint is:
    SHA256:vj5yEob7adQDENEltqHSfY3qO4GQLkws4qthzPR/j0Y xxx@xxx.cn
    The key's randomart image is:
    +---[RSA 2048]----+
    | o+=o+. |
    | o +o+o. |
    |.. . +. |
    |=o . . |
    |Bo o . oS |
    |=+o + +Eo |
    |o+.. *.... |
    |.o = +++. |
    |o ==*+o |
    +----[SHA256]-----+
  3. 添加私钥

    1
    2
    # 由于ssh-agent默认只识别id_rsa,因此还需要添加秘钥id_rsa_gitlab,如下:
    ssh-add ~/.ssh/id_rsa_gitlab

    报错:unable to start ssh-agent service, error :1058

    使用管理员权限运行 Power Shell,然后执行Set-Service -Name ssh-agent -StartupType automatic

    *这里是把 ssh-agent 的启动类型设置为自动方式

  4. 配置 config 文件

    在.ssh文件夹中手动创建config文件或者输入命令touch config生成,并按下面的模板填写,该文件用于配置私钥对应的服务器。

    1
    2
    3
    4
    5
    # gitlab
    Host gitlab.xxx.com  
    HostName gitlab.xxx.com   
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_gitlab

    配置说明:

    Host:自定义别名,会影响git相关命令
    HostName:真实的服务器地址(域名)
    User:之前配置的用户名可以省略(xxx@xxx.com)
    PreferredAuthentications:权限认证(publickey,password publickey,keyboard-interactive)一般直接设为publickey
    IdentityFile:rsa文件地址

  5. 添加生成的id_rsa_gitlab.pub到远程git仓库后,通过下面命令验证是否成功

    1
    ssh -T git@gitlab.xxx.com
  6. 设置仓库的账号邮箱和用户名(默认用的是全局的)

    1
    2
    3
    4
    5
    6
    7
    # 全局设置
    # git config --global user.email “xxxx@xx.com”
    # git config --global user.name “xxxx”

    # 单独设置每个repo 用户名/邮箱
    git config user.email “xxxx@xx.com”
    git config user.name “xxxx”

    设置好后就可以git commit 验证下提交的代码用户是否正常,git push确认是否可以提交远程

差异比较

显示 branchA 中存在,branchB 中不存在的提交

1
git log --oneline branchA ^branchB

显示 branchA 和 branchB 差异的文件名

1
git diff --name-only branchA branchB

显示 branchA 和 branchB 差异的哈希

1
git rev-list branchA ^branchB

显示 commitA 和 commitB 的差异

1
git diff commitA commitB

参考:https://www.leevii.com/2023/05/compare-commit-diffs-in-git.html

https://www.techiedelight.com/zh/find-differences-between-two-commits-git/

https://www.jianshu.com/p/bb97fabb475e

不同仓库间的cherry-pick

有的时候项目过于复杂会需要将仓库拆成2个仓库进行维护,如客户仓库和产品仓库。当产品仓库迭代的时候,客户仓库也需要可以拉取产品仓库的提交。

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
step 1:
git remote -v // 查看本地仓库关联的远程仓库

step 2:
/*
添加远程仓库到本地
仓库地址就是 github 上的 SSH地址,即 git clone 使用的地址
main 表示本地为新添加的远程仓库起的别名,方便后续操作
*/
git remote add main 仓库地址

step 3:
/*
拉取该远程仓库的指定分支
main 就是上一步操作所取的名字
分支名1 表示本地仓库的分支名,
分支名2 表示参考的分支,即:被cherry-pick的分支
注:分支名1 和 分支名2 最好保持一致(如果一致的话可以省略分支名2)
*/
git fetch main 分支名1 : 分支名2

step 4:
git cherry-pick 提交id // 开始cherry-pick, 提交id 即:参考分支的commit id

step 5:
git push // 推送到当前开发分支的远程仓库

https://blog.csdn.net/Hr_ving/article/details/127755359

git alias

通过命令设置 alias

1
2
3
4
git config --global alias.a add
git config --global alias.c commit
git config --global alias.o checkout
# git a、git c、git o

通过 git 配置文件设置 alias

1
2
3
4
5
# Linux下是 ~/.gitconfig 文件,Window下是
[alias]
a = add
c = commit
o = checkout

之前的都是我们自己配置的一些 git alias,当然有别人给我们配好了的可以从 gitalias 获取。

通过 node 配置 alias

1
npm i -g git-alias

参考文献:https://zhuanlan.zhihu.com/p/52806571

报错处理

  1. fatal: Authentication failed for 'https://xxx.git/

    报错原因:使用https验证的git仓库,同步代码需要输入账号密码,而window系统输入一次账密后是保存在window凭据中的,下次执行拉取代码会自行使用Window中的凭据

    解决方法:删除git的window凭据,重新拉取输入正确的账号密码

    img

    img

  1. fatal: Out of memory, malloc failed (tried to allocate 2000000000 bytes)

img

​ 原因:因用了其他博客的解决方案使用了下面命令导致,修改成正常大小即可。

​ 解决:git config --global http.postBuffer 125000

  1. error: object file .git/objects/xx/xxxxx is empty

img

  • 备份.git目录
1
cp -a .git .git-old
  • 根据修复提示删除空对象文件。根据最早的空文件提示也删除那个文件。
1
2
git fsck --full
rm .git/objects/19/b45524e14258043923c2bc4d336269f1abc67f
  • 删除后再次查看修复提示,说明Head commit无效。
1
2
3
4
git fsck --full
// 段错误 (核心已转储)% (3/256)
git reflog
// fatal: bad object HEAD
  • 找到当前分支Head的前两条数据。
1
2
3
4
tail -n 2 .git/logs/refs/heads/master
//注意,如果不是master分支,则.git/logs/refs/heads/branchName

// a6f48ebd79ef39b2c43e5810fc96e95cc0867389 ed41eac57be18e8d112ca5bb898dd77c3b120321
  • 第一条Head是无效的。我们需要确认第二条是我们的上次失败的commit的前一个提交。
1
2
git show ed41eac57be18e8d112ca5bb898dd77c3b120321 
//输出信息为日志详细信息。
  • 设置确认的commit为HEAD commit
1
git update-ref HEAD ed41eac57be18e8d112ca5bb898dd77c3b120321 
  • 再次使用 git status 和 git reflog 看看功能是否正常了。如果还不行。重启下电脑。

参考:https://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E7%BB%B4%E6%8A%A4%E5%8F%8A%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D

https://stackoverflow.com/questions/11706215/how-to-fix-git-error-object-file-is-empty

4. There are too many unreachable loose objects; run 'git prune' to remove them.

此处是git仓库太大导致的报错,关于git的清理(gc),目前了解不多,可以参考下面方式处理,代深入了解后再整理归纳说明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(web) ion@ubuntu:~/projects/web/app/static$ git pull
Warning: the RSA host key for 'gitlab.xxx.net' differs from the key for the IP address '172.xx.xx.xx'
Offending key for IP in /home/ion/.ssh/known_hosts:2
Matching host key in /home/ion/.ssh/known_hosts:4
Are you sure you want to continue connecting (yes/no)? yes
自动在后台执行仓库打包以求最佳性能。
手工维护参见 "git help gc"。
error: 最后一次 gc 操作报告如下信息。请检查原因并删除 .git/gc.log。
在该文件被删除之前,自动清理将不会执行。

warning: There are too many unreachable loose objects; run 'git prune' to remove them.

Already up-to-date.
(web) ion@ubuntu:~/projects/web/app/static$ git count-objects
193628 objects, 850024 kilobytes
(web) ion@ubuntu:~/projects/web/app/static$ git gc --prune=now
对象计数中: 244216, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (97590/97590), 完成.
写入对象中: 100% (244216/244216), 完成.
Total 244216 (delta 160722), reused 219325 (delta 142055)
正在删除重复对象: 100% (256/256), 完成.
(web) ion@ubuntu:~/projects/web/app/static$ git count-objects
0 objects, 0 kilobytes
  1. fatal: unable to access ‘https://github.com/getsentry/onpremise.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.

    原因查找:我这里发现是这个仓库的链接国内无法访问,因此要设置git代理来访问(需要搭梯子)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #设置socks5代理或者http代理(任选一种)
    git config --global http.proxy 'socks5://172.20.0.62:8388'
    git config --global https.proxy 'socks5://172.20.0.62:8388'
    git config --global http.proxy 'http://127.0.0.1:45077'
    git config --global https.proxy 'http://127.0.0.1:45077'

    # 这时候就可以克隆了

    # 如果之后要删除代理,使用如下命令
    git config --global --unset http.proxy
    git config --global --unset https.proxy
本文作者: ionluo
本文链接: http://www.ionluo.cn/blog/posts/6b82922c.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
知识共享许可协议
置顶
  • Git

扫一扫,分享到微信

微信分享二维码
2. 使用
3. 开始开发1-模板消息接口
© 2025 ionluo
  • 所有文章
  • 大纲

tag:

  • WEB开发
  • Web后端
  • Django
  • python
  • django
  • web开发
  • 七牛云
  • Docker
  • IDE
  • 前端
  • VSCode
  • Jenkins
  • 运维
  • Linux
  • VirtualBox
  • Centos7
  • NodeJs
  • 转载
  • React
  • Redis
  • Rendertron
  • Web前端
  • SEO
  • Sass
  • Sentry
  • Typora
  • hexo
  • VR
  • docker
  • eslint
  • Git
  • 数据库
  • mysql
  • Nginx
  • nodejs
  • nvm
  • express
  • vue
  • typescript
  • Web安全
  • 工作遇到的问题
  • 随笔
  • 前端 js canvas
  • 业务
  • 面试题
  • 代码规范
  • Css预处理
  • Less
  • svg
  • 前端ssvg
  • 从入门到放弃系列
  • Web代理工具
  • Angular
  • 实战章无法显示问题
  • 兼容问题
  • jquery
  • canvas
  • Grunt
  • angularjs
  • lodash
  • 黑科技
  • JQuery
  • 基础
  • 笔试面试
  • 前端基础
  • 区块链
  • 大前端
  • Centos
  • 设计模式
  • NAS
  • 好文收藏
  • java
  • 微信
  • 公众号
  • 小程序
  • 树莓派
  • 生活
  • 日记
  • 程序人生
  • Windows
  • 通过典型应用快速上手Linux
  • 软考
  • 系统分析师
  • NextJS
  • 系统架构师

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 【系统架构师】18. 案例特训-其它篇

    2025-04-26

    #软考#系统架构师

  • 【系统架构师】9. 软件工程

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】8. 企业信息化战略与实施

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】7. 知识产权与标准化

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】5. 数学与经济管理

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】6. 系统配置与性能评价

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】4. 计算机网络

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】3. 数据库

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】2. 操作系统

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】17. 项目管理

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】19. 论文写作

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】16. 系统可靠性分析与设计

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】15. 安全架构设计理论与实践

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】15. 信息安全技术基础知识

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】14. 案例特训-架构设计篇

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】13. 案例特训-数据库设计篇

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】12. 软件架构设计

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】11. 案例特训专题【软件工程篇】

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】10. 案例特训专题【技巧篇】

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】1. 计算机组成与体系结构

    2025-04-25

    #软考#系统架构师

  • 【系统架构师】0. 备考记录

    2025-04-25

    #软考#系统架构师

  • 【好文收藏】pyenv的安装与简单使用

    2025-04-25

    #转载#程序人生

  • vue2使用记录

    2025-04-25

    #WEB开发#Web前端#从入门到放弃系列

  • 【前端】echart使用记录

    2025-04-10

  • 【前端】React使用记录

    2025-03-08

    #前端#React

  • 【前端】NextJS部署到特定的URL路径

    2025-02-28

    #前端#NextJS

  • 【前端】Element自定义主题

    2024-11-11

  • 【python】我的脚本

    2024-11-01

  • 【生活】AI代码助手

    2024-09-20

  • 【前端】SVG使用

    2024-07-03

    #svg#前端ssvg

  • 【IDE】VSCODE编辑器配置

    2024-06-26

    #IDE#前端

  • 【生活】网站收藏

    2024-06-13

    #生活

  • GZHT前端工程师

    2024-06-13

    #Web前端#笔试面试

  • 【笔试面试】算法与数据结构

    2024-06-13

    #Web前端#笔试面试

  • 【系统分析师】0. 备考记录

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】1. 备考策略

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】10. 月考讲解

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】13. 系统配置与性能评估

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】11. 论文写作

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】12. 计算机组成与体系结构

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】14. 操作系统

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】14. 数据库系统

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】15. 计算机网络

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】17. 多媒体基础知识

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】18. 系统安全分析与设计

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】19. 知识产权标准化

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】2. 企业信息化战略与实施

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】20. 数学与经济管理

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】21. 案例分析

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】22. 论文

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】3. 系统规划

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】4. 软件工程

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】5. 需求工程

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】6. 系统设计

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】7. 系统测试与维护

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】8. 项目管理

    2024-06-13

    #软考#系统分析师

  • 【系统分析师】9. 案例特训

    2024-06-13

    #软考#系统分析师

  • vue3使用记录

    2024-06-13

    #WEB开发#Web前端#从入门到放弃系列

  • 【IDE】VSCODE使用经验总结

    2024-06-13

    #IDE

  • 【前端基础】CSS相关

    2024-05-11

    #笔试面试#前端基础

  • 【前端基础】HTML相关

    2024-05-11

    #笔试面试#前端基础

  • 【生活】生活小技巧

    2024-05-11

    #生活

  • 【前端】数据可视化

    2024-05-11

    #前端

  • 【前端】锁定项目npm依赖版本

    2024-04-23

  • 【好文收藏】秒懂 Web Component

    2024-03-04

    #好文收藏

  • 【前端】uniapp实战演练

    2024-01-24

  • 【前端】编辑器相关思考

    2023-12-15

    #前端

  • 【生活】国内手机安装GoolePlayStore(谷歌商店)

    2023-12-15

    #转载#生活

  • 【前端】合并2个表格数据

    2023-10-20

    #前端#jquery

  • 【前端】使用JavaScript控制CSS中的颜色

    2023-09-15

    #前端

  • 【nodejs】nvm使用记录

    2023-08-18

    #nodejs#nvm

  • 【Linux】VirtualBox上安装和使用Centos7记录.md

    2023-08-11

    #Linux#VirtualBox#Centos7

  • 【小程序】微信小程序基础

    2023-07-10

    #小程序

  • 【好文收藏】浏览器缓存机制

    2023-06-07

    #前端#转载

  • 【前端】webpack使用记录

    2023-04-28

    #前端

  • 【前端】我的lodash使用记录

    2023-02-06

    #前端#lodash

  • 【前端】兼容问题汇总

    2022-12-30

    #前端#兼容问题

  • 【好文收藏】Centos7磁盘满了排查思路以及解决办法

    2022-11-23

    #转载

  • 【好文收藏】正则表达式

    2022-11-19

    #转载

  • 【eslint】eslint的使用

    2022-11-07

    #前端#eslint

  • 【好文收藏】运用transform导致文本模糊的现象探究

    2022-11-02

    #前端#转载

  • 【前端】ionic使用记录

    2022-08-02

  • 【业务】JIRA使用小结

    2022-07-15

  • 【前端】前端PDF预览(pdfjs)

    2022-06-09

    #前端#实战章无法显示问题

  • 【IDE】IDEA使用经验总结

    2022-06-06

    #IDE

  • 的JQuery

    2022-05-24

    #前端#JQuery

  • 【好文收藏】Centos7开放及查看端口

    2022-05-23

    #Linux#转载#Centos

  • 【好文收藏】正确处理下载文件时HTTP头的编码问题(Content-Disposition)

    2022-05-20

    #转载

  • 【前端】我的angularjs使用记录

    2022-03-30

    #前端#angularjs

  • 【实战】Java全栈

    2022-03-25

    #java

  • 【转载】MongoDB安装及设置服务启动

    2022-03-02

    #转载

  • 【Docker】win10家庭版安装docker

    2022-03-02

    #Docker

  • 【转载】HTTP Referrer和Referrer Policy设置.md

    2022-02-28

    #转载

  • 【运维】Oracle VM VirtualBox安装黑苹果(MacOS10.11)

    2022-02-22

    #运维

  • 【前端】浏览器返回时关闭模态框

    2022-02-15

    #前端

  • 【Linux】Centos安装Python3

    2022-02-10

    #Linux

  • 【前端】将已有图标上传阿里图标库iconfont

    2021-12-15

    #前端

  • 【Linux】监控用户操作行为

    2021-12-10

    #Linux#转载

  • 【前端】PC端调试

    2021-12-08

    #前端

  • 【前端】自定义事件

    2021-11-28

    #前端#转载

  • 【前端】页面增加水印

    2021-11-22

    #前端

  • 【前端】搭建前端监控系统

    2021-11-20

    #前端#转载

  • 【前端】移动端调试

    2021-11-18

    #前端#转载

  • 【前端】js与native交互之JsBridge

    2021-11-02

    #前端#转载

  • 【前端】H5在全屏Webview中双端适配刘海屏

    2021-11-01

    #前端#转载

  • 【Linux】linux上传下载文件命令rz、sz

    2021-11-01

    #Linux

  • 【生活】社保

    2021-10-13

    #生活

  • 【Django】Python Django Web典型模块开发实战

    2021-10-04

    #Django

  • 【linux】SSH多种远程登录方法

    2021-09-23

  • 【前端】前端大文件上传

    2021-09-18

    #前端

  • 【前端】前端本地存储

    2021-09-18

    #前端

  • 【好文收藏】Docker部署jira,confluence,elk,gitlab,jenkins,mysql等

    2021-09-01

    #转载

  • 【笔试面试】YF前端工程师

    2021-08-19

    #笔试面试

  • 【笔试面试】笔试题汇总

    2021-08-19

    #笔试面试

  • 【docker】docker笔记

    2021-08-09

    #docker

  • 【好文收藏】Three.js实现H5全景

    2021-08-05

    #前端#转载

  • 【好文收藏】blob流和base64,以及file和base64的相互转换

    2021-07-29

    #前端#转载

  • 【VR】VR学习记录

    2021-07-23

    #VR

  • 【生活】骑行路线规划

    2021-07-21

    #生活

  • 【前端】IndexedDB从入门到精通

    2021-07-20

    #前端

  • 【nodejs】Nodejs计算CPU、磁盘和内存的利用率

    2021-07-19

    #nodejs

  • 【nodejs】nodejs小技巧

    2021-07-19

    #nodejs

  • 【nodejs】使用swagger生成api文档

    2021-07-15

    #nodejs#express

  • 【好文收藏】时间标准基础知识

    2021-07-15

    #转载

  • 【nodejs】Joi参数校验包使用

    2021-07-15

    #nodejs

  • 【前端】Vue3.0+TS仿知乎企业级项目

    2021-07-12

    #前端

  • 【大前端】4. 团队协作

    2021-07-10

    #WEB开发#Web前端#大前端

  • 前端框架及项目面试(聚焦Vue-React-Webpack)

    2021-07-01

    #笔试面试

  • 【前端】CSS小技巧

    2021-06-25

    #前端

  • 【前端】JS小技巧

    2021-06-25

    #前端

  • 【前端】canvas使用

    2021-06-18

    #canvas

  • 【eslint】eslint的安装和配置(webstorm)

    2021-06-16

    #eslint

  • 【python】python学习笔记

    2021-06-15

    #python

  • 【生活】怀旧游戏记录.md

    2021-06-15

    #生活

  • 【ts】TypeScript学习

    2021-06-14

    #前端#typescript

  • 【前端】带链接的弹窗拖拽功能实现

    2021-06-09

    #前端

  • 【Linux】Linux环境变量

    2021-05-31

    #Linux

  • 【python】python办公自动化之PDF操作

    2021-05-26

    #python

  • 【python】python办公自动化之Word操作

    2021-05-26

    #python

  • 【前端】实现CSDN等博客文章复制时带上自定义字符串的功能

    2021-05-24

    #前端

  • 【前端】手机端预览pdf

    2021-05-23

    #前端#业务

  • 【Sass】基础

    2021-05-23

    #前端#Sass

  • 【python】requests请求接口

    2021-05-14

    #python

  • 【笔试面试】华为OD招聘复试摘录

    2021-05-13

    #Web前端#笔试面试

  • Ubuntu安装python2.7对应的pip2

    2021-05-10

    #Linux

  • Linux安装mysql

    2021-05-10

    #Linux

  • 【笔试面试】华为OD招聘机考题

    2021-05-06

    #Web前端#笔试面试

  • 【Django】站内搜索引擎

    2021-05-06

    #django

  • 【大前端】3. vue框架运用

    2021-05-03

    #WEB开发#Web前端#大前端

  • 如何判断邮箱是真正存在的?

    2021-04-28

    #业务

  • vue3.0前的TypeScript最佳入门实践

    2021-04-22

    #vue#typescript

  • 【笔试面试】前端工程师面试宝典

    2021-04-20

    #笔试面试

  • 【python】django学习

    2021-04-15

    #python#django

  • 【Linux】Ubuntu系统默认字体设置

    2021-04-14

    #Linux

  • 【前端】如何中断Promise的链式调用

    2021-04-12

    #前端

  • ZGLT前端工程师

    2021-04-10

    #Web前端#笔试面试

  • 某公司前端工程师笔试题

    2021-04-10

    #Web前端#笔试面试

  • 【Linux】Ubuntu安装WPS

    2021-04-09

    #运维#Linux

  • 【cron】服务器定时任务

    2021-04-08

    #运维#Linux

  • django转发请求

    2021-04-07

    #django#web开发

  • 前端截图

    2021-04-06

    #前端 js canvas

  • 我觉得好看的视频记录

    2021-04-04

    #生活

  • 我的hexo博客搭建记录

    2021-04-02

    #hexo

  • html,word,pdf的转化

    2021-04-02

    #工作遇到的问题

  • 1. 导学

    2021-04-01

    #通过典型应用快速上手Linux

  • nginx课程笔记

    2021-04-01

    #Nginx

  • 年度大事记【2020】

    2021-04-01

    #日记

  • django中文件下载

    2021-04-01

    #WEB开发#Web后端#Django

  • linux添加环境变量的4种方法

    2021-04-01

    #运维#Linux

  • 【Linux】Ubuntu安装和使用supervisor

    2021-03-31

    #运维#Linux

  • 【Linux】升级node和npm

    2021-03-31

    #WEB开发#Web后端#NodeJs

  • pm2使用记录

    2021-03-31

    #WEB开发#Web后端#NodeJs

  • npm使用记录

    2021-03-31

    #WEB开发#Web后端#NodeJs

  • 通过expect自动化地执行命令行交互任务

    2021-03-31

    #运维#Linux

  • Linux 查看文件权限命令ls -l 输出信息每列所代表的含义

    2021-03-31

    #运维#Linux

  • Ubuntu使用mail命令发送邮件

    2021-03-31

    #运维#Linux

  • Ubuntu设置国内源和apt使用介绍

    2021-03-31

    #运维#Linux

  • 如何在关闭ssh连接的情况下,让程序继续运行

    2021-03-31

    #运维#Linux

  • 【好文收藏】网络知识扫盲,一文搞懂 DNS

    2021-03-31

    #运维#Linux#转载

  • wxhtmltopdf

    2021-03-30

    #WEB开发#Web后端#Django

  • Jenkins

    2021-03-30

    #Jenkins

  • 我的hexo问题记录

    2021-03-29

    #hexo

  • 搭建记录

    2021-03-29

    #Rendertron

  • 基本用法

    2021-03-29

    #IDE#Typora

  • 【好文收藏】NAS最强攻略

    2021-03-29

    #转载#NAS

  • Nginx使用记录

    2021-03-29

    #Nginx

  • 中间件

    2021-03-29

    #WEB开发#Web后端#Django

  • 模型冲突问题解决

    2021-03-29

    #WEB开发#Web后端#Django

  • Django项目使用七牛云存储静态资源

    2021-03-29

    #WEB开发#Web后端#Django

  • django随笔记录

    2021-03-29

    #WEB开发#Web后端#Django

  • Nodejs中进行DOM操作

    2021-03-29

    #WEB开发#Web后端#NodeJs

  • express学习

    2021-03-29

    #WEB开发#Web后端#NodeJs

  • 页面事件

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • 剪贴板数据

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • 表单事件

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • UI事件

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • 鼠标定位

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • 鼠标移动

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • 鼠标来源

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • 鼠标点击事件

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • 键盘事件

    2021-03-29

    #WEB开发#Web前端#从入门到放弃系列

  • 2.0 电商项目

    2021-03-29

    #WEB开发#Web前端#vue

  • 1.0 vuex

    2021-03-29

    #WEB开发#Web前端#vue

  • 前端SSR

    2021-03-29

    #WEB开发#Web前端#SEO

  • SEO重定向标签canonical

    2021-03-29

    #WEB开发#Web前端#SEO

  • 【好文收藏】google search console

    2021-03-29

    #转载#SEO

  • 【前端】Windows的Fiddler

    2021-03-29

    #WEB开发#Web前端#Web代理工具

  • JSHint

    2021-03-29

    #WEB开发#Web前端#代码规范

  • 页面布局css

    2021-03-29

    #WEB开发#Web前端#随笔

  • js导入Excel数据

    2021-03-29

    #WEB开发#Web前端#随笔

  • 浏览器指纹

    2021-03-28

    #WEB开发#Web安全

  • 【好文收藏】关于XSS攻击和CSRF攻击

    2021-03-28

    #WEB开发#转载#Web安全

  • 参数化构建

    2021-03-28

    #Jenkins

  • 【转载】 解决jenkins点击立即构建没有反应

    2021-03-28

    #Jenkins

  • 我的事件指令

    2021-03-27

    #WEB开发#Web前端

  • 【大前端】1. 开发环境搭建

    2021-03-27

    #WEB开发#Web前端#大前端

  • 【大前端】2. 前端工程化

    2021-03-27

    #WEB开发#Web前端#大前端

  • 0. 软件设计师考试相关资源

    2021-03-18

    #软考

  • 报名备考记录

    2021-03-18

    #软考

  • 17. 面向对象程序设计案例

    2021-03-18

    #软考

  • 16. 数据结构与算法应用

    2021-03-18

    #软考

  • 15. UML建模

    2021-03-18

    #软考

  • 14. 数据库设计

    2021-03-18

    #软考

  • 13. 数据流图

    2021-03-18

    #软考

  • 12. 面向对象编程

    2021-03-18

    #软考

  • 11. 软件工程

    2021-03-18

    #软考

  • 10. 多媒体基础

    2021-03-18

    #软考

  • 9. 法律法规知识

    2021-03-18

    #软考

  • 8. 程序设计语言

    2021-03-18

    #软考

  • 7. 数据结构与算法

    2021-03-18

    #软考

  • 6. 信息安全

    2021-03-18

    #软考

  • 5. 网络技术

    2021-03-18

    #软考

  • 4. 数据库系统

    2021-03-18

    #软考

  • 3. 操作系统

    2021-03-18

    #软考

  • 2. 计算机组成与体系结构

    2021-03-18

    #软考

  • 1. 软件设计师考试介绍

    2021-03-18

    #软考

  • json字符串遍历

    2021-03-18

    #WEB开发#Web前端#Angular

  • 我的带过期时间的localStorage

    2021-03-18

    #WEB开发#Web前端#Angular

  • 问题记录

    2021-03-17

    #Git

  • 2. 使用

    2021-03-17

    #WEB开发#Sentry

  • 2. 使用

    2021-03-17

    #WEB开发#Sentry

  • git使用汇总

    2021-03-17

    #Git

  • 3. 开始开发1-模板消息接口

    2021-03-16

    #微信#公众号

  • 2. 搭建django后台

    2021-03-16

    #微信#公众号

  • 1. 准备工作

    2021-03-16

    #微信#公众号

  • 5. Linux常用命令

    2021-03-16

    #通过典型应用快速上手Linux

  • 【好文收藏】硬核Redis总结,看这篇就够了!

    2021-03-16

    #转载#Redis

  • 完整卸载vscode

    2021-03-16

    #IDE#VSCode

  • gitlab部署秘钥并添加到项目中,设置免密验证

    2021-03-16

    #Git

  • 【黑科技】禁止复制文字的网页中复制文字

    2021-03-16

    #黑科技

  • 【业务】手写图片瀑布流

    2021-03-14

    #WEB开发#Web前端#面试题

  • linux curl wget ab测速

    2021-03-12

    #运维#Linux

  • 资源批量上传和多文件上传

    2021-03-12

    #七牛云

  • ubuntu问题记录

    2021-03-12

    #运维#Linux

  • 提升网站安全 - 漏洞扫描工具推荐

    2021-03-12

    #WEB开发#Web安全

  • 【好文收藏】如何利用FreeNAS自行搭建可以被远程访问的NAS?

    2021-03-12

    #转载#NAS

  • 【好文收藏】急死!CPU被挖矿了,却找不到哪个进程!

    2021-03-12

    #运维#Linux#转载

  • 【好文收藏】纯IPV6服务器安装宝塔面板 – 搭建网站实现IPV4访问ipv6,ipv4皆可访问

    2021-03-12

    #转载

  • 关于基础面

    2021-03-09

    #Web前端#笔试面试

  • 【实战】开启全站加速后网站抓取502,504

    2021-03-08

    #工作遇到的问题

  • 【运维】VMware Workstation使用笔记

    2021-03-08

    #运维#Windows

  • 【好文收藏】加密解密

    2021-03-06

    #WEB开发#转载

  • YMKJ前端工程师

    2021-03-06

    #Web前端#笔试面试

  • ubuntu安装报错问题汇总

    2021-03-06

    #运维#Linux

  • Redis 密码查看,设置,取消

    2021-03-06

    #Redis

  • 【Redis】redis笔记

    2021-03-06

    #Redis

  • 使用七牛云存储作为Typora的图床

    2021-03-06

    #七牛云

  • gitlab的API操作

    2021-03-06

    #Git

  • Mysql使用过程遇到的问题记录

    2021-03-06

    #数据库#mysql

  • JavaScript中的注释

    2021-03-06

    #WEB开发#Web前端#代码规范

  • 【区块链】挖矿教程

    2021-03-06

    #区块链

  • 【好文收藏】前端需要知道的9种设计模式

    2021-03-06

    #WEB开发#转载#Web前端#设计模式

  • 【前端开发】设计模式精讲

    2021-03-06

    #前端#设计模式

  • ubuntu刷新DNS

    2021-02-23

    #运维#Linux

  • PDF操作

    2021-02-23

    #python

  • 你用对 hasattr 了嘛?

    2021-02-23

    #WEB开发#Web后端#python

  • 1. 入门

    2021-02-16

    #树莓派

  • ubuntu用户管理

    2021-02-16

    #运维#Linux

  • Ubuntu监控内存利用率并邮件告警

    2021-02-12

    #运维#Linux

  • scp断点续传

    2021-02-12

    #运维#Linux

  • shell脚本学习

    2021-02-12

    #运维#Linux

  • 我的Grunt配置

    2021-02-12

    #WEB开发#Web前端#Grunt

  • 我的邮件验证指令

    2021-02-12

    #WEB开发#Web前端#Angular

  • 谷歌浏览器(chrome)允许跨域设置的方法

    2021-02-12

    #黑科技

  • 配置babel和less支持

    2021-02-12

    #WEB开发#Web前端#Grunt

  • 有志者,事竟成

    2021-02-12

    #日记

  • 自检

    2021-02-12

    #Web前端#笔试面试

  • 远程构建

    2021-02-12

    #Jenkins

  • vue服务器渲染的实现

    2021-01-19

    #WEB开发#Web前端#SEO

  • JSHint遇到的一些问题

    2021-01-19

    #WEB开发#Web前端#代码规范

  • Less循环生成盒子的padding和margin类名

    2021-01-19

    #WEB开发#Web前端#Css预处理#Less

  • Less的积累

    2021-01-19

    #WEB开发#Web前端#Css预处理#Less

  • Less的内置函数

    2021-01-19

    #WEB开发#Web前端#Css预处理#Less

  • js任意进制转换

    2021-01-19

    #WEB开发#Web前端#随笔

  • 【前端】前端性能分析与优化

    2021-01-19

    #WEB开发#Web前端

  • 图片懒加载

    2021-01-19

    #WEB开发#Web前端#随笔

  • 文件内容读取(字符串)

    2021-01-19

    #WEB开发#Web前端#随笔

  • 点击放大图片和图片悬浮遮罩提示

    2021-01-19

    #WEB开发#Web前端#随笔

  • 表单提交

    2021-01-19

    #WEB开发#Web前端#随笔

  • 锚点

    2021-01-19

    #WEB开发#Web前端#基础

  • 【好文收藏】多端工具NProxy

    2021-01-19

    #转载#Web代理工具

  • 静态文件服务器

    2021-01-19

    #WEB开发#Web后端#Django

  • Nodejs实战

    2021-01-19

    #WEB开发#Web后端#NodeJs

  • pip安装国内源

    2021-01-19

    #python

  • Ubuntu 矫正系统时间

    2021-01-08

    #运维#Linux

  • 运行可执行文件

    2021-01-08

    #运维#Linux

  • 【好文收藏】Traceroute(路由追踪)的原理及实现

    2021-01-08

    #运维#Linux#转载

  • 【好文收藏】国内外DNS服务器地址列表

    2021-01-08

    #运维#Linux#转载

  • 【web安全】Web前端黑客技术揭秘(学习笔记)

    2021-01-07

    #WEB开发#Web安全

  • SSL指纹

    2021-01-06

    #WEB开发#Web安全

  • 打开开发服务器

    2021-01-04

    #IDE#VSCode

  • 2. 介绍

    2020-12-15

    #通过典型应用快速上手Linux

  • 3. 虚拟机

    2020-12-15

    #通过典型应用快速上手Linux

  • 4. SSH

    2020-12-15

    #通过典型应用快速上手Linux

  • 18. 错题集

    2020-12-15

    #软考

  • Mysql语句

    2020-12-15

    #数据库#mysql

  • 【React】React入门

    2019-06-12

    #React