git分布式版本控制系统

参考连接 https://www.cnblogs.com/clsn/p/7929958.html#auto_id_8

               http://blog.51cto.com/superleedo/2058376

1.源码安装git


[root@localhost ~]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@localhost ~]# yum -y install perl-ExtUtils-MakeMaker package
[root@localhost ~]# tar xvf git-2.9.5 -C /usr/src/
[root@localhost ~]# cd /usr/src/git-2.9.5
[root@localhost git-2.9.5]# make configure
GIT_VERSION = 2.9.5
    GEN configure
[root@localhost git-2.9.5]# ./configure --prefix=/usr/local/
[root@localhost git-2.9.5]# make && make install

2.配置git


[root@localhost git-2.9.5]# git config --global user.name "yunjisuan"     #配置git使用用户
[root@localhost git-2.9.5]# git config --global user.email "102110504@qq.com"  #配置git使用邮箱
[root@localhost git-2.9.5]# git config --global color.ui true     #语法高亮
[root@localhost git-2.9.5]# git config --list     查看全局配置
user.name=yunjisuan
user.email=102110504@qq.com
color.ui=true

查看生成的配置文件并添加新模块    #在root下 


[root@localhost ~] # cat .gitconfig 
[user]
    name = clsn
    email = admin@znix.top
[color]
    ui = true

[root@localhost ~]# cat .gitconfig 
[user]
    name = git
    email = 102110504@qq.com
[color]
    ui = true
[recevice]                                                  #添加此模块
    denyCurrentBranch = ignore


获得配置命令的手册  #三种方法


git help <verb>
git <verb> --help
man git-<verb>

3.配置ssh,增加rsa认证


修改配置文件,增加下面内容
[root@localhost ~]#  vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes

重启
[root@localhost ~]#  systemctl restart sshd

生成密钥
[root@localhost ~]# ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:EQ64DYbkwPIrejcX4KMSm1TXGSb0I9+x38LFdEp7DoE root@localhost
The key's randomart image is:
+---[RSA 2048]----+
|o....o. .        |
|.+. +..= .  .    |
|.... =+o=. E + . |
|  ..o.+oo.o + =  |
|  .o.. .So   * . |
|o.. o .   o o +  |
|o= . . .   + . . |
|= o o .     .    |
| o . o           |
+----[SHA256]-----+

重启
[root@localhost ~]#  systemctl restart sshd

4.获取git仓库(初始化仓库)


[root@localhost ~]# mkdir /git_data            #创建目录
[root@localhost ~]# cd /git_data/
[root@localhost git_data]# git init               #初始化目录
Initialized empty Git repository in /git_data/.git/
[root@localhost git_data]# git status         #查看工作区状态
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)

添加并提交文件
[root@localhost git]# touch README
[root@localhost git]# echo "please read first" >> README
[root@localhost git]# git add *
[root@localhost git]# git commit -m "first commit"

 

 

 

5.客户端安装

 

6.git仓库的管理


向git内增加文件:

创建文件
[root@localhost git_data]# touch README
[root@localhost git_data]# ls
README
[root@localhost git_data]# git status
On branch master
Initial commit
Untracked files:
  (use "git add <file>..." to include in what will be committed)
    README
nothing added to commit but untracked files present (use "git add" to track)
[root@localhost git_data]# git add ./*        #添加文件跟踪
[root@localhost git_data]# git status
On branch master
Initial commit
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   README
[root@localhost git_data]# tree .git 
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── objects
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391    #查看隐藏目录下增加了一条文件
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags
10 directories, 15 files
[root@localhost git_data]# git commit -m 'first commit'     #由工作区提交到本地仓库
[master (root-commit) 621be41] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
[root@localhost git_data]# git status   #查看git的状态
On branch master
nothing to commit, working tree clean
[root@localhost git_data]# tree .git/         #提交后的git目录状态
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 54
│   │   └── 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
│   ├── 62
│   │   └── 1be41481cd4dd65b58d1400173228125cdeb5b
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags
15 directories, 21 files
总结说:
git add  * 添加到暂存区域
git commit  提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看


删除git内文件


1) 没有添加到暂存区的数据直接rm删除即可。
2) 已经添加到暂存区数据:
git rm --cached database 
#→将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)
git rm -f database
#→将文件数据从git暂存区和工作目录一起删除

改(重命名数据)


1)没有添加到暂存区的数据直接mv/rename改名即可。
2)已经添加到暂存区数据:
git mv README NOTICE     #这个改的时候工作目录里的文件名字也改了
···查 (查看历史记录)
• git log   #→查看提交历史记录
• git log -2   #→查看最近几条记录
• git log -p -1  #→-p显示每次提交的内容差异,例如仅查看最近一次差异
• git log --stat -2 #→--stat简要显示最近两次,数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息
• git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息
• git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录
• git log --pretty=fomat:"%h %cn"  #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。
使用format参数来指定具体的输出格式
格式            说明
%s              提交说明
%cd             提交日期
%an             作者的名字
%cn             提交者的姓名
%ce             提交者的电子邮件
%H              提交对象的完整SHA-1哈希字串
%h              提交对象的简短SHA-1哈希字串
%T              树对象的完整SHA-1哈希字串
%t              树对象的简短SHA-1哈希字串
%P              父对象的完整SHA-1哈希字串
%p              父对象的简短SHA-1哈希字串
%ad             作者的修订时间

还原历史数据


Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。
git reset --hard   hash :
• git reset --hard HEAD^  #→还原历史提交版本上一次
• git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)

还原未来数据


什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。
git reflog      #→查看未来历史更新点
[root@localhost git_data]# git reflog
b6a6e89 HEAD@{0}: reset: moving to HEAD^
519bf0d HEAD@{1}: commit: third commit
b6a6e89 HEAD@{2}: commit: second commit
621be41 HEAD@{3}: commit (initial): first commit
[root@localhost git_data]# git reset --hard 519b     #在删除third commit情况下返回third commit
HEAD is now at 519bf0d third commit

标签使用


前面回滚使用的是一串字符串,又长又难记。
git tag v1.0   #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
git tag          #→查看当前所有的标签
git show v1.0   #→查看当前1.0版本的详细信息
git tag v1.2 -m "version 1.2 release is test"  #→创建带有说明的标签,-a指定标签名字,-m指定说明文字
git tag -d v1.0   #→我们为同一个提交版本设置了两次标签,删除之前的v1.0
[root@localhost git_data]# git reset --hard HEAD^     #还原历史数据
HEAD is now at b6a6e89 second commit
[root@localhost git_data]# git reset --hard v1.0      #利用标签回滚
HEAD is now at 519bf0d third commit

对比数据


git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改后,再把它提交到仓库就放⼼多了。
git diff README
[root@localhost git_data]# echo 222 >> README 
[root@localhost git_data]# git diff README 
diff --git a/README b/README
index 2bbe845..56c43c1 100644
--- a/README
+++ b/README
@@ -1,2 +1,3 @@
 111
 111
+222

5.分支结构


增加分支


git branch 分支名称


分支切换


[root@localhost git_data]# git branch            #查看分支
  linux
* master
[root@localhost git_data]# git checkout linux    #切换到分支 'linux'
M    README
Switched to branch 'linux'
[root@localhost git_data]# git branch
* linux
  master


在linux分支进行修改


例:就是切换到分支后进行普通操作

echo "clsn in linux" >> README


合并代码


合并Linux上的代码到master上

git merge linux

合并失败解决


模拟冲突,在文件的同一行做不同修改


在master 分支进行修改
[root@gitlab git_data]# cat README 
2017年11月30日
[root@gitlab git_data]# echo  "clsn in master">> README 
[root@gitlab git_data]# git commit -a -m "clsn 2017年11月30日 09点20分 "
[master 7ab71d4] clsn 2017年11月30日 09点20分
 1 file changed, 1 insertion(+)

切换到linux分支
[root@gitlab git_data]# git checkout linux 
[root@gitlab git_data]# cat README 
2017年11月30日
[root@gitlab git_data]# echo "clsn in linux" >> README 
[root@gitlab git_data]# git commit -a -m "2017年11月30日 03"
[linux 20f1a13] 2017年11月30日 03
 1 file changed, 1 insertion(+)

回到master分区,进行合并,出现冲突
[root@gitlab git_data]# git checkout master 
切换到分支 'master'
[root@gitlab git_data]# git merge linux

冲突(内容):合并冲突于 README
自动合并失败,修正冲突然后提交修正的结果。

解决冲突
[root@gitlab git_data]# vim README 
2017年11月30日
clsn in master
clsn in linux
#手工解决冲突
[root@gitlab git_data]# git commit -a -m "2017年11月30日 03"
[master b6a097f] 2017年11月30日 03

删除分支


因为之前已经合并了linux分支,所以现在看到它在列表中。

在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。
git branch --no-merged   #查看所有包含未合并工作的分支

git branch -d  分支name 

 

服务器上的管理命令


       mkdir:                                  //XX (创建一个空目录 XX指目录名)
  pwd:                                 // 显示当前目录的路径。
  git init                                  //把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
  git add XX                           //把xx文件添加到暂存区去。
  git commit –m “XX”             //提交文件 –m 后面的是注释。
  git status                             //查看仓库状态
  git diff  XX                           // 查看XX文件修改了那些内容
  git log                                   //查看历史记录
  git reset  --hard HEAD^       //或者 git reset  --hard HEAD~ 回退到上一个版本(如果想回退到100个版本,使用git reset –hard HEAD~100 )
  cat XX                                 //查看XX文件内容
  git reflog                             //查看历史记录的版本号id
  git checkout -- XX              //把XX文件在工作区的修改全部撤销。
  git rm XX                            //删除XX文件
  git checkout –b dev            //创建dev分支 并切换到dev分支上
  git branch                          //查看当前所有的分支
  git checkout master           // 切换回master分支
  git merge dev                    //在当前的分支上合并dev分支
  git branch –d dev               //删除dev分支
  git branch name                    //创建分支
  git stash                         //把当前的工作隐藏起来 等以后恢复现场后继续工作
  git stash list                     //查看所有被隐藏的文件列表
  git stash apply                    //恢复被隐藏的文件,但是内容不删除
  git stash drop                    //删除文件
  git stash pop                     //恢复文件的同时 也删除文件
  git remote                         //查看远程库的信息
  git remote –v                    //查看远程库的详细信息
  
       git remote add origin https://github.com/--           //关联一个远程库            --为路径
  git push –u origin master                                    //(第一次要用-u 以后不需要)把当前master分支推送到远程库
  git push origin master                                          //Git会把master分支推送到远程库对应的远程分支上
  git clone https://github.com/---                             // 从远程库中克隆           --为路径

       远程仓库相关命令
       检出仓库:       $ git clone 
       查看远程仓库:$ git remote -v
       添加远程仓库:$ git remote add 
       删除远程仓库:$ git remote rm 
       修改远程仓库:$ git remote set-url --push 
       拉取远程仓库:$ git pull 
       推送远程仓库:$ git push 
      *如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:
       $git push origin test:master         // 提交本地test分支作为远程的master分支
       $git push origin test:test              // 提交本地test分支作为远程的test分支

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值