git:版本管理器
1. 安装git
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