首页 » 运维之道 » 代码管理 » 正文

git 基础架构搭建

一、初识

SVN与GIT的区别:(svn是基于集中式的,git 是基于分布式的)

集中式和分布式的区别:

集中式版本控制系统:版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作

mark

分布式版本控制系统:分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

mark

为了方便“交换”大家的修改,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但没有它大家也一样干活,只是交换修改不方便而已。

分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

二、单机上使用git

yum install -y git

mkdir /data/gitroot

cd /data/gitroot

git init   //初始化仓库

echo -e “123\naaa\n456\nbbb” > 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

git log     //查看所有提交记录

[root@zhdy-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        //一行显示

[root@zhdy-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 删除文件
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

mark

mark

  • 添加key:右上角点自己头像,选择settings,左侧选择SSH and GPG keys

mark

  • 左侧点New SSH key,把linux机器上的~/.ssh/id_rsa.pub内容粘贴到这里

linux上面操作: ssh-keygen //生成一个密钥

mark

  • 把本地仓库推送到远程仓库 git remote add origin git@github.com:aminglinux/studygit.git //这一步是在远程创建一个新的仓库studygit,名字尽量和本地的一致

linux端 做些操作:(根据提示,去操作)

mark

[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 git@github.com: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

来个小练手:

[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

mark

四、克隆远程仓库

在早些时间,创建了一个其它仓库,今天我就来把它克隆到本地。

找到自己在git上的仓库。

mark

[root@zhdy-01 zzz]# git clone git@github.com: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开放的!

[root@zhdy-01 zzz]# ls
zhdy
[root@zhdy-01 zzz]# cd zhdy/
[root@zhdy-01 zhdy]# ls
h170605.md  h170606.md  README.md

当然我们也可以在这个仓库去创建些文件并上传到远端。

[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

mark

如果有份资料在服务端其它同事更新了,我们的客户端怎么去更新呢?

git pull

即可!!

赞 (1)

发表评论