Git基本操作三

标签: Git 分类: 软件 创建时间:2020-01-23 14:05:01 更新时间:2025-01-17 10:39:22

继续写笔记,git相关操作。
# 1.设置代理

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
## 设置使用http代理
git config --global http.proxy 'http://127.0.0.1:1080'
git config --global https.proxy 'https://127.0.0.1:1080'

## 设置使用socks5代理
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

## 取消
git config --global --unset https.proxy
git config --global --unset http.proxy

## 设置ssh代理,修改 ~/.ssh/config 文件

## 这样设置会出现 /usr/bin/bash: line 0: exec: nc: not found
## kex_exchange_identification: Connection closed by remote host
## Connection closed by UNKNOWN port 65535


## MacOS 系统
# Host github.com
# User git
# ProxyCommand nc -v -x 127.0.0.1:1086 %h %p

## Windows系统
Host gitlab.com
User git
ProxyCommand connect -S 127.0.0.1:10808 %h %p
参考文章:
1.git 设置和取消代理 (这是一个讨论,包括了上面的内容)
2.git ssh 代理设置 (这里有如何设置ssh代理)
3.Git设置代理 (这个的ssh设置代理的方法最终解决了相应的问题,还有设置和取消http及https代理)

2.CentOS升级git

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
## 安装依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum install gcc perl-ExtUtils-MakeMaker

## 卸载
yum remove git

## 进入local
cd /usr/local/src/
## 下载
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-htmldocs-2.28.0.tar.gz
## 解压
tar -xvf git-2.23.0.tar.xz

##进入解压后的目录
cd git-2.28.0/

## 配置
make prefix=/usr/local/git all
## 安装
make prefix=/usr/local/git install
## 配置环境变量
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile
## 重新加载环境配置
source /etc/profile
参考文章:
1.CentOS7升级Git版本 (照着这篇文章做,应该没错)

3.大文件的忽略

关于大文件的管理,其实典型的应用就是说,一个图片,经过多次修改之后,及时仓库本身的体积不是很大,但是.git文件夹会变得很大,因为它保留了多次的文件修改信息,也就是缓存了每一个图片,但是我们又不需要这些历史图片,怎么办呢?

1.怎么删除这些文件的版本控制信息,只保留最新文件?
2.在一开始创建新文件的时候,能不能设置改文件不参与版本控制,但是又能push到远程?

我发现了一个很好的插件,就是使用 git lfs 进行管理。

参考文章:
1.An open source Git extension for versioning large files (这是一个官方的扩展,可以对大型的文件进行管理)
2.Github 上怎么删除一个文件的版本控制信息,只保留最新文件? (这里提到的问题很相似)

4.统计代码行数

在linux系统上可以使用下面的命令,如果是windows系统,需要打开git bash执行下面的操作。
(1) 按不同文件统计所有人的

1
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | grep "\(.html\|.java\|.xml\|.properties\|.css\|.js\|.txt\|.vue\)$" | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

(2) 统计所有人的

1
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

(3) 使用cloc

1
2
3
4
5
## 安装
npm install -g cloc

## 使用
colc 目录
参考文章:
1.在windows 上统计git 代码量 (借助于gawk软件,可以统计某一个时间范围内的代码行数)
2.git中统计代码行数
3.项目代码行数统计 (这里提供了多种统计方法,包括使用了idea插件,使用git命令,使用 cloc)
4.使用 cloc 统计你的代码量
5.代码统计工具 cloc 基本使用

5.Pull request

需要注意的就是:
(1) 进行发起pull request 设置的,是自己仓库中 fork 的那一个,而不是原仓库

6.敏感信息加密

6.子模块

1
2
3
4
5
6
7
8
9
10
11
## 添加
git submodule add <url> <path>

## 删除
rm -rf 子模块目录 删除子模块目录及源码
vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目
vi .git/config 删除配置项中子模块相关条目
rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可

## 清除缓存
git rm --cached 子模块名称

7.删除历史

1
2
3
4
5
6
7
8
9
10
11
# 撤销对某个文件的跟踪
git rm --cached secret.txt

# 在某个分支上删除文件历史
git filter-branch --index-filter 'git rm --cached --ignore-unmatch secret.txt' HEAD

# 删除所有版本中的某个文件
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch secret.txt' --prune-empty --tag-name-filter cat -- --all

# 保留文件但删除历史记录
git filter-branch --force --index-filter 'git update-index --assume-unchanged secret.txt' --prune-empty --tag-name-filter cat -- --all
参考文章:
【1】.Git:移除文件—-git rm命令的使用 这里只是删除某一个文件,还是有历史记录。git rm 命令使用,删除工作区文件,并且将这次删除放入暂存区。git rm -f 命令, 删除工作区和暂存区文件,并且将这次删除放入暂存区。git rm –cached 命令,删除暂存区文件,但保留工作区的文件,并且将这次删除放入暂存区。
【2】.Github: 单独删除某个文件的所有历史记录 把src/main/resources/config/application-test.yml替换成你们自己的,本地记录覆盖到Github,(所有branch以及所有tags)
【3】.Git 如何在 git 中删除一个文件的所有痕迹 这里有相应的代码,还是挺管用的
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。