git tips

隐藏

忽略已经提交到仓库的文件的进一步修改

有的时候,有些文件已经被上传到仓库中,但期望以后的修改不要被track,不要git status的时候显示修改,便于git add .直接批量添加所有需要上传的文件。

例如某些config文件,可能本地的改动不应该上传,但是直接gitignore之后git rm --cached <file>又不是我们想要的,因为我们期望该文件依然存在仓库,只是进一步的修改不要提交到仓库。

具体做法参见:https://stackoverflow.com/a/20241145

浅克隆

有时候从github上拉去软件安装,不需要完整的历史记录,浅克隆即可,这个比较简单。

git clone --depth=1 https://github.com/someproject

但有一个问题是如果有有submodules,例如:

git clone --depth=1 https://github.com/someproject --recursive

虽然项目haskell-ide-engine是浅拷贝,但是其submodules并未触发浅克隆。速度依然很慢。

参见 https://stackoverflow.com/questions/2144406/how-to-make-shallow-git-submodules https://blog.m157q.tw/posts/2017/11/03/what-does-git-clone-shallow-submodules-do-and-how-to-use-it/ https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---depthltdepthgt

git clone --depth=1 --recurse-submodules https://github.com/someproject

代理

最近github下载特别慢,不得不采用代理下载,git配置代理非常简单:

例如我的代理是http://127.0.0.1:1087

git config --global http.proxy http://127.0.0.1:1087
git config --global https.proxy http://127.0.0.1:1087

如不需要代理则执行:

git config --global --unset https.proxy
git config --global --unset http.proxy

免密

每次push都需要输入账号密码有些烦,关于如何免密网上有各种方式,我现在比较喜欢的一种方式是:

git config --global credential.helper store

credential.helper 设置为store则持久保存,如果想cache缓存,则:

git config --global credential.helper 'cache --timeout 7200'

则过期时间为两小时,此方案仅适用于git高版本,但非常方便。

参见: https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

但这种免密方式会遇到一个问题,因为其对所有的项目都采用同一个账号密码,而不能支持多账户,当遇到有种情况push失败时,取消掉此项目的免密模式:

git config credential.helper ""
-----EOF-----

Categories: tools Tags: git tips