Git日常使用以及问题记录
一、安装
在macos中安装,使用xcode工具或者brew直接安装;
在ubuntu/redhat中使用apt/yum安装,yum可能需要设置epel源安装最新的版本;
二、配置
git配置文件主要放在三个位置,针对的范围不同,分别是所有用户,当前用户、当前仓库;
命令行是使用git config读写,例如git config –global xxx=xxx
范围 | 配置文件 | 配置参数 |
---|---|---|
所有用户 | /etc/gitconfig | –system |
当前用户 | ~/.gitconfig 或者 ~/.config/git/config | –global |
当前仓库 | .git/config | –local 或者空(默认值) |
优先级:当前仓库 > 当前用户 > 所有用户,同样的配置会覆盖。
按照上述的优先级,我们可以直接给某个仓库设置提交用户的身份。
使用该命令可以列出配置项,以及生效的文件:
git config --list --show-origin
三、git目录下的文件说明
每一个git仓库下面都会有一个.git的文件夹,这个文件夹存储这个整个git的配置和每个版本的信息;我们简单看下有哪些文件:
.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:gslnzfq/test.git
fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "feature/test"]
remote = origin
merge = refs/heads/feature/test
[user]
name = zhangsan
email = zhangsan@qq.com
我们可以在该文件中看到远程的仓库地址,还有就是每个分支的信息;
.git/HEAD
ref: refs/heads/feature/test
该文件存储的是当前分支的信息;
四、删除忽略的文件
修改ignore文件后,重新整理文件:git rm -r –cached .
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
五、git常用命令
git status 命令的输出十分详细,但其用语有些繁琐。Git 有一个选项可以帮你缩短状态命令的输出,这样可以以简洁的方式查看更改。如果你使用 git status -s 命令或 git status –short 命令,你将得到一种格式更为紧凑的输出。
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
拉取所有的分支
git fetch –all
打标签
git tag <tagName>
推送所有标签
git push –tags
删除标签
git tag -d <tagname>
删除分支
git branch -d <branch>
删除远程分支
git push -D origin <branch>
强制使用远程代码
git rebase –hard origin/master
六、git文件夹占用过大
发现占用了281MB
➜ welcome git:(master) du -h -d1
1.7M ./app
426M ./cdn
8.0K ./test
1.1M ./dist
4.2M ./bower_components
325M ./node_modules
2.4M ./.tmp
281M ./.git
36K ./.idea
1.0G .
清理
git gc –aggressive
对本地git库进行更彻底清理和优化,这个指令花费的时间也会更长。
git gc –auto
这是一个设置的指令,并不会进行gc操作。如果有 7,000 个左右的松散对象或是 50 个以上的 packfile,Git 才会真正调用 gc 命令,即是这里设置了阈值,当然也可以通过修改配置中的 gc.auto 和 gc.autopacklimit 来调整这两个阈值。
清理以后,好像并么有减少多少,看看.git文件夹的大小
➜ welcome git:(master) du -h -d1
1.7M ./app
426M ./cdn
8.0K ./test
1.1M ./dist
4.2M ./bower_components
325M ./node_modules
2.4M ./.tmp
276M ./.git
36K ./.idea
1.0G .
参考:
https://www.cnblogs.com/lykbk/p/dfdfvdfd343434.htmlhttps://blog.csdn.net/leebruce_/article/details/82776117
七、删除所有的历史记录
具体步骤
- 切换不保留历史记录的新分支
- 提交代码(否则新的分支是不存在的)
- 删除旧分支
- 修改分支名称为要删除历史记录的分支
- 强推到远端
# 切换一个不保留历史记录的分支
git checkout --orphan new_branch
# 提交代码
git add -A
git commit -am "feat: clean code."
# 删除旧的分支
git branch -D master
# 修改当前分支名称为旧分支名称
git branch -m master
# 强推
git branch --set-upstream-to origin/master master
git push -f origin master
八、npm下载github仓库提示失败
The unauthenticated git protocol on port 9418 is no longer supported.
git config --global url."https://github.com/".insteadOf git://github.com/
九、在git目录启动服务在网页上查看git的信息
# 打开
git instaweb --httpd=webrick
# 关闭
git instaweb --httpd=webrick --stop
十、使用tag管理版本号
获取git仓库的最新tags,下面命令得到的是一个tag列表
# 更新远程的tags到本地
git fetch origin --tags
使用nodejs获取最新的版本号后自增,小版本累加到9,前面的版本+1
// 获取本地的tag并且排序拿到最新的版本号
function getLastVersion() {
return require('child_process')
.execSync(`git tag`, { cwd: path.resolve("../../build") })
.toString()
.split("\n")
.filter(Boolean)
.sort((a, b) => semver.compare(a, b))
.pop()
}
// 保证版本号不超过10
// 版本号变更 1.0.9 => 1.1.0 1.9.0 => 2.0.0
const lastVersion = getLastVersion();
let nextVersion = semver.inc(lastVersion, "patch");
const patchVersion = semver.patch(lastVersion);
const minorVersion = semver.minor(lastVersion);
if (patchVersion >= 9) {
nextVersion = semver.inc(lastVersion, "minor");
} else if (minorVersion >= 9) {
nextVersion = semver.inc(lastVersion, "major");
}
十一、push的时候自动追踪远程的分支
将当前分支推到远端,如果没有track会提示错误,如下所示
我们可以先获取本地当前分支,然后在推送的时候添加上分支名称就可以了
# git branch --show-current 会获取当前的分支
git push -u origin "$(git branch --show-current)"
十二、获取最近一个提交用户的邮箱
有时候需要通过提交触发ci流程,ci完成之后给提交者发送邮件,可以通过下面的脚本来获取提交邮箱。
git log --pretty=format:"%ae" -1
十三、删除空文件夹
git clean -fd