在linux上我们建议你用二进制的方式来安装git,可以使用发行版包含的基础软件包管理工具来安装,如果你是 是CentOS或者Fedora的操作系统,可以使用yum命令来安装git: $ sudo yum install git 如果你是ubuntu或者是Debian可以使用apt-get的命令来安装git: $ sudo apt-get install git 要了解更多选择,Git 官方网站上有在各种 Unix 风格的系统上安装步骤,网址为 http://git-scm.com/download/linux
在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 http://git-scm.com/download/win,会检查你的操作系统是32位的还是64位的,并自动开始下载对应的安装包。 另一个简单的方法是安装 GitHub for Windows。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 你可以在 GitHub for Windows 网站下载,网址为 http://windows.github.com。
MAC上安装git
方法一:通过homebrew安装git 首先homebrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装git: brew install git 方法二:通过xcode 直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”, 在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
配置git
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会 使用这些信息,并且它会写入到你的每一次提交中,不可更改:
$ git config --global user.name “jf-linux”
$ git config --global user.email 786572829@qq.com 再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行 没有 --global 选项的命令来配置。 很多 GUI 工具都会在第一次运行时帮助你配置这些信息。 你也可以使用git config --list来查看git的所有配置。
创建git服务器
虽然我们说git是一个分布式的版本管理工具,不像svn 那样离开了中央服务器的仓库就干不了活了,但是如果有个 中央服务器存在,还是方便了多人之间的协作。那如何创建 git的中央服务器呢?
一:创建git账号和git用户组 $ sudo adduser git #添加git用户 $ sudo passwd git #添加git的密码 $ sudo groupadd git #添加git用户组 $ sudo usermod -G git git #添加git用户到git用户组
二、创建git仓库 $ cd /srv # srv目录下存放git的仓库 $ mkdir nginx-docs.git # 创建nginx-docs.git目录 $ cd nginx-docs.git $ git init --bare # bare选项指示该仓库为裸仓库 $ sudo chown -R git:git /srv/nginx-docs.git # 修改权限为git用户
三、禁止git用户登录shell,这样git通过sh服务登录会被拒绝
四、克隆远程仓库 比如在我的windows电脑上打开git bash shell,
输入: git clone git@47.106.79.26:/srv/nginx-docs.git
即clone命令为: git clone git@<您的 CVM IP 地址>:git仓库路径 在这个过程中需要输入用户名和密码,我们可以通过rsa认证的方式省略掉密码的输入
五、免密输入的配置 就是通过rsa认证,生成公钥和私钥,然后把客户端的公钥告诉git服务器,具体步骤如下: 在客户端机器上,比如我在windows机器上已经配置用户名和密码,见上一章的git配置说明,然后打开git bash shell,生成rsa的秘钥对,ssh-keygen –t rsa命令后一路按回车,此时会在c:/Users/lizhiyong/.ssh/目录下生成id_rsa.pub和id_rsa文件,id_rsa.pub是公钥文件,id_rsa是私钥文件
在git服务器上: $ su git $ ssh-keygen –t rsa $ touch authorized_keys 然后把客户端的id_rsa.pub追加到这个文件里。这样后, 我们就不需要每次都输入git密码了。
git的原理 - git的四个区域
Workspace: 工作区,就是你平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
git原理 – 工作流程
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件add到暂存区域;
3、将暂存区域的文件commit到git仓库;
4、本地的修改push到远程仓库,如果失败则执行第5步
5、git pull将远程仓库的修改拉取到本地,如果有冲突需要修改冲突。回到第三步 因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
git原理 – 文件的四种状态
Untracked: 未跟踪, 此文件在文件夹中,但并没有加入到git库,不参与版本控制, 通过git add 状态变为Staged。
Unmodify: 文件已经入库且未修改, 即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去处,如果它被修改, 而变为Modified,如果使用git rm移出版本库, 则成为Untracked文件。
Modified:文件已修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout 则丢弃修改,返回到unmodify状态, 这个git checkout即从库中取出文件,覆盖当前修改
Staged:暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态。
合并提交
git commit --amend 相同功能多次提交复用上次提交信息
git rebase -i
p,pick:使用该次提交
r,reword:使用该次提交,但重新编辑提交信息
e,edit:使用该次提交,但停止到该次提交
s,squash:将该commit和前一个commit合并
f,fixup:将该commit和前一个commit合并,但不保留该提交的注释信息
x,exec:执行shell命令
d,drop:丢弃该commit
冲突解决
原则:不要影响其他人提交的功能,也不能破坏自己提交的功能。 协商解决。
<<<<<<< HEAD和=======中间的是你自己的代码, ======= 和>>>>>>>中间的是其他人修改的代码自己确定保留那一部分代码,最后删除<<<<<<< HEAD ,======= ,>>>>>>>这种标志。
1 解决冲突
2 git add .
3 git commit . -i -m "fix: "
4 git push将解决冲突后的文件推送到远程。
版本控制管理分支介绍
我们管理代码的时候,在集中式管理(比如SVN)中会创建Trunk、Branches、Tag等一些目录,分别放置开发代码、代码分支 以及代码的里程碑,那么在git中我们也使用分支和tag来管理代码。分支就是就是一个代码的副本,可以基于分支进行独立开发。 比如我们创建Bug分支或者Feature分支,等开发好了再合并到主干上。好了使用git可以非常方便灵活地管理分支和基于分支工作: git branch # 查看分支
git branch develop # 创建develop分支 git checkout –b feature/FT-123456 # 创建FT-123456的一个feature分支 git checkout develop # 切换分支 git switch git merge feature/FT-123456 # 合并分支 git branch –d feature/FT-123456 # 删除FT-123456的feature分支 git push –u origin hotfix/ISSUE-345678 # 推送分支
版本管理的标准流程
Master : 稳定压倒一切,禁止尚review和测试过的代码提交到这个分支上,Master上的代码是可以随时部署到线上生产环境的。 Develop :开发分支,我们的持续集成工作在这里,code review过的代码合入到这里,我们以下要讲的BUG fix和feature开发都可以基于develop分支拉取,修改完之后合入到develop分支。 Feature :功能开发和change request的分支,也即我们每一个feature都可以从devlop上拉取一个分支,开发、review和测试完之后合入develop分支。 Hotfix :紧急修改的分支,在master发布到线上出现某个问题的时候,算作一个紧急布丁。从master分支上拉取代码,修改完之后 合入develop和master分支。 Release :预发布分支,比如0.1、0.2、1.12版本,我们一般说的系统测试就是基于这些分支做的,如果出现bug,则可以基于该release分支拉取一个临时bug分支。 Bug : bug fix的分支,当我们定位、解决后合入develop和Release分支,然后让测试人员回归测试,回归测试后由close这个bug
github介绍
GitHub是一个利用Git进行版本控制、专门用于存放软件代码与内容的共享虚拟主机服务。它由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails编写而成。 总之,全球最大的同性交友网站
Repo:项目,绝大多数的开源项目都会放在github上,包括Linus Torvalds参与的linux内核,基于repo可以提 issue,可以review code,可以有wiki,branch,tag等等都支持,还可以star和fork这样的repo。 Explore:基于兴趣显示了一些开源项目 Topics:按照主题显示的一些项目,可以选择某个主题继续观察 Trending:流行repo,可以选择语言和周期来显示 Events:显示github官方的一些活动
如何搜索高质量的开源项目
搜索的方法: 关键字 stars:> 1000 fork:>100 语言: java html
用git获取项目的时候提示git SSL certificate problem: unable to get local issuer certificate
这个问题是由于没有配置信任的服务器HTTPS验证。默认,cURL被设为不信任任何CAs,就是说,它不信任任何服务器验证。
只需要执行下面命令就可以解决:git config --global http.sslVerify false
gitlab介绍
GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。很多公司都是基于gitlab进行版本管理的。
搭建gitlab
第一步:安装一些依赖软件 sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates sudo apt-get install -y postfix # postfix发送邮件,其它的邮件配置见:https://docs.gitlab.com/omnibus/settings/smtp.html 第二步:添加下载源: vim /etc/apt/sources.list.d/gitlab_gitlab-ee.list 打开该文件添加: deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main 第三步:安装gitlab sudo apt-get update sudo apt-get install gitlab-ce 第四步:配置gitlab vim /etc/gitlab/gitlab.rb external_url ‘http://192.168.2.129’ # 把external_url修改成访问的IP,当然更复杂的配置信息可以参考 https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab gitlab-ctl reconfigure # 开始配置
在这个过程中,我们可能会遇到这个问题,是因为我们的配置external_url配置的url不正确
reconfigure成功会出现以下内容:
第五步:启动重启查看状态: gitlab-ctl restart/start/status/stop # 通过gitlab-ctl help都能查看到该信息
比如gitlab-ctl status,会显示以下信息:
启动gitlab后,访问http://192.168.2.129出现502错误:
此时我们可以使用gitlab-ctl tail来查看gitlab的服务日志,通过日志可以看到8080端口被别的进程占用了
此时需要修改gitlab的配置信息,如下: vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb # 然后把listen的8080端口改成8088,然后重启gitlab
gitlab-ctl restart
如果不出什么意外,我们再次打开http://192.168.2.129会出现下面这个页面,这个时候需要配置我们root账户 的密码了: