Git使用介绍

1 Git原理和常用命令

1.1 Git的起源和特点

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,Git的读音为/gɪt/。Git是 Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Git具有以下特点:

  1. 分布式的版本控制系统:Git开发时本地仓库保留所有的历史提交和分支,即使中央仓库是单点出现故障,也不影响本地的commit提交工作,开发同学可以继续本地编码,直到中央仓库恢复后再推送到中 央仓库;
  2. 轻量和便捷的分支管理策略:不同于SVN整个拷贝,Git创建的分支是当时历史提交点的快照(指针),不需要整个拷贝,成本极低而且便捷;
  3. 近乎所有操作都可以本地执行:拉分支、提交、合并等操作都只访问本地仓库,处理速度快,离线状态下,可在本地进行任意次提交;
  4. 更open的权限管理、更多持续集成的支持:不同于SVN权限管理可以细致到某个目录,Git是按照Group(开发组)进行权限管理,Group所有成员对于组内所有代码工程具有相同权限,这种权限管理更有利于组内知识共享和技术交流。Git特有的Gerrit可以更好的实现code review,并且可以把Sonar、UT等其他持续集成活动更好的集成和应用到代码工程中。

1.2 Why Git

  • Git开源、便捷的基因完全符合互联网更开放、更敏捷快速的特点,Git已经成为目前最流行的版本管理系统,并且成为主流的一二线互联网公司采用的版本管理系统,没有之一;
  • Git可以促进组内、公司内知识共享,由封闭转向开源,人人都可以参与和贡献开源代码;
  • 全球最大、最活跃的开源社区Github,可以轻松无缝clone到本地,进行参考和学习;
  • 天然的代码质量控制系统,让code review、CI更容易执行。

1.3 Git原理

1.3.1 Git内部对象存储模型

Git仓库由一个个的commit对象组成的双向链表构成。修改已有文件后提交,Git保存的不是增量内容,而是整个文件的快照,一个commit对象对应的是整个项目源码的一个版本,而非本次修改的增量数据。

1.3.2 Git存储空间

                workspace                          index                        local repository               remote repository

上图是一个非常形象的git常用操作图,根据上图,主要介绍以下命令操作:

1.git add命令主要用于把我们要提交的文件的信息添加到索引库中。当我们使用git commit时,git将依据索引库中的内容来进行文件的提交。
1.1 git add <path>表示 add to index only files created or modified and not those deleted 
我通常是通过git add <path>的形式把我们<path>添加到索引库中,<path>可以是文件也可以是目录。
git不仅能判断出<path>中,修改(不包括已删除)的文件,还能判断出新添的文件,并把它们的信息添加到索引库中。
1.2 git add -u
git add -u 表示 add to index only files modified or deleted and not those created 
git add -u [<path>]: 把<path>中所有tracked文件中被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件。
省略<path>表示.,即当前目录。
1.3 git add -A
git add -A[<path>]表示把<path>中所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到索引库。
省略<path>表示.,即当前目录。
1.4 git add -i
我们可以通过git add -i [<path>]命令查看<path>中被所有修改过或已删除文件但没有提交的文件,
并通过其revert子命令可以查看<path>中所有untracted的文件,同时进入一个子命令系统。


2.git commit  -m "提交的描述信息"

如果我们这里不用 -m参数的话,git将调到一个文本编译器(通常是vim)来让你输入提交的描述信息
可能一天下来,你对工作树中的许多文档都进行了更新(文档添加、修改、删除),但是我忘记了它们的名字,此时若将所做的全部更新添加到索引中,比较轻省的做法就是:
git commit  -a  -m  "提交的描述信息"
git commit  命令的 -a  选项可只将所有被修改或者已删除的 且已经被git管理 的文档提交倒仓库中如果只是修改或者删除了已被Git 管理的文档,是没必要使用 git add  命令的。
git add  .命令除了能够判断出当前目录(包括其子目录) 所有被修改或者已删除的文档,还能判断 用户所添加的新文档 ,并将其信息追加到索引中。
git commit  --amend  对于已经修改提交过的注释,如果需要修改,可以借助 git commit --amend 来进行。

3.

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

$ git push <远程主机名> <本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

    如果想把 本地的某个分支test 提交到 远程仓库,并作为远程仓库的master分支,或者 作为另外一个名叫test的分支,那么可以这么做。

$ git push origin test:master         // 提交本地test分支 作为 远程的master分支
$ git push origin test:test              // 提交本地test分支作为远程的test分支

4.

reset是指将当前head的内容重置,不会留任何痕迹。

Sets the current head to the specified commit and optionally resets the index and working tree to match. 

 Git reset --hard HEAD~3

会将最新的3次提交全部重置,就像没有提交过一样。

执行第四步的前提条件是:必须在本地仓库还没有push到远程仓库之前才能执行,不然就没有用了。执行了第四步之后,你会发现自己上一次提交的改动又恢复原样了,git reset --hard head~1 是返回到上一次提交之前。


1.4 Git常用命令

  • 用户信息配置:
git config --global  user.name wangxuan
git config --global user.email  wangxuan@daojia.com
  • Git常用命令:

git clone git@git.daojia-inc.com:jiazheng/nurseExtendServer.git    克隆对应组项目工程的代码到本地

git branch -r  查看该模块远端存在的分支

git checkout -b dev/Dev_jiazheng_dubbo-nurse-extend-server_6-0-0 origin/dev/Dev_jiazheng_dubbo-nurse-extend-server_6-0-0 创建本地分支并和远端分支关联 

git status   查看状态,要经常查看当前本地分支的状态

git pull    从远端拉取代码,并自动merge,git fetch + git merge

git add filename  添加需要提交的指定文件

git add .    添加所有修改过的文件

git commit -m “注释”   本地提交当前已经添加的修改附带注释

git commit     本地提交当前已经添加的修改,执行后会弹出一个vi界面,在其中添加注释

git push  origin dev/Dev_jiazheng_dubbo-nurse-extend-server_6-0-0 推送本地分支的提交到远端,类似于svn的commit

git checkout dev/Dev_jiazheng_dubbo-nurse-extend-server_6-0-0 切换本地分支,在本地已经创建的分支中进行切换

  • Git命令集:

git init   #初始化git仓库                                                           git branch   #分支相关

git clone  #克隆仓库                                                               git tag  #tag相关

git status   #检查文件当前状态                                               git reset  #撤销提交或更改

git add   #跟踪新文件                                                             git stash   #暂存修改

git diff   #显示差异                                                                  git checkout   #切换分支

git commit #提交更新                                                             git merge  #合并

git log  #查看提交历史                                                            git rebase  #衍合

git rm  #移除文件                                                                   git cherry-pick  #重新apply已有commit

git mv  #移动文件                                                                   git show-branch  #显示提交状态

git remote add  #添加远程仓库                                               git whatchanged #查看提交修改了哪些文件

git fetch  #从远程仓库抓取数据                                               git cat-file  #查看对象内容

git push  #推送数据到远程仓库                                               git ls-files  #显示工作目录和index中文件信息

git pull    #抓取数据并合并                                                      git gc   #垃圾收集

2 Gitlab操作手册

2.1 Gitlab权限管理

Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner

  • Guest:可以创建issue、发表评论,不能读写版本库
  • Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
  • Developer:可以克隆代码、开发、提交、push,RD可以赋予这个权限
  • Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限
  • Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限

Gitlab中的组和项目有三种访问权限:Private、Internal、Public

  • Private:只有组成员才能看到
  • Internal:只要登录的用户就能看到
  • Public:所有人都能看到

开源项目和组设置的是Internal

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值