1. git基础操作
使用 .gitattributesde 配置文件 内容如下
*.h linguist-language=C++
*.c linguist-language=C++
使用 .git-credentials 配置文件(win下面在 C:\user\username下面) 内容如下
https://username:password@github.com
再执行 git config --global credential.helper store
或执行(缓存10个小时) git config --global credential.helper cache –timeout=36000
git clone https://brinkqiang:password@github.com/brinkqiang/dmlua.git
git remote add origin https://brinkqiang:password@github.com/brinkqiang/dmlua.git
git branch -al 查看本地和远程的所有分支。
本地创建仓库
git init
本地创建纯净的仓库
git init --bare --shared
添加
git readme.txt add
添加当前目录所有文件
git add .
本地提交
git commit
拉取
git pull
远端提交
git push -u origin master (注:此操作目的是把本地仓库push到github上面,此步骤需要你输入帐号和密码)
git submodule init && git submodule update
git submodule add https://github.com/google/googletest.git thirdparty/gtest
bat设置如下
git config --global user.name ""
git config --global user.email ""
git config --global credential.helper store
git config --global credential.helper cache –timeout=36000
git config --global http.postBuffer 200000000
git config --global http.sslVerify "false"
2. git代理设置
edit .gitconfig
[http]
proxy = http://127.0.0.1:8087
sslVerify = false
postBuffer = 200000000
3. git放弃本地所有修改
git fetch --all
git reset --hard origin/master
git pull
4. git 切换当前链接方式
本地将所有https方式转换成ssh方式
git config --global url."git@github.com:".insteadOf "https://github.com/"
本地https -> ssh方式
git remote set-url origin git@github.com:username/project.git
本地ssh -> https方式
git remote set-url origin https://github.com/username/project.git
5. git换行符
5.1. 假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题。这是因为Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行一个字符。虽然这是小问题,但它会极大地扰乱跨平台协作。
Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF: git config –global core.autocrlf true
5.2. Linux或Mac系统使用LF作为行结束符,因此你不想 Git 在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉 Git 在提交时把CRLF转换成LF,签出时不转换:
git config –global core.autocrlf input
5.3. 如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:
git config –global core.autocrlf false
6. 注意
使用gogs http上传方式 可能存在缓冲区过小的问题 fatal: The remote end hung up unexpectedly fatal: The remote end hung up unexpectedly error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400 Failed reading client body 可以在工作目录执行如下命令 git config –global http.postBuffer 204800000
7. 干净的新仓库
git checkout --orphan latest_branch
git add -A
git commit -m "Reset repository"
git branch -D master
git branch -M master
git push -f origin master
8. 创建cmake模块化项目
git clone --depth 1 --recurse-submodules git@github.com:grpc/grpc.git
git fetch --tags
git checkout v1.68.2
git submodule update --init --recursive
tar --exclude='.git' -czvf grpc.tar.gz grpc
9. 创建新的分支
# 查看本地当前分支
git branch
# 查看远端分支
git branch -r
# 创建切换分支
git switch -c new_branch
# 切换分支
git switch new_branch
# 关联分支
git push --set-upstream origin new_branch
# 拉取远端代码 合并
git pull
# 拉取远端代码 不合并
git fetch
# 拉取远端所有分支
git fetch --all
git branch -r
# 合并其他分支, 当前合并其他分支.
git merge other_branch
# 删除本地分支 以及远端分支 v2
git branch -D v2 && git push origin --delete v2
10. 创建分支注意
10.1. 从main或者master分支切换 到指定版本后 子模块 可能还是使用的 main或者master分支 这点要特别注意
git checkout v1.68.2
git submodule update --init --recursive
11. 本地签入合并冲突提示: Please, commit your changes or stash them before you can merge.
git stash
git pull
git stash pop
12. 本地上传gitlab项目
先删除.git目录
git init
git remote add origin git@gitlab.com:userName/projectName.git
git add .
git commit -m "note"
git push original master
13. 增加可执行权限
git ls-files --stage
100644 0479304e6086a7b886718aacd1e4e50da9145f66 0 dmgen
644权限,默认不能执行
git update-index --chmod +x dmgen
git ls-files --stage
100755 0479304e6086a7b886718aacd1e4e50da9145f66 0 dmgen
现在文件是755可执行权限.
git commit -m "xxx!"
1 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 src/dmgen
git push
14. 仓库迁移
git clone ne https://github.com/brinkqiang/dmgen pushd dmgen git remote add gitlab https://new.github.com/brinkqiang/dmgen git push gitlab master popd
15. zsh git
git branch 分支名 //创建分支
gco 分支名 //切换分支
gwip //签入
ggpush //推送远端
gpoat //创建上传分支
16. git lfs
git lfs install git lfs track “.zip” git lfs track “.rar” git add .gitattributes
17. windows更新git
git update-git-for-windows
17.1. The git Plugin
The git plugin provides many aliases and a few useful functions.
Enable it by adding git to the plugins array before sourcing OMZ (see [[Plugins]]).
17.2. Aliases
Alias | Command |
---|---|
g | git |
ga | git add |
gaa | git add –all |
gapa | git add –patch |
gau | git add –update |
gb | git branch |
gba | git branch -a |
gbda | git branch –merged | command grep -vE “^(*|\smaster\s$)” | command xargs -n 1 git branch -d |
gbl | git blame -b -w |
gbnm | git branch –no-merged |
gbr | git branch –remote |
gbs | git bisect |
gbsb | git bisect bad |
gbsg | git bisect good |
gbsr | git bisect reset |
gbss | git bisect start |
gc | git commit -v |
gc! | git commit -v –amend |
gca | git commit -v -a |
gcam | git commit -a -m |
gca! | git commit -v -a –amend |
gcan! | git commit -v -a -s –no-edit –amend |
gcb | git checkout -b |
gcf | git config –list |
gcl | git clone –recursive |
gclean | git clean -df |
gcm | git checkout master |
gcd | git checkout develop |
gcmsg | git commit -m |
gco | git checkout |
gcount | git shortlog -sn |
gcp | git cherry-pick |
gcpa | git cherry-pick –abort |
gcpc | git cherry-pick –continue |
gcs | git commit -S |
gd | git diff |
gdca | git diff –cached |
gdt | git diff-tree –no-commit-id –name-only -r |
gdw | git diff –word-diff |
gf | git fetch |
gfa | git fetch –all –prune |
gfo | git fetch origin |
gg | git gui citool |
gga | git gui citool –amend |
ggf | git push –force origin $(current_branch) |
ghh | git help |
ggpull | ggl |
ggpur | ggu |
ggpush | ggp |
ggsup | git branch –set-upstream-to = origin/$(current_branch) |
gpsup | git push –set-upstream origin $(current_branch) |
gignore | git update-index –assume-unchanged |
gignored | git ls-files -v | grep “^[[:lower:]]” |
git-svn-dcommit-push | git svn dcommit && git push github master:svntrunk |
gk | \gitk –all –branches |
gke | \gitk –all $(git log -g –pretty = format:%h) |
gl | git pull |
glg | git log –stat –color |
glgg | git log –graph –color |
glgga | git log –graph –decorate –all |
glgm | git log –graph –max-count = 10 |
glgp | git log –stat –color -p |
glo | git log –oneline –decorate –color |
glog | git log –oneline –decorate –color –graph |
glol | git log –graph –pretty = format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit |
glola | git log –graph –pretty = format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit –all |
glp | _git_log_prettily |
gm | git merge |
gmom | git merge origin/master |
gmt | git mergetool –no-prompt |
gmtvim | git mergetool –no-prompt –tool = vimdiff |
gmum | git merge upstream/master |
gp | git push |
gpd | git push –dry-run |
gpoat | git push origin –all && git push origin –tags |
gpristine | git reset –hard && git clean -dfx |
gpu | git push upstream |
gpv | git push -v |
gr | git remote |
gra | git remote add |
grb | git rebase |
grba | git rebase –abort |
grbc | git rebase –continue |
grbi | git rebase -i |
grbm | git rebase master |
grbs | git rebase –skip |
grh | git reset HEAD |
grhh | git reset HEAD –hard |
grmv | git remote rename |
grrm | git remote remove |
grset | git remote set-url |
grt | cd $(git rev-parse –show-toplevel || echo “.”) |
gru | git reset – |
grup | git remote update |
grv | git remote -v |
gsb | git status -sb |
gsd | git svn dcommit |
gsi | git submodule init |
gsps | git show –pretty = short –show-signature |
gsr | git svn rebase |
gss | git status -s |
gst | git status |
gsta | git stash save |
gstaa | git stash apply |
gstd | git stash drop |
gstl | git stash list |
gstp | git stash pop |
gstc | git stash clear |
gsts | git stash show –text |
gsu | git submodule update |
gts | git tag -s |
gunignore | git update-index –no-assume-unchanged |
gunwip | git log -n 1 | grep -q -c “--wip--” && git reset HEAD~1 |
gup | git pull –rebase |
gupv | git pull –rebase -v |
gupa | git pull –rebase –autostash |
gupav | git pull –rebase –autostash -v |
gunignore | git update-index –no-assume-unchanged |
glum | git pull upstream master |
gvt | git verify-tag |
gwch | git whatchanged -p –abbrev-commit –pretty = medium |
gwip | git add -A; git rm $(git ls-files –deleted) 2> /dev/null; git commit -m “–wip–” |
17.3. Deprecated Aliases
These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support.
Alias | Command | Modification | |
---|---|---|---|
gap | git add –patch | new alias gapa |
|
gcl | git config –list | new alias gcf |
|
gdc | git diff –cached | new alias gdca |
|
gdt | git difftool | no replacement | |
ggpull | git pull origin $(current_branch) | new alias ggl (ggpull still exists for now though) |
|
ggpur | git pull –rebase origin $(current_branch) | new alias ggu (ggpur still exists for now though) |
|
ggpush | git push origin $(current_branch) | new alias ggp (ggpush still exists for now though) |
|
gk | gitk –all –branches | now aliased to \gitk --all --branches |
|
glg | git log –stat –max-count = 10 | now aliased to git log --stat --color |
|
glgg | git log –graph –max-count = 10 | now aliased to git log --graph --color |
|
gwc | git whatchanged -p –abbrev-commit –pretty = medium | new alias gwch |
|
gwip | git add -A; git ls-files –deleted -z \ | xargs -r0 git rm; git commit -m “–wip–” | now aliased to git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit -m "--wip--" |
17.4. Functions
17.4.1. Current
Command | Description |
---|---|
current_branch | Return the name of the current branch |
current_repository | Return the names of the current remotes |
git_current_user_name | Returns the user.name config value |
git_current_user_email | Returns the user.email config value |
17.4.2. WiP
These features allow to pause a branch development and switch to another one (“Work in Progress”, or wip). When you want to go back to work, just unwip it.
Command | Description |
---|---|
work_in_progress | Echoes a warning if the current branch is a wip |
gwip | Commit wip branch |
gunwip | Uncommit wip branch |
17.5. github host
17.5.1. 获取Github相关网站的ip
访问https://www.ipaddress.com,找到页面中下方的“IP Address Tools - Quick Links”,分别输入github.global.ssl.fastly.net和github.com,查询ip地址。
17.5.2. 修改host
140.82.113.4 github.com
140.82.113.4 gist.github.com
185.199.109.153 assets-cdn.github.com
185.199.109.153 raw.githubusercontent.com
185.199.109.153 gist.githubusercontent.com
185.199.109.153 cloud.githubusercontent.com
185.199.109.153 camo.githubusercontent.com
185.199.109.153 avatars0.githubusercontent.com
185.199.109.153 avatars1.githubusercontent.com
185.199.109.153 avatars2.githubusercontent.com
185.199.109.153 avatars3.githubusercontent.com
185.199.109.153 avatars4.githubusercontent.com
185.199.109.153 avatars5.githubusercontent.com
185.199.109.153 avatars6.githubusercontent.com
185.199.109.153 avatars7.githubusercontent.com
185.199.109.153 avatars8.githubusercontent.com
17.5.3. 更新缓存
ipconfig /flushdns sudo dscacheutil -flushcache
17.5.4. github验证机制调整
在新机器上 设置好ssh-key的情况。 依旧需要账号密码, 这里的密码 不是登陆密码 而是Personal access tokens