Git是一个分布式版本管理系统,2005年由Linus大神在一周时间完成最初版,以代替BitKeeper用于linux的开发。
可使用$ git config
对git配置进行管理。
1
2
3
4
5
6
7
| $ git config --list #查看配置信息
$ git config --global -e #修改配置信息
# git 配置用户信息
$ git config --global user.name "user"
$ git config --global user.email "user@email.com"
# 文本编辑器
$ git config --global core.editor vim
|
1
2
3
4
5
6
7
8
9
| # 普通设置
$ git log -p -2 # 显示每次提交内容差异
$ git log --pretty=format:"%h - %an, %ar : %s "
# 设置可视化日志
$ git config --global alias.lg "log --graph \
--pretty=format:'%Cred%h%Creset \
-%C(yellow)%d%Creset %s \
%Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"
|
增加.git/hooks/prepare-commit-msg
文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #!/bin/sh
NAME=$(git config user.name)
EMAIL=$(git config user.email)
if [ -z "$NAME" ]; then
echo "empty git config user.name"
exit 1
fi
if [ -z "$EMAIL" ]; then
echo "empty git config user.email"
exit 1
fi
|
1
2
3
4
5
6
| $ cd <project_dir> #进入工程目录
$ git init #初始化当前目录git
$ echo "*.log" >> .gitignore #设置git 忽略文件
$ git add ./ #将当前目录文件加入到git 暂存区
$ git commit -a -m "" #提交暂存区到本地仓库中
$ git push origin master #将git仓库推送到远程仓库中
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 回退
$ git reset HEAD^N #回退N个提交
# 修改最后一次提交
$ git commit --amend
# 撤销已暂存文件
$ git reset HEAD filename
# 取消工作区文件修改
$ git checkout -- filename
# 合并多个提交为一个提交
$ git rebase -i HEAD~n
|
1
2
| $ git format-path [commit-id] -n #生成patch
$ git am [path/to/xxx.patch] #应用patch
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 查看远程仓库
$ git remote [ -v ]
# 添加远程仓库
$ git remote add [ shortname ] [url]
# 查看远程仓库信息
$ git remote show [ remote-name ]
# 重命名远程仓库名称
$ git remote rename [ remote-old-name ] [ remote-new-name ]
# 获取远程仓库数据
$ git fetch [ remote-name ]
# 推送数据到远程仓库
$ git push [ remote-name ] [ branch-name ]
# 增加多个远程分支,push时能同时推送到多个remote仓库
$ git remote set-url --add <remote-name> <url>
|
Git LFS 是 Github 开发的一个 Git 的扩展,用于实现 Git 对大文件的支持;
git每次提交都会完整保存发生变化文件的整个文件,fetch时下载当前revision的所有文件,这样在大文件发生变化时,每次fetch时需要下载很多的数据,并且需要很大的存储空间;
git lfs 使用指针文件来代替大文件,并将大文件存储于专门的大文件存储区;
git fetch时,只会fetch大文件的指针文件,不会下载正在的大文件,正在的大文件在checkout时才会从大文件存储区下载到local;
1
2
3
4
5
| $ brew install git-lfs # 安装git-lfs
$ git lfs install # git增加lfs插件
$ git lfs track "*.png" # 追踪所有后缀为png的文件
$ git lfs track # 查看现有的文件追踪模式
$ git lfs ls-files # 显示当前跟踪的文件列表
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 下载SVN库到本地目录
$ git svn clone svn://192.168.0.2/_private/code mycode
# 从本地库中检出最新版本为b1分支
$ git checkout -b b1
# 编辑代码,增加或删除文件
$ git add/remove file
# 提交到本地库master分支中
$ git commit -a -m ""
# 将本地master分支远程同步到svn库中
$ git svn dcommit
# 将svn库中的文件重新同步到本地
$ git svn rebase
# 创建新的svn分支
$ git svn branch b2
|
1
2
3
4
5
6
7
| $ svn mkdir -m "init" svn://192.168.0.2/repos/prj
$ cd git_root
$ git svn init -s svn://192.168.0.2/repos/prj
$ git svn fetch
$ git svn rebase
$ git svn stash
$ git svn dcommit
|
- fatal: The remote end hung up unexpectedly
1
| $ git config --local http.postBuffer 524288000
|
Git简史
ProGit
https://zhuanlan.zhihu.com/p/25989135
https://zhuanlan.zhihu.com/p/45510461
https://learngitbranching.js.org/