git 基础架构搭建

一、初识

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

集中式和分布式的区别:

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

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

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

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

二、单机上使用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     //查看所有提交记录

[[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 删除文件
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端 做些操作:(根据提示,去操作)

[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

来个小练手:

[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上的仓库。

[[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开放的!

[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

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

git pull

即可!!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴柯的运维笔记

Linux系统下搭建LNMP环境

“每个理性的IT人士都置顶了吴柯的运维笔记” LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。 Linux是一类Unix计...

54760
来自专栏LanceToBigData

Git(一)之基本操作详解

前言   在这段时间的工作中一直都是用Git作为版本控制,只是知道简单的几个命令,没有去了解它的内部原理。所以周末有时间来系统学习。   现在的公司基本上都是用...

207100
来自专栏IMWeb前端团队

From svn to git 你要知道的东西

最近团队项目准备从svn往git迁,于是做了一些相关的了解,发现svn跟git还是有很多不一样的,下面写了一些个人理解。 核心区别 分布式 vs 集中式 git...

20250
来自专栏小狼的世界

Linux下SVN的一些使用方法总结

近期的一个项目不方便 Check 到本地,需要在测试服务器上进行编写和测试,所以就研究了一下如何在 Linux 命令行下使用 SVN。

13040
来自专栏LIN_ZONE

Linux各目录及每个目录的详细介绍(转载)

Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图:

13920
来自专栏企鹅号快讯

Python包

Python包 包用于将一组模块归并到一个目录中,此目录即为包,目录名即为报名 包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python应用执行...

494100
来自专栏代码世界

Git的常用命令

git clone 命令默认的只会建立master分支,如果你想clone指定的某一远程分支(如:dev)的话,可以如下:

11520
来自专栏阮一峰的网络日志

Content Security Policy 入门教程

跨域脚本攻击 XSS 是最常见、危害最大的网页安全漏洞。 ? 为了防止它们,要采取很多编程措施,非常麻烦。很多人提出,能不能根本上解决问题,浏览器自动禁止外部注...

33550
来自专栏静默虚空的博客

分布式版本控制系统 Git 教程

简介 Git 是什么? Git 是一个开源的分布式版本控制系统。 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统...

25760
来自专栏FreeBuf

让木马病毒DNS数据传输成为历史:看我如何让XShell病毒失效

基础词汇解释: DnsA记录传输: 利用dns解析过程,在请求解析的域名中包含需外传的数据,如xxxxxx.hack.com。则最终hack.com的dns服务...

25370

扫码关注云+社区

领取腾讯云代金券