Git安装

先注册 Github 主页,在学习使用之前,注意:如果你涉及git只是简单的保存代码且文件大小<25M,github的图形界面完全可以搞定!没必要从头一点一点学命令行。

然后官网下载Git (git-scm.com),一切默认选项,不要乱改!

Git最基本使用

配置并生成密钥

(这是为了你能 clone 以及推送远程仓库做准备)

(下述命令行都是在指定文件夹下用 Git Bash 输入并运行)

  1. 用如下命令检查一下用户名和邮箱是否配置:

    1
    git config --global  --list
  2. 配置:

    1
    2
    git config --global  user.name 用户名
    git config --global user.email 邮箱
  3. 生成秘钥:

    1
    ssh-keygen -t rsa -C 邮箱

    执行命令后需要进行3次或4次确认:

    • (1) 确认秘钥的保存路径(如果不需要改路径则直接回车);
    • (2) 如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
    • (3) 创建密码(如果不需要密码则直接回车);
    • (4) 确认密码;
    • 在指定的保存路径(一般是 C:/users/用户名/.ssh)下会生成2个名为 id_rsaid_rsa.pub 的文件;
  4. 网页打开 Github,进入 Settings -> SSH and GPG keys -> New SSH key

  5. 然后用文本工具(记事本之类的)打开之前生成的 id_rsa.pub 文件,把内容拷贝到 key 下面的输入框,并为这个 key 定义一个名称(通常用来区分不同主机),然后保存即可。

创建本地仓库

1
2
3
mkdir sth  #创建文件夹,sth即为文件夹名称,建议英文
cd sth #进入文件夹
git init #初始化为git仓库,此时文件夹下会创建.ssh隐藏文件夹

可以将指定文件添加到这个仓库内并记录每次更改

1
2
git add any_file #将指定文件添加到Git仓库管理,any_file即为文件名字,例如 temp.txt
git commit -m "description" #-m后面""内的描述是本次提交的说明(英文),用这个简要说明帮你记录每次提交的原因和目的

也可以多次提交并记录说明

1
2
3
git add any_file_1.txt
git add any_file_2.txt
git commit -m "description"

或者本文件夹下内的文件全部提交

1
git add .

当然你也可以一直用下面这个命令查看仓库状态:

1
git status

注意:如果你只是把文件放在 sth 文件夹下,Git 仓库不知道你放进去了,就没办法进行版本管理(回退等),只有你进行提交之后才能进行记录与管理,只有提交的文件才能被推送到指定远程仓库。

添加远程仓库

  1. 在自己的 Github 网页版建一个远程仓库:点击 New repository,起好名字之后,你可以选择该仓库是否公开 Public 或私有 Private,也可以选择是否为这个仓库添加一个说明问价 Add a README file,当然也可以什么都不点击就直接 Create repository

  2. 在你想要连接的本地仓库内(文件夹下),添加这个仓库远程地址:

    1
    2
    3
    git 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
    3
    git remote -v
    # 输出可能如下,或没链接远程仓库
    origin git@github.com:xxxxxxx.git (fetch)

    也可以删除远程仓库(比如添加的时候写错地址等),根据名字删除 origin

    1
    git remote rm origin
  3. 仍在本地仓库内(文件夹下),推送到远程仓库

    1
    2
    3
    4
    5
    6
    7
    8
    git add .                    #如果你之前已经添加,可以不进行此步
    git commit -m "description"

    #由于你新建的远程仓库是空的,所以有-u这个参数
    git push -u origin main #推送到main分支,日后你可以创建多个分支管理

    #日后就可以取消-u参数来进行推送
    git push origin main

拉取远程仓库

  • 一般的,你可以直接运行下述命令,将连接的远程仓库直接拉取下来:

    1
    git pull origin main

    但是注意:这会直接覆盖掉你本地仓库,当然你可以新建一个本地空仓库,链接到远程这个仓库,在拉取也行!

  • 可以换一种方法:先将本地代码放到暂存区,拉取之后再将暂存区代码放回本地

    1
    2
    3
    git 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
2
3
4
git config core.sparsecheckout true                     #设置允许克隆子目录
echo 'tt*' >> .git/info/sparse-checkout #设置要克隆的仓库的子目录路径 !空格别漏!
git remote add origin git@github.com:mygithub/test.git #这里换成你要克隆的项目和库,就是将你想拉取的远程仓库添加
git pull origin master #下载

克隆仓库

除了上述必须添加远程仓库的克隆方法,最简单的可哦那个仓库方法应该是

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
2
git submodule sync --recursive
git submodule update --init --recursive

上传大文件(>100M)

话说在前头,真不建议用 Github 储存这么大的文件!很费事!三思!

  1. 安装 Git Large File Storage(LFS) 工具,官网直接下载安装即可;

  2. 安装后把里面的 git-lfs.exe 放到你要上传的项目/仓库文件夹(最好是新建的文件夹仓库);

    1
    git init
  3. 如果你是在push完后被提示需要用LFS文件的话,还需要回退版本,这步非常重要;如果你还没有push过大文件,可以忽略这个步骤。

    1
    2
    3
    git log
    # 查看版本,选择你最后成功push的一次版本
    git reset commit号
  4. 对于本地 git 仓库下,安装 lfs

    1
    git lfs install
  5. 上传文件:

    1
    2
    3
    4
    5
    6
    7
    8
    git 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
2
3
4
5
6
7
8
9
Counting objects: 100% (25515/25515), done.
Delta compression using up to 4 threads
Compressing objects: 100% (18794/18794), done.
error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)
fatal: the remote end hung up unexpectedlyiB | 19.00 KiB/s
Writing objects: 100% (25503/25503), 28.46 MiB | 298.00 KiB/s, done.
Total 25503 (delta 5409), reused 25463 (delta 5393), pack-reused 0
fatal: the remote end hung up unexpectedly
Everything up-to-date

错误原因: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
2
3
git push -u origin main
error: src refspec main does not match any
error: failed to push some refs to 'https:

原因是没发现main分支,切换到main分支,再次测试即可

1
2
3
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'

或者可以用git branch查看有哪些分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看本地分支
$ git branch
* main
master

# 查看远程分支
$ git branch -r
origin/main
origin/master

# 查看所有分支,包括本地和远程
$ git branch -a
* main
master
remotes/origin/main
remotes/origin/master

总结:无法推送到某分支,先确认是否有该分支

查看仓库信息

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
2
git config user.name
git config user.email

修改用户名和邮箱地址:

1
2
git config --global user.name "username"
git config --global user.email "email"