git:版本管理器 1. 安装git 2. 创建版本库(repository) 3. git 结构 4. 添加文件,提交更新 5.常用命令 6. 切换版本 7. 分支:branch 8. 标签:git tag 9. 创建gitee仓库,与本地仓库关联 10. 推送至远程仓库分支 11. 鸣谢

sudo apt-get install git

需要设置这台电脑上的 git 用户名与邮箱

git config --global user.name "xx"
git config --global user.email "xxx@abc.edu.cn"

2. 创建版本库(repository)

git init

当前文件夹下回出现 .git 文件夹,属于隐藏文件。

3. git 结构

工作区(working directory):当前文件夹下所有文件及内容,叫做工作区

暂存区(stage,一般在.git/index/目录下):版本库 .git 中保存的信息包括 stage 和版本记录,每次 git add 就是将工作区的更新传到 stage,git commit 就是将 stage 中的内容上传到版本记录中(默认 master分支)。

HEAD指针:在版本记录中有各个版本,HEAD指向当前版本,HEAD^ 表示之前一个版本,HEAD^^ 表示之前的之前一个版本,HEAD~100 表示 100个之前的版本。

4. 添加文件,提交更新

git add * # 将当前文件夹下的所有文件/文件夹都放进新的版本
git commit -m "Initiated this repository with mNPA1.0"  # -m 后面是备注,今后查看提交的这个版本时,就能看到这个备注

所以每次更改了一个文件以后,都可以如上提交一次更新存档。按我理解,git记录的是相对上个版本的变化,而不是copy每个版本一份(那样太占空间)。所以,有了 git, 可以方便地穿越到过去存档的任何一个版本,然后再穿越回来。

5.常用命令

git status 		# 查看当前版本状态,会显示未提交的更新
git diff file 		# 查看工作区文件 file 与暂存区文件 file 之间的区别
git log 		# 查看提交记录,即查看所有存档版本(版本号),以及备注说明
git reflog  		# 每一次 git 命令的记录
git checkout .      	#(危险!)用暂存区文件 file 代替工作区文件 file
git rm file          	# 从工作区、暂存区删除 file
git rm --cached file 	# 仅从暂存区删除 file
git blame file  	# 查看file的修改史

6. 切换版本

git reset --hard HEAD^ #回退到上一个版本

也可以用 git log, git reflog 得到各个版本的版本号,如果需要退回到版本号“106a.....”,可以命令

git reset --hard 106a #版本回退,git 会自动寻找以"106a"开头的版本号

7. 分支:branch

7.1 创建分支

git branch haha

即创建分支 haha, 注意,是复制当前所有状态,包括工作区、暂存区、版本库,全部复制一份成为分支 haha。

7.2 查看分支

git branch

即可显示当前所有分支

7.3 切换分支

git checkout haha

即可转到 haha 分支

7.4 合并分支

git merge haha

如果有合并冲突,工作区的文件中会出现冲突细节,例如

<?php
<<<<<<< HEAD
echo 3;
=======
echo 5;
>>>>>>> change_site
?>

编辑冲突文件(似乎可以任意编辑),然后添加并提交

git add .
git commit -m "merge change_site"

即完成 merge。再做 git merge change_site,系统会提示“Already up to date”。所以似乎是这样:怎么merge(丢弃什么留下什么)完全是由用户决定,但是git系统会记录merge记录与结构。

7.5 clone 远程仓库指定分支

git clone -b dev https://gitee.com/luyi07/pvpc.git

8. 标签:git tag

添加标签:

git tag v1.1 -m "update v1.1"

9. 创建gitee仓库,与本地仓库关联

前一阵 github 上不去。以往 github 上去了也有点慢。所以用一下国内的 gitee。

https://gitee.com 上,按照提示,创建gitee账户。
在 gitee 网站上按照提示,创建一个新仓库(repository),会有选择Lisence等选项。
给远程仓库添加key
1)生成 key
在自己的终端:ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
-t 是指定 key 的 type,这里是 rsa 类型,-C 是加一个 comment
终端会让你给 key 一个名字,然后输入密码(可以不加密码),然后生成两个文件,*pub的那个里面就是公钥。
2) 远程仓库录入公钥
在网页上进入自己的 repository,然后 settings -> key management -> deployed key,添加一个 key,然后把刚才生成的 *pub 文件里的内容粘贴进网页,即可完成公钥录入。
3)电脑端录入私钥
在终端上,录入私钥:我做的很简单,我把私钥文件重命名为 ~/.ssh/id_rsa,然后
ssh-add
因为这个名字在 ssh-add 的默认查找范围,所以会自动录入。如果不这样做,估计
ssh-add xx
也可以(xx是私钥文件)。
4)测试:
ssh -T git@gitee.com
如果出现如下回应,就是成功了:
Hi luyi07 (DeployKey)! You've successfully authenticated, but GITEE.COM does not provide shell access.
Note: Perhaps the current use is DeployKey.
Note: DeployKey only supports pull/fetch operations
本地仓库关联远程仓库
git remote # 查看远程仓库
git remote add gitee https://gitee.com/luyi07/pvpc.git # 添加远程仓库 pvpc.git
git push -f gitee master # 强制(-f)把本地仓库推送到远程仓库,第一次可以强制,以后慎用 -f 模式
貌似只推当前版本到远程仓库,本地的历史版本并不会全推到远程仓库。
git 手册:http://gitref.justjavac.com/

10. 推送至远程仓库分支

git push origin dev # 如果远程仓库没有分支 dev,就会需要输入远程仓库的用户名+密码,给远程仓库添加分支 dev
免密推送:

luyi@Swagger:~/PVPC$ git config --global credential.helper store

然后下一次push,输入的用户名和密码会被储存,再下一次push就不用输入用户名密码了。

11. 鸣谢

廖雪峰的git教程:
"https://www.liaoxuefeng.com/wiki/896043488029600">https://www.liaoxuefeng.com/wiki/896043488029600
菜鸟教程:
https://www.runoob.com/git/git-server.html