下载
Git简史
同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。
Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统(参见 Git 分支)。
Git诞生的小故事
Linus Benedict Torvalds 大神带着一堆分布在世界各地的优秀程序员开发Linux Kernel,因为当时没有什么版本控制工具,都是Linus本人合并分散在世界各地人员提交过来的代码,到了2002年出现了商业软件:BitKeeper,BitKeeperd的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统,但要求不能破解。2005年大佬们用着别人不开源的手痒痒,开发Samba的Andrew开始试图破解BitKeeper的协议,被BitMover公司发现,公司要收回Linux社团的免费使用权。当时Linux是社团,无法像商业公司那样对参与开发着进行强有力的约束。Linus本人心想人家不给我用,我就自己开发,Linus就自己用C语言开发了一个分布式版本控制语言Git,主体程序开发完成只用了两周,一个月后Linux系统代码就由Git管理,到了2008年 GitHub上线 普遍jQuery、Ruby、PHP……都开始它开托管项目。
git基本命令
本地库初始化
git init
- 初始化一个git本地库
状态查看
git status
- 查看工作区,暂存区的状态
添加
git add [file name]
- 将工作区的“新建/修改”添加到暂存区
从暂存区撤销添加的文件
git rm --cached [file name]
提交
git commit -m "commit message" [file name]
- 将暂存区的内容提交到本地库
查看历史记录
git log
-
如果提交次数比较多一次显示不下
-
空格 向下翻页
-
b 向上翻页
-
q 退出
-
-
使用漂亮的格式来显示 ,一条日志只显示一行
git log --pretty=oneline
或者
git log --oneline
- 哈希值只显示一部分
或者
git reflog
-
显示指针需要移动不步数
-
HEAD@{移动到当前版本需要多少步}
版本的前进后退
基于索引值操作[推荐]
- 首先我们通过
git reflog
查看需要后退的索引值 - 通过
git reset --hard [局部索引值]
案例:git reset --hard a6ace91
使用^符号只能后退
git reset --hard HEAD^
- 一个^表示后退一步,n个表示后退n步
git reset --hard HEAD
查看当前指针指向哪一个版本
使用~符号只能后退
git reset --hard HEAD~n
- 注:表示后退n步
案例:git reset --hard HEAD~5
后退五步
reset命令的三个参数对比
-
soft参数
- 仅仅在本地库移动HEAD指针
-
mixed参数
- 在本地库移动HEAD指针
- 重置暂存区
-
hard参数
- 在本地库移动HEAD指针
- 重置暂存区
- 重置工作区
删除文件并找回
-
前提:删除前,文件存在时的状态提交到了本地库。
-
操作:
git reset --hard [指针位置]
-
删除操作已经提交到本地库:指针位置指向历史记录
-
删除操作尚未提交到本地库:指针位置使用HEAD
git reset --hard HEAD
-
比较文件差异
git diff [文件名]
- 将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本] [文件名]
- 将工作区中的文件和本地库历史记录比较
- 不带文件名比较多个文件
分支管理
创建分支
git branch[分支名]
查看分支
git branch -v
切换分支
git checkout[分支名]
合并分支
- 切换到接受修改的分支(别合并,增加新内容) 上 git checkout [被合并分支名]
- 执行 merge 命令
git merge [有新内容分支名]
解决冲突
-
编辑文件,删除特殊符号
-
把文件修改到满意的程度,保存退出
-
git add [文件名]
-
git commit -m “日志信息”
注意:此时commit一定不能带具体文件名
GitHub
创建远程库地址别名
为了每次推送都要复制地址很麻烦
git remote -v
- 查看当前所有原创地址别名
git remote add [别名] [远程地址]
- 创建别名
推送
git push [别名] [分支名]
- 必须要指定分支名默认分支 master
克隆
git clone [远程地址]
- 效果
- 完整的把远程库下载到本地
- 创建远程地址别名
- 初始化本地库
团队成员邀请
“一号”其他方式把邀请链接发送给“二号”,“二号”登录自己的 GitHub 账号,访问邀请链接。
拉取
pull=fetch+merge
- pull操作相当于fetch 和 merge
git fetch [远程库地址别名] [远程分支名]
- 远程库内容下载到本地,但是并没有改动本地文件
- 如果想查看下载内容
git checkout [远程库地址别名/远程分支名]
先切换分支- 在用 cat 文件名。查看文件内容
git merge [远程库地址别名/远程分支名]
- 本地文件改变
git pull [远程库地址别名] [远程分支名]
- 把2 3两步合并一步走
解决冲突
- 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取。
- 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
- 再次推送
注意再次提交到本地库是不能带文件名的
跨团队协作
-
Fork
点击别人项目的fork,在自己仓库中建立分支
-
看看自己的库
- 这个时候就可以把自己的库中的内容克隆到自己本地,开发自己的东西
- 推送到远程仓库
- pull request操作
- 来到主号
- 审核代码
- 合并代码
- 这就合并完成了,可以在线查看,也可以拉取到本地查看
SSH登陆
- 进入当前用户的家目录(也就是更目录 Windows 是user目录 而mac 是用户下面的系统名的文件夹)
cd ~
- 删除.ssh目录
rm -rvf .ssh
- 运行命令生成.ssh密钥目录
ssh-keygen -t rsa -C chnllcong@gmail.com 登陆github的邮箱
[注意:这里**-C** 这个参数是大写的 C]
- 进入.ssh目录查看文件列表
cd .ssh/
ls -lF
-
会生成
id_rsa
文件和id_rsa.pub
文件内容 -
在
id_rsa.pub
当中有一段密钥 -
到github的设置中
- 客户端进行测试
- 复制ssh克隆地址
- 按照正常推送就可以了
git 工作流
Gitlab服务器搭建过程
用虚拟机安装CentOS(CentOS是基于Linux内核的100%免费的操作系统)
安装命令摘录
sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh
sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ee
实际问题:yum 安装 gitlab-ee(或 ce)时,需要联网下载几百 M 的安装文件,非常耗 时,所以应提前把所需 RPM 包下载并安装好。
下载地址
https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm
调整过后的安装
sudo rpm -ivh /opt/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh
sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
gitlab 服务操作
- 初始化配置gitlab
- gitlab-ctl reconfigure
- 启动gitlab服务
- gitlab-ctl start
- 停止gitlab服务
- gitlab-ctl stop
查看帮助文档
git help reset
设置提交到远程服务器上后显示的名字
项目级别/仓库级别(提交到远程服务器上后显示的名字)
git config user.name llc
git config user.email chnllcong@gmail.com
信息保存的位置
./.git/config
查看文件的内容
cat .git/config
系统用户级别:登录当前操作系统的用户范围
git config --global user.name llc_pro
git config --global user.email chnllcong@gmail.com
信息保存位置:~/.gitconfig 文件
VIM命令
$ ll
– 打印当前目录
$ ls -la
– 打印当前目录带隐藏资源
$ cd 文件名/
– 进入某个目录
$ mkdir [name]
– 创建文件夹
$ pwd
– 答应当前项目目录
$ vim [file name]
创建文件/查看文件
$ rm [file name]
删除文件
$ :wq
--编辑保存 :wq!强制保存
$cat [file name]
– 查看文件内容
$tail -n 行数 [file name]
– 查看文件内容最后多少行