版本控制系统(version control system)是记录一个或若干文件内容变化,以便未来查阅特定版本修订状况的系统。版本控制系统不只能够应用于软件源代码的文本文件,并且能够对任何类型的文件进行版本控制,普遍应用的如svn,git等linux
集中式的版本控制系统,只有一个中央数据仓库,若是中央数据仓库挂了或者不可访问,全部的使用者没法使用SVN,没法进行提交或备份文件git
分布式的版本控制系统,在每一个使用者电脑上就有完整的数据仓库,没有网络依然可使用。为了习惯及团队协做,会将本地数据同步到Git服务器或GitHub等代码仓库github
Git是分布式的版本控制系统,咱们只要有一个原始Git版本仓库,就能让其余主机克隆这个原始版本仓库,从而使一个Git版本仓库能够被同时分布到不一样主机上,而且每台主机的版本库都是同样的,没有主次之分web
这极大的保证了数据安全性,并使得用户可以自主选择向Git服务器推送文件sql
官网:https://git-scm.com 数据库
1 [root@gitlab ~]# rpm -qa centos-release 2 centos-release-7-4.1708.el7.centos.x86_64 3 [root@gitlab ~]# uname -a 4 Linux gitlab 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 5 [root@gitlab ~]# getenforce 6 Disabled 7 [root@gitlab ~]# systemctl status firewalld.service 8 ● firewalld.service - firewalld - dynamic firewall daemon 9 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) 10 Active: inactive (dead) 11 Docs: man:firewalld(1)
1 [root@gitlab ~]# rpm -qa git # Centos系统自带git软件,故无需安装 2 git-1.8.3.1-11.el7.x86_64 3 4 yum install -y git #没有则进行安装 apache
1 git config --global user.name "banana" #配置git使用用户 2 git config --global user.email "XXXX@XX.com" #配置git使用邮箱 3 git config --global color.ui true #语法高亮,显示加颜色 4 git config --list #查看全局配置
1 [root@gitlab ~]# cat .gitconfig #上述操做即对配置文件进行的编辑 2 [user] 3 name = banana 4 email = XXXX@XX.com 5 [color] 6 ui = true
用来存放全部笔记代码等,其中目录下具有隐藏目录,存放历史记录和备份(密文存在)vim
1 mkdir git_data #建立并进入本地工做目录 2 cd git_data/ 3 git init #初始化工做目录
1 [root@gitlab git_data]# git status #查看git工做区的状态信息 2 # On branch master ->当前处于主分支 3 # Initial commit ->最初的提交 4 nothing to commit (create/copy files and use "git add" to track) ->无文件要提交
01.建立文件windows
1 touch README centos
02.查看git状态
1 [root@gitlab git_data]# git status 2 # On branch master ->位于分支 master 3 # Untracked files: ->未跟踪的文件 4 # (use "git add <file>..." to include in what will be committed) ->使用"git add <file>."以包含要提交的内容 5 # README 6 nothing added to commit but untracked files present (use "git add" to track) ->提交为空,可是存在还没有跟踪的文件(使用"git add"创建跟踪) 注意:git默认不提交空目录
03.添加到暂存区域[add后接*/file]
1 git add README
04.提交暂存区域文件至git本地仓库
1 git commit -m 'first commit' 2 # -m后接注释信息,内容关于本次提交的说明,方便本身或他人查看
04.1简便方法
1 git commit -a -m "注释信息" 2 #若不加-m添加说明信息,后面会自动进入编辑模式,仍需添加说明的信息。 3 #-a表示直接添加文件(即本地仓库的原有文件后来通过改变时,咱们就可使用-a直接在仓库里面进行修改)
05.再次查看git状态
1 [root@gitlab git_data]# git status 2 # On branch master ->位于分支master 3 nothing to commit, working directory clean ->无文件要提交,干净的工做区
1 [root@gitlab git_data]# tree .git/ #存储全部历史版本信息即配置文件,是经过git init生成的目录 2 .git/ 3 ├── branches 4 ├── config 5 ├── description 6 ├── HEAD 7 ├── hooks 8 │ ├── applypatch-msg.sample 9 │ ├── commit-msg.sample 10 │ ├── post-update.sample 11 │ ├── pre-applypatch.sample 12 │ ├── pre-commit.sample 13 │ ├── prepare-commit-msg.sample 14 │ ├── pre-push.sample 15 │ ├── pre-rebase.sample 16 │ └── update.sample 17 ├── index 18 ├── info 19 │ └── exclude 20 ├── objects 21 │ ├── e6 22 │ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391 #服务器只存储加密文件信息 23 │ ├── info 24 │ └── pack 25 └── refs 26 ├── heads 27 └── tags
总结提交数据/文件分为两步骤三区域:
在工做目录git_data建立"README"数据文件;使用git add将文件提交到暂存区域(临时存放可撤销操做);将暂存区域的文件统一提交到Git仓库中
咱们能够简单的把工做目录理解成是一个被Git服务程序管理的目录,Git会时刻追踪目录内文件的改动。在安装好Git服务程序后,默认就会建立一个master分支,可供咱们直接提交数据
01. 未添加到暂存区的数据->直接使用rm命令删除便可
02.已添加到暂存区的数据
1 git rm --cached database 2 #将文件从git暂存区域的追踪列表移除,并不删除当前工做目录内的数据文件->只删除缓存 3 git rm -f database 4 #将文件数据从git暂存区和工做目录一块儿删除->永久删除
01.未添加到暂存区的数据->直接mv/rename更名便可
02.已添加到暂存区数据
1 git mv README NOTICE # README修改前/NOTICE修改后;最后进行提交git仓库 2 注意:也可mv修更名称→删除git仓库的文件快照git rm '*.txt'→将新的文件添加进去→提交git仓库
1 git log #查看提交历史记录 2 git log -2 #查看最近几条记录 3 git log -p -1 #-p显示每次提交的内容差别,例如仅查看最近一次差别 4 git log --stat -2 #--stat简要显示数据增改行数(可以看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出全部增减行的概要信息) 5 git log --pretty=oneline #--pretty根据不一样的格式展现提交的历史信息 6 git log --pretty=fuller -2 #以更详细的模式输出提交的历史记录 7 git log --pretty=fomat:"%h %cn" #查看当前全部提交记录的简短SHA-1哈希字串与提交着的姓名
使用format参数来指定具体的输出格式
1 %s 提交说明 2 %cd 提交日期 3 %an 做者的名字 4 %cn 提交者的姓名 5 %ce 提交者的电子邮件 6 %H 提交对象的完整SHA-1哈希字串 7 %h 提交对象的简短SHA-1哈希字串 8 %T 树对象的完整SHA-1哈希字串 9 %t 树对象的简短SHA-1哈希字串 10 %P 父对象的完整SHA-1哈希字串 11 %p 父对象的简短SHA-1哈希字串 12 %ad 做者的修订时间
Git服务程序中有一个版本指针HEAD,当用户申请还原数据时,将HEAD指针指向到某个特定的提交版本。但Git为避免历史记录冲突用SHA-1算出十六进制的哈希字串来区分提交版本。默认HEAD指针会指向到最近一次提交记录,上一个提交版本即HEAD^,上上一个版本即HEAD^^ (HEAD~5简化表示往上数第五个提交版本)
1 git reset --hard HEAD^ #还原历史提交版本上一次 2 git reset --hard 3de15d4 #找到历史还原点的SHA-1值后,就能够还原(值未写全时系统会自动匹配)
即还原到历史数据后想再次撤销更改,可是git log已经找不到这个版本了
1 git reflog #查看将来历史更新点
1 git tag v1.0 #当前提交内容打一个标签(方便快速回滚),每次提交均可以打个tag 2 git tag #查看当前全部的标签 3 git show v1.0 #查看当前1.0版本的详细信息 4 git tag v1.2 -m "version 1.2 release is test" 5 #对当前版本(最新)打标记,用于commit提交以后接着进行打标记(-a指定标签名,-m为说明信息) 6 git tag -d v1.0 #咱们为同一个提交版本设置了两次标签,删除以前的v1.0
1 [root@gitlab git_data]# git reset --hard 0bdf2e7 2 HEAD is now at 0bdf2e7 modified README file 3 [root@gitlab git_data]# git reset --hard V20171130 4 HEAD is now at a66370a add oldboy dir
在实际的项目开发中尽可能保证master分支稳定,仅用于发布新版本,平时不要直接修改里面的数据文件。而开发都在dev分支进行修改,即每一个人从dev分支建立本身我的分支,开发完合并到dev分支,最后合并到master分支
1 git branch linux #建立分支 2 git branch #查看分支状况,当前分支前有*号 3 git checkout linux #Switched to branch 'linux' 切换分支 4 git checkout --<file> #一键还原,直接将git仓库的文件覆盖当前文件[危险]
需求:把linux的工做成果合并到master分支上
1 git checkout master #切换到master分支 2 git merge linux #合并Linux分支至master 3 git branch -d linux #确认合并完成后,建议删除分支
注意:系统默认不编辑空分支
注意:只有同目录同文件同行才会形成合并冲突的状况,只要有一点不一样就可以进行合并
01.准备:
1 cd git_data 2 echo 'master code' >>README 3 git commit -a -m 'this master branch commit' 4 git checkout linux 5 cat README 6 7 echo 'linux code' >>README 8 git commit -a -m 'this linux branch second commit' 9 git checkout master
02.现象:
1 [root@gitlab git_data]# git merge linux 2 Auto-merging README ->自动合并 README 3 CONFLICT (content):Merge conflict in README ->冲突(内容):合并冲突于 READM 4 Automatic merge failed; fix conflicts and then commit the result. 5 ->自动合并失败;修正冲忽然后提交修正的结果
03.解决:人工选择想要的内容,同时修改master和linux分支同文件并提交,最后merge
1 [root@gitlab git_data]# vim README 2 this is linux branch hello world 3 master code 4 linux code 5 [root@gitlab git_data]# git commit -a -m '解决合并冲突' 6 [master 19cb918] 解决合并冲突 7 [root@gitlab git_data]# git merge linux 8 Already up-to-date.
因为以前已合并了linux分支,故如今看到它在列表中,在这个列表中分支名字前没*号的分支一般可用git branch -d删除且不会失去任何东西
1 [root@gitlab git_data]# git branch --no-merged #查看全部包含未合并工做的分支 2 testing 3 [root@gitlab git_data]# git branch -d testing ->删除分支 4 error: The branch 'testing' is not fully merged. ->分支'testing'未进行合并 5 If you are sure you want to delete it, run 'git branch -D testing'. ->若肯定想删除它,即便用-D强制删除
1 软件下载地址https://github.com/git-for-windows/git/releases/tag/v2.10.0.windows.1/Git-2.10.0-64-bit.exe
用于直接管理windows。安装方法默认下一步→桌面右键"Git Bash Here"→命令行
1 shine@shine MINGW64 ~/Desktop 2 $ pwd 3 /c/Users/shine/Desktop 4 shine@shine MINGW64 ~/Desktop 5 $ mkdir git_data 6 shine@shine MINGW64 ~/Desktop 7 $ cd git_data 8 shine@shine MINGW64 ~/Desktop/git_data 9 $ git init 10 Initialized empty Git repository in C:/Users/shine/Desktop/git_data/.git/
01.桌面右键"Git Gui Here"→"打开文件"
02.定义仓库的路径"git_data"→添加用户信息(以下)
1 shine@shine MINGW64 ~/Desktop/git_data 2 $ git config --global user.email "XXXXX@XX.com" 3 shine@shine MINGW64 ~/Desktop/git_data 4 $ git config --global user.name "banana"
03.软件使用
至此,Git的安装使用完成
交互数据:
• 使用GitHub或者码云等公共代码仓库
• 使用GitLab私有仓库
1 官方安装文档 https://about.gitlab.com/installation/ 2 国内软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
1 mkdir -p /application/tools 2 cd /application/tools 3 rz -E #上传gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm 4 5 yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm 6 gitlab-ctl reconfigure #初始化,仅执行一次 7 注意:gitlab默认开机自启,无需修改;开机不自启会致使软件服务没法启动
1 http://10.0.0.63
命令行测试:
1 ps -ef 2 netstat -lntup 3 gitlab-ctl status 4 注意:软件安装默认在/opt下,其数据库为postgresql;当该机器有apache服务需手动关闭
注意:建立密码默认即为8位,生产环境太过简单不可用;帐户默认root
提示:git自己没有任何权限控制,由于git就是为了开发者共同编辑代码而出现,若是没有权限,也会致使信息泄露,因而出现web界面
01.建立新项目
说明:一个目录初始化完就是一个项目,不能再进行修改,只能进行从新建立
02.进行网页编辑
03.经过密钥进行认证
1 ssh-keygen #生成密钥对(一路回车) 2 cat /root/.ssh/id_rsa.pub #查看公钥id_rsa.pub值并添加以下:
04.链接推送测试
1 ssh git@10.0.0.63 2 git clone git@10.0.0.63:root/shine.git 3 ls /root 4 #在哪一个目录克隆的就默认存在于那个目录(想切换到别的目录需提早切换再git clone)
1 cd shine #这里名称与上文相同 2 touch README.md 3 git add README.md 4 git commit -m "add README"
1 [root@gitlab shine]# git push -u origin master #把本地代码向远端仓库(gitlab网页)推送 2 Counting objects: 3, done. 3 Writing objects: 100% (3/3), 208 bytes | 0 bytes/s, done. 4 Total 3 (delta 0), reused 0 (delta 0) 5 To git@10.0.0.63:root/shine.git 6 * [new branch] master -> master 7 Branch master set up to track remote branch master from origin.
刷新页面查看,即下图
05.建立文件测试
1 cd shine/ 2 git pull #将代码拉取到本地(须要在git的工做目录中进行操做)
至此,GitLab的安装使用完成
Github是Git版本库的托管服务,是目前全球最大的公网仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径。不只能够托管各类Git版本仓库,还拥有更美观的Web界面。代码可被任何人克隆,使开发者为开源项贡献代码变得容易
01.注册GitHub
1 浏览器访问github官网https://github.com/
02.填写我的用户名等信息→默认下一步→跳过描述
03.建立项目
说明:建立新的项目以前要现验证邮箱
04.添加git服务器上生成的公钥id_rsa.pub
1 [root@gitlab ~]# cat .ssh/id_rsa.pub
05.准备工做已经完毕→建立一个新的仓库
06.根据如下信息建立代码仓库→推送测试
1 mkdir -p banana 2 cd banana/ 3 echo "# test" >> README.md 4 git init 5 git add README.md 6 git commit -m "first commit" 7 git remote add origin git@github.com:banana-tong/test.git
推送测试
1 [root@gitlab banana]# git push -u origin master 2 The authenticity of host 'github.com (192.30.255.113)' can't be established. 3 RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. 4 RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. 5 Are you sure you want to continue connecting (yes/no)? yes 6 Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts. 7 Counting objects: 3, done. 8 Writing objects: 100% (3/3), 209 bytes | 0 bytes/s, done. 9 Total 3 (delta 0), reused 0 (delta 0) 10 To git@github.com:banana-tong/test.git 11 * [new branch] master -> master 12 Branch master set up to track remote branch master from origin.
07.刷新界面便可以发现推送上去的README.md文件
08.此时可建立新文件→命令行git pull拉取进行测试
至此,GitHub的安装使用完成
1 add #添加文件内容至索引 2 branch #列出、建立或删除分支 3 checkout #检出一个分支或路径到工做区 4 clone #克隆一个版本库到一个新目录 5 commit #记录变动到版本库 6 init #建立一个空的 Git 版本库或从新初始化一个已存在的版本库 7 log #显示提交日志 8 merge #合并两个或更多开发历史 9 mv #移动或重命名一个文件、目录或符号连接 10 pull #获取并合并另外的版本库或一个本地分支 11 push #更新远程引用和相关的对象 12 rm #从工做区和索引中删除文件 13 show #显示各类类型的对象 14 status #显示工做区状态 15 tag #建立、列出、删除或校验一个GPG签名的 tag 对象
下节想跟你们一同探讨一下有关代码上线问题,若有不妥望海涵
此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不完善之处),原创做品容许转载,转载时请务必以超连接形式标明文章原始出处,做者信息和本声明,不然将追究法律责任。http://www.cnblogs.com/bananaaa/
此处感谢神奇海螺为本文章提供的声明