Git教程
Git安装
先注册 Github 主页,在学习使用之前,注意:如果你涉及git只是简单的保存代码且文件大小<25M,github的图形界面完全可以搞定!没必要从头一点一点学命令行。
然后官网下载Git (git-scm.com),一切默认选项,不要乱改!
Git最基本使用
配置并生成密钥
(这是为了你能 clone 以及推送远程仓库做准备)
(下述命令行都是在指定文件夹下用 Git Bash 输入并运行)
用如下命令检查一下用户名和邮箱是否配置:
1
git config --global --list
配置:
1
2git config --global user.name 用户名
git config --global user.email 邮箱生成秘钥:
1
ssh-keygen -t rsa -C 邮箱
执行命令后需要进行3次或4次确认:
- (1) 确认秘钥的保存路径(如果不需要改路径则直接回车);
- (2) 如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
- (3) 创建密码(如果不需要密码则直接回车);
- (4) 确认密码;
- 在指定的保存路径(一般是
C:/users/用户名/.ssh)下会生成2个名为id_rsa和id_rsa.pub的文件;
网页打开 Github,进入
Settings -> SSH and GPG keys -> New SSH key;然后用文本工具(记事本之类的)打开之前生成的
id_rsa.pub文件,把内容拷贝到key下面的输入框,并为这个key定义一个名称(通常用来区分不同主机),然后保存即可。
创建本地仓库
1 | mkdir sth #创建文件夹,sth即为文件夹名称,建议英文 |
可以将指定文件添加到这个仓库内并记录每次更改
1 | git add any_file #将指定文件添加到Git仓库管理,any_file即为文件名字,例如 temp.txt |
也可以多次提交并记录说明
1 | git add any_file_1.txt |
或者本文件夹下内的文件全部提交
1 | git add . |
当然你也可以一直用下面这个命令查看仓库状态:
1 | git status |
注意:如果你只是把文件放在 sth 文件夹下,Git 仓库不知道你放进去了,就没办法进行版本管理(回退等),只有你进行提交之后才能进行记录与管理,只有提交的文件才能被推送到指定远程仓库。
添加远程仓库
在自己的 Github 网页版建一个远程仓库:点击
New repository,起好名字之后,你可以选择该仓库是否公开Public或私有Private,也可以选择是否为这个仓库添加一个说明问价Add a README file,当然也可以什么都不点击就直接Create repository;在你想要连接的本地仓库内(文件夹下),添加这个仓库远程地址:
1
2
3git remote add origin git@github.com:your_github_name/repository_name.git
# 或者下面这种添加也可以
git remote add origin https://github.com/your_github_name/repository_name可以调用命令行看看当前文件夹或仓库的远程库信息:
1
2
3git remote -v
# 输出可能如下,或没链接远程仓库
origin git@github.com:xxxxxxx.git (fetch)也可以删除远程仓库(比如添加的时候写错地址等),根据名字删除
origin:1
git remote rm origin
仍在本地仓库内(文件夹下),推送到远程仓库
1
2
3
4
5
6
7
8git add . #如果你之前已经添加,可以不进行此步
git commit -m "description"
#由于你新建的远程仓库是空的,所以有-u这个参数
git push -u origin main #推送到main分支,日后你可以创建多个分支管理
#日后就可以取消-u参数来进行推送
git push origin main
拉取远程仓库
一般的,你可以直接运行下述命令,将连接的远程仓库直接拉取下来:
1
git pull origin main
但是注意:这会直接覆盖掉你本地仓库,当然你可以新建一个本地空仓库,链接到远程这个仓库,在拉取也行!
可以换一种方法:先将本地代码放到暂存区,拉取之后再将暂存区代码放回本地
1
2
3git stash save "description" #放到暂缓区
git pull #拉取
git stash pop #将暂缓区放回本地- 但是:事实上这是为了解决这个问题存在的:甲乙两个程序员正在合作开发一款程序,甲晚上10点push了自己编辑的 test.txt 文档到GitHub;乙11点也想要 push 自己编辑过后的 test.txt 文档到 GitHub,因为乙本地仓库不是最新,乙push时会报错,乙如果使用 git pull 拉取最新版本,则自己修改的东就会丢失!
- 所以解决思路是:先把自己修改好的代码存放在缓存里,等最新代码拉取下来以后再恢复缓存里的自己修改的代码,乙再push,前提是两人不要修改相同的地方,可能会产生冲突!
拉取远程仓库指定单个文件夹
现在有一个 test 仓库https://github.com/mygithub/test,你要 gitclone 里面的 tt 子目录。
1 | git config core.sparsecheckout true #设置允许克隆子目录 |
克隆仓库
除了上述必须添加远程仓库的克隆方法,最简单的可哦那个仓库方法应该是
1 | git clone https://github.com/mygithub/test.git #其实候直接复制仓库链接没有.git也可以 |
指定分支上克隆代码
git clone 地址 默认从 main/master 分支上克隆,如下展示从指定分支上克隆代码:
1 | git clone -b 分支名称 地址 |
|
示例:git clone -b v2.8.1 https://git.oschina.net/oschina/android-app.git
子模块下载or更新
1 | git clone --recursive 地址 |
下面这个命令是在已经克隆下这个库后,开始下载子模块;当然如果你不确定子模块是否都已经下载完全了,也可以执行一遍下面这个命令确认一下。
1 | git submodule update --init --recursive |
更新子模块
1 | git submodule sync --recursive |
上传大文件(>100M)
话说在前头,真不建议用 Github 储存这么大的文件!很费事!三思!
安装 Git Large File Storage(LFS) 工具,官网直接下载安装即可;
安装后把里面的
git-lfs.exe放到你要上传的项目/仓库文件夹(最好是新建的文件夹仓库);1
git init
如果你是在push完后被提示需要用LFS文件的话,还需要回退版本,这步非常重要;如果你还没有push过大文件,可以忽略这个步骤。
1
2
3git log
# 查看版本,选择你最后成功push的一次版本
git reset commit号对于本地 git 仓库下,安装
lfs1
git lfs install
上传文件:
1
2
3
4
5
6
7
8git lfs track * #追踪要上传的大文件,*表示路径下的所有文件
git add .gitattributes #添加先上传的属性文件(要先上传属性文件,不然有可能失败)
git commit -m "pre" #添加属性文件上传的说明
git remote add origin https://github.com/name/repo.git #建立本地和Github仓库的链接
git push origin master #上传属性文件
git add * #添加要上传的大文件,*表示路径下的所有文件
git commit -m "Git LFS commit" #添加大文件上传的说明
git push origin master #上传大文件
常见问题及方法
error 10054
fatal: unable to access ‘https://github.com/…’: OpenSSL SSL_read: Connection was reset, errno 10054产生原因:一般是这是因为服务器的SSL证书没有经过第三方机构的签署,所以才报错。参考网上解决办法:解除ssl验证后,再次git即可
1 | git config --global http.sslVerify false |
推送或克隆超时(设置、取消代理)
设置代理:
1 | git config --global https.proxy |
取消代理:
1 | git config --global --unset https.proxy |
网上有人建议,先设置代理,再取消代理,然后再克隆。
GIT推送错误error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)
类似状况如下
1 | Counting objects: 100% (25515/25515), done. |
错误原因:error:RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)
错误:RPC失败;HTTP/2 stream 0没有完全关闭:CANCEL (err 8)
解决方法:
方法一:将git 远程地址改为自己的ssh地址
1 | git remote set-url origin git@github.com:github用户名/仓库名.git |
方法二:增加git缓冲区大小
1 | git config --global http.postBuffer 524288000 |
无法推送到某分支
问题
1 | git push -u origin main |
原因是没发现main分支,切换到main分支,再次测试即可
1 | $ git checkout main |
或者可以用git branch查看有哪些分支
1 | # 查看本地分支 |
总结:无法推送到某分支,先确认是否有该分支
查看仓库信息
config 配置有system级别 global(用户级别) 和local(当前仓库)三个 设置先从system->global->local 底层配置会覆盖顶层配置,分别使用 --system/global/local 可以定位到配置文件:
查看系统config:
1 | git config --system --list |
查看当前用户(global)配置:
1 | git config --global --list |
查看当前仓库配置信息
1 | git config --local --list |
查看、修改用户名和邮箱
查看用户名和邮箱地址:
1 | git config user.name |
修改用户名和邮箱地址:
1 | git config --global user.name "username" |




