Git的基本知识及应用
安装
方法一:在windows点击安装
方法二:安装 GitHub Desktop
配置
# 查看配置
$ git config --list
$ git config --list --show-origin
# 配置用户信息
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以不带
--global
文件状态
工作目录下文件的两种状态:已跟踪或未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录。
- Untracked files 未跟踪文件
- Changes to be commited 暂存文件
- Changes not staged for commit 已跟踪文件内容发生变化,但没有放入暂存区
基础
克隆现有的仓库
$ git clone https://github.com/libgit2/libgit2
基础操作
# 检查当前文件状态
$ git status
# 跟踪文件
$ git add <file>
$ git add . //跟踪所有,即将所有文件加入暂存区
# 提交文件
$ git commit //提交暂存文件
$ git commit -m "说明" //提交并附加说明
$ git commit -a //自动把所有已经跟踪过的文件暂存起来一并提交
# 移除文件
$ git rm <file> //移除跟踪并删除文件
$ git rm -f <file> //移除暂存
$ git rm --cached <file> //移除跟踪但不删除文件
# 查看历史提交记录
$ git log
$ git log -p //展开提交的内容差异
$ git log -p -2 //最近的两次更新
$ git log --stat //显示简要的增改行数统计
# 查看已暂存和未暂存的更新
$ git diff //查看尚未暂存的文件更新内容
$ git diff --cached //查看已经暂存起来的文件和上次提交时的快照之间的差异
# 撤销操作
$ git commit --amend //修改最后一次提交
$ git reset HEAD <file> //取消某个文件的暂存
$ git checkout -- <file> //取消对文件的修改
# 文件重命名
$ git mv <file_from> <file_to>
忽略某些文件
创建一个名为 .gitignore 的文件,列出要忽略的文件模式
*.a //忽略所有 .a 结尾的文件
build/ //忽略 build/ 目录下的所有文件
远程操作
# 查看远程仓库
$ git remote //列出远程库的简短名字
$ git remote -v //显示对应的克隆地址
$ git remote show [remote-name] //查看指定远程仓库信息
# 添加远程仓库
$ git remote add [shortname] [url] //shortname通常为origin
# 从远程抓取代码到本地
$ git fetch [remote-name] //拉取到当前工作分支 不自动合并
$ git pull [remote-name] [branch-name] //下载代码并合并
# 上传代码到远程仓库
$ git push [remote-name] [branch-name]
$ git push origin master //举例 把本地的master分支推送到origin服务器上
# 远程仓库重命名
$ git remote rename [old-remote-name] [new-remote-name]
# 移除远程仓库
$ git remote rm [remote-name]
标签操作
# 列显已有的标签
$ git tag
$ git tag -l 'v1.4.2.*' //用特定搜索模式列出符合条件的标签
# 新建标签
$ git tag [tag-name] //保存着对应提交对象的校验和信息的文件
$ git tag -a [tag-name] //含附注类型的 独立对象 有自身的校验和信息
$ git tag -s [tag-name] //有私钥时 签署标签
$ git tag -v [tag-name] //验证标签 此命令会调用 GPG 来验证签名 有签署者的公钥存放在 keyring 时才能验证
# 查看标签版本信息
$ git show <tag>
分支操作
# 创建分支
$ git branch [branch-name]
$ git checkout -b [branch-name] //新建并切换到该分支
# 切换分支
$ git checkout [branch-name]
# 删除分支
$ git branch -d [branch-name]
# 合并分支
$ git merge [branch-name]
# 查看分支清单
$ git branch
$ git branch -a //查看所有分支
$ git branch -v //查看各个分支最后一个提交对象的信息
$ git branch --merged //筛选出已经与当前分支合并的分支
$ git branch --no-merged //筛选出尚未与当前分支合并的分支
# 推送本地分支
$ git push [remote-name] [branch-name] //remote-name一般为origin
# 跟踪远程分支
$ git checkout --track [remote-name]/[branch-name]
# 删除本地分支
$ git branch -d <branch>
# 删除远程分支
$ git push [remote-name] --delete [branch-name]
$ git push [remote-name] :[branch-name]
# 修改分支名称
git branch -m [old-branch] [new-branch]
git push --delete origin [old-branch]
git push origin [new-branch]
git branch --set-upstream-to origin/[new-branch]
服务器上的Git
本地协议
远程仓库在该协议中的就是硬盘上的另一个目录。这常见于团队每一个成员都对一个共享的文件系统(例如 NFS)拥有访问权。如果你使用一个共享的文件系统,就可以在一个本地文件系统中克隆仓库,推送和获取。
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
$ git remote add local_proj /opt/git/project.git //添加一个本地仓库作为现有 Git 项目的远程仓库
HTTP/S 协议
$ git clone http://example.com/gitproject.git
在使用git开发时,需要在每次同步操作输入用户名和密码。为了省去每次都输入密码的重复操作,我们可以在本地新建一个文件,来存储你的用户名和密码,只需要在第一次clone输入用户名和密码,这些信息就被存储起来,以后就可以自动读取
git config --global credential.helper
SSH 协议
SSH 是同时支持读写操作的网络协议。SSH 同时也是一个验证授权的网络协议
$ git clone ssh://user@server/project.git
$ git clone user@server:project.git //默认ssh
大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权。 下面是生成SSH公钥
$ cd ~/.ssh //首先确认是否已经有一个公钥 SSH公钥默认储存在~/.ssh。若有,`.pub` 后缀的文件就是公钥,另一个文件则是密钥
$ ssh-keygen //若没有-->生成ssh公钥 它会让你重复一个密码两次,如果不想在使用公钥的时候输入密码,可以留空
$ cat ~/.ssh/id_rsa.pub //获取公钥 复制 `.pub` 文件的内容然后给管理员。如果你用github,就创建一个ssh公钥并把内容复制过去就可以了
Git托管服务
如果不想经历自己架设 Git 服务器的麻烦,网络上有几个专业的仓库托管服务可供选择。
目前比较常用的有github、gitee、coding
环境变量配置
windows环境下git的环境变量配置( 可执行文件不需要配置 绿色安装版才需要)
- 从官网下载git软件 .msi格式 安装
- 找到你的git的安装目录,复制
- 控制面板——系统——高级系统设置——环境变量——path——编辑 把软件安装包的路径复制进去:
- 你的git的安装目录\bin;
- 你的git安装目录\libexec\git-core;
开发工具配置
以vscode为例,配置之后就可以直接在终端使用git命令了
- 设置—搜索user.setting—对setting.json进行编辑
- 添加“git.path”:"Git实际安装地址"