架构师成长之路工具篇之git

梦想与她 提交于 2020-03-04 07:04:50

目录

一、git管理过程的四个阶段

​1、工作目录

2、暂存区(index)

3、本地仓库

4、远程仓库

二、git常用命令

1、创建版本库

2、修改和提交

3、查看提交历史

4、撤消

5、分支与标签

6、合并与衍合

7、远程操作

三、git冲突及解决办法

1、git冲突的原因

2、git冲突的解决办法

四、git flow工作流

五、linux搭建git服务器

1.安装git

2.创建一个git用户

3.创建证书登录:

4.创建仓库

5.禁用shell登录

6.服务器打开RSA认证

7.客户端测试


一、git管理过程的四个阶段

​1、工作目录

工作目录的内容就是当前正在编辑的项目文件。

2、暂存区(index)

index区标记了当前工作目录中,哪些内容是被git管理的,既通过"add" 命令添加的文件。

3、本地仓库

而本地仓库保存了对象被提交 过的各个版本,比起工作目录和暂存区的内容,它要更旧一些。

4、远程仓库

远程仓库是本地仓库的异地备份,远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库 修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。

任何对象都是在工作目录中诞生和被修改,任何修改都是从进入index区才开始被版本控制,只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹,而要与协作者分享本地的修改,可以把它们push到远程仓库来共享。

反过来,我们可以从远程历史仓库中获得本地仓库的最后一个版本,clone到本地,从本地检查出对象的各个版本到index暂存区或工作目录中,从而实现任何对象或整个仓库的任意阶段状态的“回滚”。

二、git常用命令

1、创建版本库

git clone #克隆远程版本库

git init #初始化本地版本库

2、修改和提交

git status #查看状态git diff #查看变更内容git add . #跟踪所有改动过的文件git add #跟踪指定的文件git mv #文件改名git rm #删除文件git rm --cached #停止跟踪文件但不删除git commit -m "commit message" #提交所有更新过的文件git commit --amend #修改最后一次提交

3、查看提交历史

git log #查看提交历史

git log -p #查看指定文件的提交历史

git blame #以列表方式查看指定文件的提交历史

4、撤消

git reset --hard HEAD #撤消工作目录中所有未提交文件的修改内容

git checkout HEAD #撤消指定的未提交文件的修改内容git revert #撤消指定的提交

5、分支与标签

git branch #显示所有本地分支git checkout #切换到指定分支或标签git branch #创建新分支git branch -d #删除本地分支git tag #列出所有本地标签git tag #基于最新的提交创建标签git tag -d #删除标签

6、合并与衍合

git merge #合并指定分支到当前分支

git rebase #衍合指定

分支到当前分支

7、远程操作

git remote -v #查看远程版本库信息git remote show #查看指定远程版本库信息git remote add #添加远程版本库git fetch #从远程库获取代码git pull #下载代码及合并git push #上传代码及合并git push: #删除远程分支或标签git push --tags #上传所有标签

三、git冲突及解决办法

1、git冲突的原因

当不同的人更改同一份文件时,如果这些更改不重叠(即对不同的代码行进行了更改),则会自动合并冲突的文件;如果同一行受到影响,则Git不能随意选择另一方,并要求您解决冲突。 

2、git冲突的解决办法

  • git冲突的解决办法有很多,一般解决流程:

  • 拉取远端代码。存在冲突,会报错;

  • 此时我们需要将本地代码暂存起来 stash;

  • 更新本地代码,将本地代码版本更新和远端的代码一致即可;

  • 将暂存的代码合并到更新后的代码后,有冲突解决冲突(需要手动进行解决冲突);

  • 提交解决冲突后的代码。

四、git flow工作流

利用Git工作流进行标准化处理,统一的拉分支规则,统一的上线流程,让整个团队所有人员按照统一的标准进行工作,从而提高我们代码管理及其上线的效率。

Gitflow工作流是目前非常流行的一种比较成熟的工作流。该工作流的具体实例图形如下图所示:

如上图所示,我们可以看到,Gitflow工作流把整个代码分支分成了Master分支,Hotfix分支,Release分支,Develop分支,Feature分支。各个分支的作用及其交互为:

  • Feature分支:我们每当要迭代一个新功能,就需要来创建一个feature分支。该功能的所有代码都在该feature分支上维护。feature分支代码从Develop分支上拉取;并且,代码也会push回Develop分支;

  • Develop分支:是我们的开发分支。所有的开发人员在一个迭代周期中,都是从develop分支去拉取代码,然后功能开发完成,就check in回develop分支。当某个迭代周期完成,我们需要从develop分支上把可以发布上线的功能拉取到Release分支进行上线;

  • Release分支:当一个迭代周期完成,我们需要从develop分支拉取可以上线的功能到release分支。一旦release分支拉取功能确定,在上线之前,任何人都不可以再往release分支上提交代码。在release分支上进行提测,上线后,合并到master分支;

  • Master分支:对应上线功能的代码版本,它是最稳定的代码分支;

  • HotFix分支:如果线上系统出现了bug,我们需要从master分支拉取一个新分支,也就是hotfix分支,在该分支上解决bug,并且校验bug,然后从该分支上线。

五、linux搭建git服务器

1.安装git

$ yum install -y git # 建议root用户下执行命令,其中-y表示安装过程提示选择全部为yes 

$ git --version # 验证git是否安装成功

2.创建一个git用户

$ adduser git # 创建账户 

$ passwd git # 修改密码

3.创建证书登录:

$ cd /home/git #切换到git账号,创建.ssh文件和authorized_keys文件 $ mkdir .ssh$ cd /home/git/.ssh $ vi authorized_keys

之后把本机上的id_rsa.pub中的公钥复制到authorized_keys文件中,如果没有公钥请在用户主目录使用命令生成:

Windows系统:C:\Users\用户名

Linux系统:/home/用户名

Mac系统:/Users/用户名

$ ssh-keygen -t rsa

然后在用户目录/.ssh/下查看有没有id_rsa和id_rsa.pub

4.创建仓库

$ cd /home/git/ $ git init --bare test.git      $ chown -R git:git test.git       $ ls -al #查看用户组和用户名是否都为git

5.禁用shell登录

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

6.服务器打开RSA认证

在下面两个文件中找到3个地方处修改

$ vi /etc/ssh/ssh_config$ vi /etc/ssh/sshd_config  
1.RSAAuthentication yes 

2.PubkeyAuthentication yes     3.AuthorizedKeysFile  .ssh/authorized_keys

7.客户端测试

在本机克隆远程仓库

$ git clone git@your ip address:/home/git/test.git$ touch readme.txt$ git add .$ git commit -m "the first commit"$ git remote add origin git@your ip address:/home/git/test.git$ git push origin master

如果需要密码,就是公钥没有配置成功或者RSA没有开启。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!