基本概念
版本控制系统
版本控制系统(version control system),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。 用的比较多的如 svn,git 等。
所有的版本控制系统,其实只能跟踪文本文件的改动,比如 TXT 文件,网页,以及所有的程序代码等等,Git 也不例外。版本控制系统可以告诉你每次的改动,比如在第 5 行加了一个单词“Linux”,在第 8 行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从 100KB 改成了 120KB,但到底改了啥,版本控制系统不知道,也没法知道。
Git 是目前世界上最先进的分布式版本控制系统。
分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。
既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?
比如说自己在电脑上改了文件 A,其他人也在电脑上改了文件 A,这时,两人之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
Git 工作原理
工作流程:
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
工作区:就是你在电脑上看到的目录(.git 隐藏目录版本库除外)。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是 stage(暂存区),还有 Git 为我们自动创建了第一个分支 master,以及指向 master 的一个指针 HEAD。
Remote:gitee 或者 github 远程仓库
下载与安装
https://git-scm.com/download/win
安装完成后,右键查看:
操作
基本操作
- 配置全局的 config 信息
一般来说,安装好 git 后,我们都会配置一个全局的 config 信息,就像这样:
git config --global user.name "username" // 配置全局用户名,如 Github 上注册的用户名
git config --global user.email "username@email.com" // 配置全局邮箱,如 Github 上配置的邮箱
- 创建版本库
git init
告诉你是一个空的仓库(empty Git repository),当前目录下多了一个.git 的目录,这个目录是 Git 来跟踪管理版本库的
第一步:用命令 git add 告诉 Git,把文件添加到仓库
git add readme.txt
第二步:用命令 git commit 告诉 Git,把文件提交到仓库
git commit -m "wrote a readme file"
简单解释一下 git commit 命令,-m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。
git commit 命令执行成功后会告诉你
1 file changed:1 个文件被改动(我们新添加的 readme.txt 文件);
2 insertions:插入了两行内容(readme.txt 有两行内容)。
为什么 Git 添加文件需要 add,commit 一共两步呢?因为 commit 可以一次提交很多文件,所以你可以多次 add 不同的文件,比如:
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."
- 查看项目状态
git status
- 查看历史记录
git log
git log 命令显示从最近到最远的显示日志,我们可以看到最近的提交
- 添加远程库
git remote add origin git@github.com:michaelliao/learngit.git
origin 是远程库的名字,这是 Git 默认的叫法,也可以改成别的
在使用远程仓库之前,先注册 github 账号,由于你的本地 Git 仓库和 github 仓库之间的传输是通过 SSH 加密的,所以需要一点设置。点击跳转
- 查看 remote 数量
git remote -v
- 删除 remote 其中某一个
git remote remove <name>
git remote rm <name>
- 把本地库的所有内容推送到远程库上
git push -u origin master
把本地库的内容推送到远程,用 git push 命令,实际上是把当前分支 master 推送到远程。
由于远程库是空的,我们第一次推送 master 分支时,加上了-u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令
后面就可以通过如下命令:
git push origin master
远程仓库配置
第一步:创建 SSH Key。在用户主目录下,看看有没有.ssh 目录,如果有,再看看这个目录下有没有 id_rsa 和 id_rsa.pub 这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:
ssh-keygen -t rsa –C “youremail@example.com”
id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥,可以放心地告诉任何人。
第二步:登录 github,打开” settings”中的 SSH Keys 页面,然后点击“Add SSH Key”,填上任意 title,在 Key 文本框里黏贴 id_rsa.pub 文件的内容。
从 github/gitee 上克隆、修改和更新项目
- 本地初始化
git init
- 将项目从 github/gitee 或者服务器上克隆下来
git clone url
- 未修改项目前,查看项目状态
git status
- 将文件修改提交到本地暂存区
命令:git add file,file 为修改文件名
#以新增READ.md为例
git add README.md
#或者全部添加来看
git add -A
注:每次修改后的文件,都必须添加到本地暂存区后,才能更新到项目上
- 将项目更新到 github 或服务器
git push
如果下次还要更新项目,直接 git pull 即可,因为本地空间和服务器或 github 的通道通过 git clone 已经建立
参考:
廖雪峰的官方网站
https://zhuanlan.zhihu.com/p/30044692