仓库

仓库

Git 是来源于 Linux 内核开发中的的一个分布式版本管理工具,基于 Git 的工作流程也是有很多工作流。

Configuration | 配置

Management | 配置管理

# 列举所有的别名与配置
git config --list

# Git 别名配置
git config --global alias.<handle> <command> git config --global alias.st status

# 设置 Git 为大小写敏感
git config --global core.ignorecase false

我们也可以查看常用的辅助查询命令:

# 在 Git 命令行里查看 everyday git
git help everyday

# 显示 git 常用的帮助命令
git help -g

# 获取 Git Bash 的自动补全
curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc

# 设置自动更正
git config --global help.autocorrect 1

User | 用户配置

# 配置 HTTP 代理
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080

# 配置 Socks 代理
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 http.proxy
git config --global --unset https.proxy
git config --global http.sslVerify false
gitalias['alias.cp']='cherry-pick'
gitalias['alias.st']='status -sb'
gitalias['alias.cl']='clone'
gitalias['alias.ci']='commit'
gitalias['alias.co']='checkout'
gitalias['alias.br']='branch'
gitalias['alias.dc']='diff --cached'
gitalias['alias.lg']="log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset' --abbrev-commit --date=relative --all"
gitalias['alias.last']='log -1 --stat'
gitalias['alias.unstage']='reset HEAD --'

认证信息

# 使用 credential 管理密码,拉取仓库时候仅需要输入一次
$ git config --global credential.helper store

Repository | 仓库配置与管理

初始化某个仓库:

# 初始化一个版本仓库
git init

#Clone远程版本库
git clone git@xbc.me:wordpress.git
git clone https://username@github.com/username/repository.git

# 添加远程版本库origin,语法为 git remote add [shortname] [url]
git remote add origin git@xbc.me:wordpress.git

# 查看远程仓库
git remote -v
# 使用 credential 管理密码,拉取仓库时候仅需要输入一次
$ git config --global credential.helper store

查看远端仓库相关信息:

# 获取所有远端引用配置
git remote
# 或者
git remote show

# 修改某个远端的地址
git remote set-url origin <URL>

查看仓库的统计信息:

# 查看当前仓库中的所有未打包的 objects 和磁盘占用
git count-objects --human-readable

# 从 object 数据库中删除所有不可达的 object
git gc --prune=now --aggressive

.gitignore

注意忽略只对未跟踪文件有效,对于已加入版本库的文件无效,Git 内置三级忽略文件机制:

  • 版本库共享式忽略文件,版本库中目录下的 .gitignore 文件作用于整个目录及子目录,会随着该版本库同其他人共享。

  • 本地的针对具体版本库的独享式忽略文件,即在版本库 .git 目录下的文件 info/exclude 中设置文件忽略

  • 本地的全局的独享式忽略文件,通过 Git 的配置变量 core.excludesfile 指定的一个忽略文件(指定文件名),其设置的忽略对所有本地版本库均有效。设置方法如下(文件名可以任意设置):

$ git config --global core.excludesfile ~/.gitignore

Git 的忽略文件遵循以下语法规则:

  • 忽略文件中的空行或以井号(#)开始的行将会被忽略。

  • 可以使用 Linux 通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。

  • 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。

  • 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。

  • 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

Statistics | 统计数据

# 查看 Git 上的个人代码量,username 需要修改为真实用户名
$ git log --author="username" --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 }' -
# added lines: 120745, removed lines: 71738, total lines: 49007

# 统计每个人增删行数
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

# 统计提交数前五名
$ git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5

仓库清理

# 查看历史大文件
$ git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"

# 从历史中删除 target/ 这个文件夹
$ git filter-branch --force --index-filter 'git rm -r  --cached --ignore-unmatch target/' --prune-empty --tag-name-filter cat -- --all

# 执行仓库压缩
$ git gc --prune=now

# 推送到远程仓库
$ git push origin --force --all
上一页
下一页