什么是 git?
分布式的版本管理与协作系统.
安装 Git
下载安装就不详说了.
安装之后, 右键会出现 Git bush here
, 在当前文件夹打开 bash
, 是一个小型的 linux shell, 可以在上面进行关于 git 的操作, 他自带 mingw (编译运行 c/c++的环境).
打开 powershell 之后输入git
就会出来它的提示了, 要是没有的话, 就是path没有配置成功, 需要重新配置一下了.
Git 的工作要素
版本: 版本管理器当然要有版本, V1.0.0, V1.0.1 等等, 每个版本都有自己独一无二的名字, 是一个 40 位长的 hash 值;
分支: 分支 branch 就是把一系列版本串在一起的东西. 一条分支上有多个(或者 1 个)版本, 主分支叫做 master
, 同样也是默认分支, 代表着版本的开发历程; 一条分支就是一些版本的集合.
HEAD: 是一个指针, 代表着 git 正在使用的版本(不是分支), git 每一次只能看向一个版本;
远程仓库: git 不只是 仅仅在本地, 或者 仅仅在远程 使用. 仓库远程 origin 是大家一起做好的版本存放的地方.
Git 的结构
git 在进行版本控制是通过 4 个部分来实现的: 工作区, 暂存区, 仓库, 远程仓库;
- Workspace:工作区
就是能在电脑里能看到的目录,比如 c:/Code
文件夹就是一个工作区, 每一个git的工作区都是有一个.git
文件夹, 里面保存着版本信息:
- Index / Stage:暂存区
用于存放刚刚经过修改并且没有经行上传的版本, 也是在本地的. 通过 git add .
来把所有工作区内所有文件添加到暂存区
- Repository:仓库区(或本地仓库 / 版本库)
在工作区, 例如c:/Code
有一个隐藏目录.git
这个不是工作区, 而是工作区的版本库 (Repository). 通过git commit -m "message"
来提交版本;
- Remote:远程仓库
是运程存放代码的地方, 相当于你工作区的备份 ,例如 github
, gitlab
. 通过git push
提交到远程仓库
当然在提交到远程仓库之前, 你要先告诉git你的远程仓库在哪, 下文会解决这个问题的.
Git的用法
根据流程:
- 你要做开发, 当然最先需要一个仓库 repo, 用来存放你现在正在做的工作.
- 切换到你正在工作的文件夹里,
git init
把这个文件夹注册成 git 的一个仓库, 你想有多少个 git 仓库都行, 但是当父文件夹已经注册成为仓库之后, 子文件夹就不能成为仓库了 (不允许套娃), 有时候git会因为这样的套娃而报错的.git init
可以注册一个空文件夹或者已经有东西的文件夹.
如何判断是否成为了 git 仓库? 看文件夹下是否有
.git
文件.
- 有了仓库之后就可以新建一个分支 branch;
- 在注册成为一个git仓库之后自带master分支. 没有特殊要求的话, 默认分支就可以啦, 从今天起, 你就是我的 master (默认分支)了. 但是要是不希望直接在 master 上工作呢? 用
git branch ${branch name}
来创建分支, 切换分支的时候用git checkout ${branch name}
, 查看有什么分支:git branch
- 有了分支之后就可以提交版本了;
- 一开始这个版本里是空荡荡的, 因为你还没有添加东西进去, git 还不知道有哪些东西是你想提交成为版本的. 使用
git add .
来把整个文件夹里的全部东西都放进去成为版本(成为版本之前, 被称为暂存区)! 当然你会有不想放进去的文件, 比如自动生成的文件, 还有自己做测试的文件, vscode 的设置文件, 新建一个.gitignore
文件来排除掉他们, 在下面会较详细的讲解.gitignore
. - 在最后, 提交这个版本就ok啦,
git commit -m "${message}"
message是本次提交要写的信息, 是这个版本的一个备注, 写这个是一个好习惯, 方便以后遇到问题的时候查找原来的版本. - 但是事情还没有结束, 你想把自己的代码放到 github 上, 便于多人共同编辑,
bash # 添加远程仓库, 插值表达式"${}"要替换成你自己的信息. git remote add origin git@github.com:${用户名}/${仓库名}.git # 本地分支推到远程仓库 (第一次推送) git push -u origin master # 以后每次推送都可以只写 git push
- 一切就ok啦;
根据操作:
图示 git 常用的几个指令:
![613604c3b2fdf6cdc93f78b533c3c7dd.png](https://i-blog.csdnimg.cn/blog_migrate/2eef5632fc10494ceffd0d981ab087fb.png)
Basic operation
# 新建代码库 #
# 在当前目录初始化一个Git repository
$ git init
# 新建一个目录,将其初始化为Git Repository
$ git init [project-name]
# clone 一个 repository 和它的整个代码历史
$ git clone [url]
# 把文件添加到暂存区
$ git add readme.txt
# 把文件从 暂存区 t到 本地仓库 message 是本次提交的文件的说明
$ git commit -m ${message}
# 配置 #
# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件
$ git config -e [--global]
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
# 设置 git 代理
# 会显著增加git速度, 比设置映射简单的多
$ git config --global http.proxy 'socks5://127.0.0.1:1080'
$ git config --global https.proxy 'socks5://127.0.0.1:1080'
# 增加/删除文件 #
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 创建SSH公钥 / 私钥 #
# 创建SSH KEY
$ ssh-keygen -t rsa -C "youremail@example.com"
# 此时公钥私钥会创建在c:user.ssh 文件夹下
# 私钥自己留好, 公钥粘贴在 github 上就行
git 配置文件:
在 c:user.gitconfig
中, 配置好滴文件如下:
<!-- ${} 是插值表达式, 需要换成你自己的信息 -->
[user]
name = ${username}
email = ${userEmailAddr}
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
<!-- 代理, 不需要就不用配置 -->
[http]
proxy = socks5://127.0.0.1:1080
[https]
proxy = socks5://127.0.0.1:1080
Tips
github 的 GUI 界面非常好用, 非常爽, 前期用不习惯的时候可以先用这个过度一下, 了解了git的整个流程之后再去用命令行就会习惯啦.
.gitIgnore
###################
# .gitignore 规则 #
###################
# 以'#' 开始的行为注释, 一行写一个规则
# 忽略掉所有文件名是 test.txt 的文件.
test.txt
# 忽略build文件夹
build
# 忽略所有生成的备份文件
.~
# 忽略所有.o 和 .a文件.
*.[oa]
# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a
# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO
# 忽略 build/ 文件夹下的所有文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
###########################################################################
一般常用的排除文件/文件夹为:
build
# java 自动生成的编译文件夹
bin/
# vscode 的配置文件夹
.vscode/
# Log Files
*.log
删除远程仓库上的文件
> 项目开发初期由于.gitignore 文件配置不正确, 很有可能导致某些不需要的目录上传到 git 远程仓库上了,这样会导致每个开发者提交的时候这些文件每次都会不同。除了一开始提交的时候注意配置好 .gitignore 文件外,我们也需要了解下出现这种问题后的解决办法。
预览将要删除的文件: git rm -r -n --cached <name>
文件/文件夹名称, 加上 -n 这个参数,执行命令时,是不会删除任何文件,而是展示此命令要删除的文件列表预览.
确定无误后删除文件: git rm -r --cached
文件/文件夹名称.
提交到本地: git commit -m "提交说明"
推送到远程服务器 git push origin master
Reference:
- 常用 Git 命令清单 作者:阮一峰 2015 年 12 月 9 日
- Git 教程 (详细): https://www.liaoxuefeng.com/wiki/896043488029600
- git 配置清单: https://blog.csdn.net/joe_007/article/details/7276195
- Git 游乐场 强烈推荐这个, 非常好用的入门教程.