diff --git a/docs/git.md b/docs/git.md index 79171f4..befed23 100644 --- a/docs/git.md +++ b/docs/git.md @@ -563,6 +563,221 @@ $ git fetch --all && git reset --hard origin/master $ git log Branch1 ^Branch2 ``` +Git Submodule 子模块 +------ + +### 添加子模块 + +```bash +$ git submodule add <仓库地址> <子模块路径> +``` + +### 克隆包含子模块的仓库 + +```bash +$ git clone --recursive +``` + +### 更新子模块 + +```bash +$ git submodule update --remote +``` + +### 切换到子模块的特定提交 + +```bash +$ cd +$ git checkout +``` + +### 查看当前仓库中的子模块 + +```bash +$ git submodule status +``` + +### 初始化子模块 + +```bash +$ git submodule init +``` + +### 切换到父仓库的特定提交,并更新子模块 + +```bash +$ cd .. +$ git checkout +$ git submodule update --remote +``` + +### 获取并切换子模块的最新标签 + + +```bash +$ cd +$ git fetch --tags +$ git checkout $(git describe --tags $(git rev-list --tags --max-count=1)) +``` + +### 子模块递归 + + +```bash +# 添加所有已存在的子模块 +$ git submodule foreach --recursive git submodule add +# 更新所有子模块到最新提交 +$ git submodule foreach --recursive git pull origin master +# 检出特定的子模块路径 +$ git submodule foreach --recursive git checkout +# 获取仓库中的所有子模块变化 +$ git submodule foreach --recursive git fetch +# 获取并合并子模块的远程分支 +$ git submodule foreach --recursive git pull origin +# 将子模块还原到父仓库中的初始提交 +$ git submodule foreach --recursive git checkout . +# 获取子模块的更新并忽略本地修改 +$ git submodule foreach --recursive git fetch --all +$ git submodule foreach --recursive git reset --hard origin/master +``` + +### 获取子模块的最新提交 + +```bash +$ cd +$ git pull +``` + +### 删除子模块 + +```bash +$ git submodule deinit +$ git rm +``` + +### 切换子模块的分支 + +```bash +$ cd +$ git checkout +``` + +### 初始化并更新所有子模块 + +```bash +$ git submodule init +$ git submodule update +``` + +### 切换子模块的特定标签 + +```bash +$ cd +$ git checkout tags/ +``` + +Config 设置 +--- + +### 查看配置的信息 + +```bash +$ git help config +``` + +获取帮助信息,查看修改个人信息的参数 + +### 忽略文件的权限变化 + +```shell +git config core.fileMode false +``` + +不再将文件的权限变化视作改动 + +### 配置自动换行 + +```bash +$ git config --global core.autocrlf input +``` + +自动转换坑太大,提交到git是自动将换行符转换为 `lf` + +### 获取帮助信息 + +```bash +$ git config --list +``` + +### 中文乱码的解决方案 + +```shell +$ git config --global core.quotepath false +``` + +### 删除全局设置 + +```bash +$ git config --global --unset +``` + +### 配置 http 和 socks 代理 + + +```bash +# 查看代理 +$ git config --global http.proxy +$ git config --global https.proxy +$ git config --global socks.proxy + +# 设置代理 +# 适用于 privoxy 将 socks 协议转为 http 协议的 http 端口 +$ git config --global http.proxy http://127.0.0.1:1080 +$ git config --global https.proxy http://127.0.0.1:1080 +$ git config --global socks.proxy 127.0.0.1:1080 + +# 取消代理 +$ git config --global --unset http.proxy +$ git config --global --unset https.proxy +$ git config --global --unset socks.proxy + +# 只对 github.com 设置代理 +$ git config --global http.https://github.com.proxy socks5://127.0.0.1:1080 +$ git config --global https.https://github.com.proxy socks5://127.0.0.1:1080 + +# 取消 github.com 代理 +$ git config --global --unset http.https://github.com.proxy +$ git config --global --unset https.https://github.com.proxy +``` + +### Git 别名 + +```shell +$ git config --global alias.co checkout +$ git config --global alias.br branch +$ git config --global alias.ci commit +$ git config --global alias.st status +``` + +配置好后,再输入 `git` 命令的时候就不用再输入一大段了,例如我们要查看状态,只需: + +```bash +$ git st +``` + +也可以看看:[更多别名](https://gist.github.com/johnpolacek/69604a1f6861129ef088) + +### 设置大小写敏感 + +```shell +# 查看git 的设置 +$ git config --get core.ignorecase +# 设置大小写敏感 +$ git config core.ignorecase false +# 远程有俩相同目录,通过这种方式清除掉,然后提交记录 +$ git rm -r --cached <目录/文件> +``` + Git 技巧 ------ @@ -643,36 +858,6 @@ $ git checkout -- git remote prune origin ``` -### 忽略文件的权限变化 - -```shell -git config core.fileMode false -``` - -不再将文件的权限变化视作改动 - -### Git 别名 - -```shell -$ git config --global alias.co checkout -$ git config --global alias.br branch -$ git config --global alias.ci commit -$ git config --global alias.st status -``` - -也可以看看:[更多别名](https://gist.github.com/johnpolacek/69604a1f6861129ef088) - -### 设置大小写敏感 - -```shell -# 查看git 的设置 -$ git config --get core.ignorecase -# 设置大小写敏感 -$ git config core.ignorecase false -# 远程有俩相同目录,通过这种方式清除掉,然后提交记录 -$ git rm -r --cached <目录/文件> -``` - ### 获取最近一次提交的 Hash ```shell @@ -715,12 +900,6 @@ $ git diff git diff --cached ``` -### 中文乱码的解决方案 - -```shell -$ git config --global core.quotepath false -``` - ### 展示暂存区、工作区和最近版本的不同 ```bash @@ -876,35 +1055,6 @@ $ git checkout --orphan $ git show : ``` -### 配置 http 和 socks 代理 - - -```bash -# 查看代理 -$ git config --global http.proxy -$ git config --global https.proxy -$ git config --global socks.proxy - -# 设置代理 -# 适用于 privoxy 将 socks 协议转为 http 协议的 http 端口 -$ git config --global http.proxy http://127.0.0.1:1080 -$ git config --global https.proxy http://127.0.0.1:1080 -$ git config --global socks.proxy 127.0.0.1:1080 - -# 取消代理 -$ git config --global --unset http.proxy -$ git config --global --unset https.proxy -$ git config --global --unset socks.proxy - -# 只对 github.com 设置代理 -$ git config --global http.https://github.com.proxy socks5://127.0.0.1:1080 -$ git config --global https.https://github.com.proxy socks5://127.0.0.1:1080 - -# 取消 github.com 代理 -$ git config --global --unset http.https://github.com.proxy -$ git config --global --unset https.https://github.com.proxy -``` - ### clone 最新一次提交 ```bash