git原理以及基本命令学习

1、安装与配置
* 项目版本管理,公司一般管理代码
* 安装命令:yum install git -y
* 查看版本:git --version
* yum remove git 注:执行过程中输入Y,同意卸载
* yum -y install curl-devel expat-devel gettext-devel openssl-devel gcc perl-ExtUtils-MakeMaker
* cd /root/tools/git/tools
* pwd当前路劲
* ll
* rz上传git-2.23.0.tar.gz
* 解压:tar -zxvf git-2.23.0.tar.gz
* cd git-2.23.0
* 先进行编译:make prefix=/usr/local/git all
* 对编译好的目录下进行安装:make prefix=/usr/local/git install
* 配置环境变量:vim /etc/profile
* 最后一行增加:export PATH=/usr/local/git/bin:$PATH
* 让环境变量生效:source /etc/profile
* 生效之后再做一次git版本查询:git --version
B、做一个全局配置-所有项目都会用这个配置
1. git config --global user.name “zhao"注:这些信息配置完无论是那台机器上传,都会是这个人上传的代码
2. git config --global user.email “[email protected]
3. git config --list注:查看配置信息
2、创建仓库在git服务器上创建文件夹,目的存储项目中的代码A、在本地创建cd /opt/git/gitrepo
* 初始化(一个空的git)仓库:git init
* ls -la查看所有文件
* cd .git/
* ll
* pwd
B、直接进入目录下
* git init gitrepo2 注:直接初始化建立一个repo的仓库,如果目录没有回自动建立
* cd gitrepo2
* ls -la
C、远程拉取
* 认识:是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub
* 地址:http://github.com/,现在上面注册账号
* 克隆wxx账号下的youxx仓库,执行命令:git clone https://github.com/wxx/youxx.git
* 克隆要更换仓库名字,执行命令:git clone https://github.com/wxx/youxx.git test
3、git基本用法(add、commit、checkout)A、
* cd /opt/git/gitrepo/
* ll
* ls -la
* 创建文件:touch youxx.log
* 在文件中写入“1”:echo “1” >>youxx.log
* 查看文件内容:cat youxx.log
* 输入git查看用法
* TODO:git流程图:搭建虚拟机,执行git命令
* 工作目录(workspace):gitrepo
* 查看add(index)怎么用命令:git add -h
* 在仓库目录下所有的文件都添加到index区域:git add all/git add./git add youxx.log(最后一个仅仅添加一个文件)
* 查看仓库状态:git status
* (index)删除文件:git rm --cached youxx.log
* (本地仓库,local repository)查看使用方式:git commit -h
* 提交内容到本地仓库:git commit -m"第一次提交youxx.log里面写了1”-a
* 查看展示提交的日志(只能看到commit msg):git log
* 可以看到详细的添加内容:git log -p
* head->master指向第一次提交变更logid即可:git checkout logid(7位或者全部)
* 查看当前git master头部位置:git checkout -
4、git针对文件的三种状态文件状态:modified—index/staged(缓冲)–commited
5、标签tag
* 把log合并一行输出:git log -q或git log --oneline
* 当前1.01阶段代码开发结束,打标签:git tag -a v1.0 -m ‘v1.0代码开发结束’
* 查看命令使用:git tag -h
* 当前tag版本号:git tag
* 把所有标签都列出来:git tag -l
* 输出三行标签,对应的message:git tag -l -n3
* 输出1.0的标签的内容:git tag -v v1.0
* echo “—1.1”>>youxx.txt
* cat youxx.txt
* git add youxx.txt
* git commit -m “对v1.0版本进行修改,里面写了–1.1”-a
* git log -q 或git log --oneline
* git tag -a v1.1 -m “v1.1代码开发结束”
* git tag 或git tag -l -n3
* git tag -v v1.1或者git show v1.1
* git checkout v1.0回溯到历史某个tag
* 如果已经上线的情况下,需要把版本回退带第一个版本拉一个分支然后修改,修改完没问题在把代码合并到原来版本
6、git branch打分支
* 分支代码都是开发中的代码
* master代码都是上线代码
* 创建分支,分支名称叫user:git branch user
* 查看分支的使用:git branch -h
* 把所有分支都展示出来:git branch -a/-l
* 切换分支:git checkout user或者git checkout -b user
* echo “–2.1”>>youxx.txt 注:输入–2.1
* git add youxx.txt
* git commit -m “切换到user分支,修改youxx.log,里面写了–2.1”-a
* git log --oneline
* git checkout master
* git log --oneline
* echo “3” >>youxx.txt
* git add youxx.txt
* git commit -m “第三次提交youxx.log,里面写了3” -a
* git log --oneline
* 日志所有展示:git log --oneline --all
* 日志图形化展示:git log --oneline --all --graph
* echo"4">>youxx.txt
* git add youxx.txt
* git commit -m"第四次提交youxx.log,里面 写了4"-a
* git log --oneline
* git log --oneline --all --graph
7、git 合并分支
* 分支合并:git merge user
* vim youxx.txt
* 给文件加上行的编号:set number
* 只展示master主干上的内容:git log --oneline
* 展示所有内容:git log --oneline --all
* 切换分支:git checkout b944542
* 人工修改分支冲突
* git add youxx.txt
* git commit -m"user分支合并到master分支,youxx.log里面了"-a
* git log --oneline --all --graph
8、远程仓库+多人远程操作目的:本地仓库可能会挂掉如磁盘坏了等等,故本地保存一份,远程保存一份(自己公司在准备台机器 or github)
* push远程仓库(在本地仓库制定远程仓库):git remote add github https://github.com/wyztestdev/youxx.git
* add后面的github是自定义的别名
* 远程仓库的账号:wyztestdev
* 查看命令的使用:git remote -h
* 查看远程仓库的详细地址,fetch远程下载地址,push远程推送地址:git remove或git remote -v
* -u 远程仓库的别名 仓库分支名:git push -u github master
* 本地仓库丢失:rm -rf /opt/git/gitrepo3
* 远程克隆仓库:git clone https:github.com/wxx/youxx.git gitrepo3(重命名的名字)
* git log
* git log --online
* 远程仓库名字变为origin : git remote -v 或 git remote
* echo “5”>>youxx.txt
* git add youxx.txt
* git commit -m"第5次提交youxx.txt文件,里面写了5" -a
* git log --oneline --all
* git tag -a v1.0 -m “v1.0代码开发结束”
* -u远程名 仓库分支名 git push -u origin master
B、多人如何远程合作
* git config --list
* 配置前提:
1. github官方网站注册账号并登录,然后建立github public仓库,先建一个gitrepo4空仓库
2. github要开启免密码让Linux执行git pull/git push,具体操作如下:
* a.10.165+10.118linux机器上执行命令:ssh-keygen -t rsa -C “[email protected]”:-C指向其中某一个人
* b.10.165+10.118linux机器上执行命令:cat /root/.ssh/id_rsa.pub:查看公钥的内容
* c.登录https://github.com/settings/keys,在点击SSH and GPG keys
* d.输入title,然后把b步骤内容添加到key输入框内
* e.10.165+10.168linux机器上执行命令:ssh -T [email protected]
* 进入目录可查看公钥cd /root/.ssh/
* f.如果遇到如下错误:(gnome-ssh-ashpass:6955):Gtk-WARNING**“cannot open display:
* 解决方法:linux机器执行命令:unset SSH_ASKPASS
模拟zhangsan:
* git clone https://github.com/wxx/gitrepo4.git#克隆远程仓库
* cd gitrepo4 && touch youxx.txt
* echo “zhangsan” >> youxx.txt
* git add youxx.txt
* git commit -m “zhangsan第一次提交youxx.txt文件,里面写了zhangsan”-a
* git remote -v 注:得到默认值是https
* git remote rm origin#删除
* git remote -v
* git remote add origin [email protected]:wxx/gitrepo.git #复制hub上的SSH格式地址
* git push -u orgin master 注:-u 远程名 仓库分支名
* 停下来,lisi操作
* git pull#远程拉取最新代码 git pull = git fetch && gti merge
模拟lisi:
* git clone https://github.com/wxx/gitrepo4.git
* cd gitrepo4 && touch youxx. com
* echo “lisi”>>youxx.txt
* git log --oneline
* git add youcerdu.txt
* git commit -m"lisi第一次提交youxx.txt,文件里面写了lisi”-a
* git remote -v
* git remote rm origin
* git remote add origin [email protected]/gitrepo.git
* git push -u orgin master
* git pull
写入zhangsan_2&lisi_2 pull代码手工修改冲突代码:
* git add youxx.txt
* git commit -m “lisi第三次提交youxx.txt文件,里面写了shangsan_2”-a
* git push -u origin master
命令总结:git clone 克隆出一个本地仓库git pull 拉取最新的代码(含分支合并)git fetch 拉取最新的代码(不含分支合并)git push 远程推送9、远程仓库+多人远程合作(git私服)原因:github是一个免费托管的代码的远程仓库,且他的私有仓库一个月要7美刀,同时企业为代码保密故都会搭建公司级别的私有服务器前提:3台机器需要免密登录root权限执行如下命令:192.168.10.232机器(公司git私服)
* groupadd git#创建组
* useradd git -g git
* passwd git
* cd /home/git
* mkdir .ssh
* chmod 755 .ssh
* touch .ssh/authorized_keys
* chmod 744 .ssh/authorized_keys
* ==>到10.165,10.118机器执行如下命令:
* ssh-keygen -t rsa -C “zhangsan @qq.com”,ssh-keygen -t rsa -C"[email protected]",然后把秘钥写到 authorized+keys内
* cd /home/git
* mkdir repos
* chown git:git repos/
* cd repos
* git init --bare git-demo.git#注:在服务器上的Git仓库通常都以.git结尾,且是–bare裸库
* chown -R git:git git-demo.git
* 私服地址是:git clone [email protected]:/home/git/repos/git-demo.git
192.168.10.165机器(zhangsan):
* cd /opt/
* git clone [email protected]:/home/git/repos/git-demo.git
* cd git-demo && touch youxx.txt
* echo “1” >>1.txt
* git add youxx.txt
* git commit -m"第一次提交youxx.txt文件,里面写了1"-a
* git remote -v
* git push -u orgin master
192.168.10.118机器(lisi):
* cd /opt/
* git clone [email protected]:/home/git/repos/git-demo.git
* git pull
总结:1、git init与git init --bare区别a、git init 只有隐藏文件.git;git init --bare 无隐藏文件.git,有5个目录3个文件b、git init有work tree,可直接在私库上建代码进行add,commit,checkout等,适合自己用 git init --bare ,没有work tree 且也看不到代码,不能进行add,commit, checkout等,适合团队用 10、git diff
* git init difftest建仓库
* cd difftest/
* ls -la
* echo “1”>youxx.txt修改文件
* cat youxx.txt
* git add youxx.txt
* git commit -m “1” -a提交到index区
* git diff
* echo “2”>>youxx.txt
* git diff
* git add youxx.txt
* git diff
* git diff --cached
* git add youxx.txt
* git diff HEAD
* git log --oneline
* git diff 5a8838e
* git diff --cached 5a8838e
* git commit -m"2" -a
* git log --oneline
* git diff 5a8838e faed8bf
* cd /git
* git clone https://github.com/spring-cloud/spring-cloud-config spring-cloud-config
总结笔记:
1. git diff 或git diff filename 比较当前工作目录好index/staged暂存区
a.当前工作目录文件无修改,git diff执行无输出 b.当前工作目录文件有修改,git diff执行输出内容,输出内容如下: diff --git a/youxx.txt b/youxx.txt a版本的youxx.txt(即变动前)和b版本的youxx.txt(即变动后) index b4123ed…1a47f25 100644 index区域的对象hash值b4123ed,与工作目录区域的对象hash值1a47f25进行比较,10644是对象的牧师普通文件,644权限 —a/youxx.txt —表示变动前的版本 +++ b/youxx.txt +++表示变动后的版本 @@-4,3 +4,4@@ -4,3变动钱的文件第4行开始,含第4行有3行内容;+4,4变动后的文件第4行开始有4行内容 2.git diff --cached 或git diff --cached fileName 比较index/staged暂存区与committed最新本地版本库 前提:基于1操作 a.当前工作目录文件无修改,git diff --cached执行后,无输出内容 b.执行git add youxx.txt后,执行git diff --cached执行后,会输出差异内容 3.git diff HEAD或git diff HEAD fileName 比较工作目录和commit提交后仓库HEAD指向最新的版本差异 4.git diff commit-id 或git diff commit-id filename比较工作目录与指定的commit-id的差异 5.git diff --cached commit-id 或git diff --cached commit-id filename 比较index暂存区与指定commit-id的差异 6.git diff commit-id commit-id比价俩个commit-id差异 7.代码比对 前提:git clone https://github.com/spring-cloud/spring-cloud-config spring-cloud-config a.v1.2.0.RELEASE与v1.3.0.RELEASE之间一共修改了多少个文件(增加修改删除修改的合计) 命令:git diff --shortstat v1.2.0.RELEASE b.v1.2.0.RELEASE与v1.3.0.RELEASE之间一共增加了多少个文件 命令:git diff --diff-filter=A --shortstat v1.2.3.RELEASE v1.3.0.RELEASE 命令:git diff --summary v1.2.0.RELEASE v1.3.0.RELEASE|wc -l 注:添加A,复制C,删除D,修改M,重命名R,–diff-filter=AM c.显示EnableConfigServer.java在v1.2.0.RELEASE与v1.3.0.RELEASE之间的改动 命令:git ls-tree -r HEAD|grep EnableConfigServer.java 命令:git diff v1.2.0.RELEASE v1.3.0.RELEASE – spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/EnableConfigServer.java git diff v1.2.0.RELEASE v1.3.0.RELEASE – *EnableConfigServer.java11、log进阶
* git查看使用方式
* git log -h
* cd /opt/git/gitrepo2/
* ll
* git log --oneline 格式化log输出,将commit ID和commit描述显示一行
* git log --oneline --decorate 展示commit是和哪一个分支或者tag关联
* git log --stat 展示修改文件数量,添加的行数和删除的行数
* git log -p 展示具体修改的内容
* git shortlog 或 git shortlog -3 /-n3按照commit作者分组,显示每个commit时的第一行描述
* git log -h
* git log --oneline --graph --decorate --graph标记会画出一个ASCII图展示commit历史的分支结构
* 自定义输出:
* 格式:–pretty=format:"" %cn代表commiter name,%h代表commit hash的缩写,%cd代表commiter date
* 命令:git log --pretty=format:"%cn committed %h in %cd"
* 筛选commit历史–按数量
* 格式:可以使用-n来限制输出的数量
* git log -3
* 筛选commit历史–按日期
* 格式:–since --until 或 --after --defore
* git log --after = “2019-10-12” --before =“2019-10-13”
* git log --since = “2019-10-12” --until = “2019-10-13”
* 筛选commit历史–按作者
* 格式:–author
* git log --author=“wangyanzhao”
* git log --author=“wangyanzhao|shangsan"支持正则表达式
* 筛选commit历史–按照commit描述
* git log -i --grep=“Jira-224” -i用来忽略大小写
* 筛选commit历史–按文件
* git log --youxx.txt --是文件路径
* 筛选commit历史–按内容
* git log -S"diff” 可知道diff代码在哪个版本新增或删除的
* 筛选commit历史–过滤merge commit
* git log 输出所有commit log
* git log --no-merges 过滤掉merge commit log
* git log --merges 只输出merge commit log
12、git 企业应用
* 前提:eclipse/idea.linux git命令
* 配置
* windows -perferences-Team -GiT-Configuration --UserSetting -Add Entry
* user.name wxx
* user.email [email protected]
* 相当于git命令:
* git config --global user.name “wxx”
* git config --global user.email"[email protected]"
* 应用1
* eclipse+本地仓库+github远程仓库-=>push/pull代码
* 本地仓库,见eclipse
* github远程仓库,见仓库设置
* eclipse branch +push +pull +merge(先切换到master,在把分支merge合并到master)+push remote +打tag+push remote=>github 可看到release
* 权限分配-创建组织
* eclipse导入git仓库代码
* 应用2:
* eclipse+本地仓库+linux git 远程仓库 =>push/pull代码
* 注意:分配权限
* 命令:groupadd gitread
* useradd gitread -g gitread
* passwd gitread
* chown -R gitread:gitread /opt/git #gitread拥有目录/opt/git及其下面的所有文件、子目录的文件权限
* chmod 440 /opt/git
* 私库访问地址:git clone [email protected]:/home/git/repos/git-demo.git
13、总结:
1. 明白原理图的流转
2. 掌握命令的内容
3. 记住问题的解决方案

你可能感兴趣的:(git原理以及基本命令学习)