一、初识
SVN与GIT的区别:(svn是基于集中式的,git 是基于分布式的)
集中式和分布式的区别:
集中式版本控制系统:版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作。
分布式版本控制系统:分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
为了方便“交换”大家的修改,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但没有它大家也一样干活,只是交换修改不方便而已。
分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
二、单机上使用git
代码语言:javascript复制yum install -y git
mkdir /data/gitroot
cd /data/gitroot
git init //初始化仓库
echo -e “123naaan456nbbb” > 1.txt //创建一个新文件
git add 1.txt //把1.txt添加到仓库
git commit -m “add new file 1.txt” //add完了必须要commit才算真正把文件提交到git仓库里
再次更改1.txt
git status //查看当前仓库中的状态,比如是否有改动的文件
git diff 1.txt //可以对比1.txt本次修改了什么内容,相比较仓库里面的版本
2.1 版本回退
多更改几次1.txt,然后add,commit
代码语言:javascript复制git log //查看所有提交记录
[[email protected]01 sbin]# git log
commit 088ab9f30e6fc5a3c377678e54c20a50fd3f5ad3
Author: zhdy <714997134@qq.com>
Date: Tue Oct 24 14:40:28 2017 0800
add 1.txt
commit e8e8140493a387a145f6f406ef68b459fd35db93
Author: zhdy <714997134@qq.com>
Date: Tue Oct 24 14:30:58 2017 0800
add 1.txt agin
commit 9cbe55f519f3d2fb36c3518b4d369109c2be2787
Author: zhdy <714997134@qq.com>
Date: Tue Oct 24 14:28:08 2017 0800
add 1.txt
如上的邮箱和用户名是在 /root/.gitconfig 里面去定义的~
git log --pretty=oneline //一行显示
[[email protected]01 sbin]# git log --pretty=oneline
088ab9f30e6fc5a3c377678e54c20a50fd3f5ad3 add 1.txt
e8e8140493a387a145f6f406ef68b459fd35db93 add 1.txt agin
9cbe55f519f3d2fb36c3518b4d369109c2be2787 add 1.txt
从下往上是最早到最新的各个版本!
git reset --hard f7c8e9 //回退版本,其中后面跟的字符串是简写
撤销修改
rm -f 1.txt //不小心删除了1.txt
git checkout -- 1.txt //恢复1.txt 如果1.txt文件修改,add后但没有commit,再想回退到上一次提交的状态,可以使
git reset HEAD 1.txt 再执行 git checkout -- 1.txt
git reflog //查看所有历史版本
2.2 删除文件
代码语言:javascript复制git rm 1.txt
git commit -m "rm 1.txt"
再次恢复下:
git log --pretty=oneline
git reset --hard b71c259f0
ls //就可以看到删除的文件了
三、远程仓库搭建配置
- 首先到 https://github.com 注册一个账号,创建自己的git,点repositories 再点new
- 名字自定义,比如叫studygit 选择public 点 create repository
- 添加key:右上角点自己头像,选择settings,左侧选择SSH and GPG keys
- 左侧点New SSH key,把linux机器上的~/.ssh/id_rsa.pub内容粘贴到这里
linux上面操作: ssh-keygen //生成一个密钥
- 把本地仓库推送到远程仓库 git remote add origin [email protected]:aminglinux/studygit.git //这一步是在远程创建一个新的仓库studygit,名字尽量和本地的一致
linux端 做些操作:(根据提示,去操作)
代码语言:javascript复制[root@zhdy-01 gitroot]# cd /home
[root@zhdy-01 home]# mkdir zhdya
[root@zhdy-01 home]# ls
mysql php-fpm zhdy zhdya
[root@zhdy-01 home]# cd zhdya/
[root@zhdy-01 zhdya]# ls
[root@zhdy-01 zhdya]# echo "# zhdya" >> README.md
[root@zhdy-01 zhdya]# git init
初始化空的 Git 版本库于 /home/zhdya/.git/
[root@zhdy-01 zhdya]# git add README.md
[root@zhdy-01 zhdya]# git commit -m "add README.md"
[master(根提交) 68cb217] add README.md
1 file changed, 1 insertion( )
create mode 100644 README.md
[root@zhdy-01 zhdya]# git remote add origin [email protected]:zhangduanya/zhdya.git
[root@zhdy-01 zhdya]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:zhangduanya/zhdya.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
- git push -u origin master //然后把本地的studygit仓库推送到远程的studygit 下一次再推送,就可以直接 git push
来个小练手:
代码语言:javascript复制[root@zhdy-01 zhdya]# vim zhdya.txt
[root@zhdy-01 zhdya]# git add zhdya.txt
[root@zhdy-01 zhdya]# git commit -m "add zhdya.txt"
[master 275c8e9] add zhdya.txt
1 file changed, 1 insertion( )
create mode 100644 zhdya.txt
[root@zhdy-01 zhdya]# git push
Counting objects: 4, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 327 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:zhangduanya/zhdya.git
68cb217..275c8e9 master -> master
四、克隆远程仓库
在早些时间,创建了一个其它仓库,今天我就来把它克隆到本地。
找到自己在git上的仓库。
代码语言:javascript复制[[email protected]-01 zzz]# git clone [email protected]:zhangduanya/zhdy.git
正克隆到 'zhdy'...
remote: Counting objects: 17, done.
remote: Total 17 (delta 0), reused 0 (delta 0), pack-reused 17
接收对象中: 100% (17/17), done.
处理 delta 中: 100% (2/2), done.
当然,如果你没有上传公钥到服务器其实也是可以克隆的,因为我这边设置的仓库是public开放的!
代码语言:javascript复制[root@zhdy-01 zzz]# ls
zhdy
[root@zhdy-01 zzz]# cd zhdy/
[root@zhdy-01 zhdy]# ls
h170605.md h170606.md README.md
当然我们也可以在这个仓库去创建些文件并上传到远端。
代码语言:javascript复制[root@zhdy-01 zhdy]# vim today.txt
[root@zhdy-01 zhdy]# git add today.txt
[root@zhdy-01 zhdy]# git commit -m "add today.txt"
[master 5dad81e] add today.txt
1 file changed, 1 insertion( )
create mode 100644 today.txt
[root@zhdy-01 zhdy]# git push
Counting objects: 4, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 350 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To git@github.com:zhangduanya/zhdy.git
15d0e5f..5dad81e master -> master
如果有份资料在服务端其它同事更新了,我们的客户端怎么去更新呢?
代码语言:javascript复制git pull
即可!!