软件构造——Git学习

什么是版本控制

在学习工具之前,首先要了解这些工具是来做什么的?对,版本控制!什么是版本控制?

What is “version control”, and why should you care? Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. For the examples in this book, you will use software source code as the files being version controlled, though in reality you can do this with nearly any type of file on a computer.

总之,版本控制可以帮助我们在工作过程中记录一个项目的变化过程,帮助我们查看历史,进行比较等。还有很重要的一点,如果自己丢失了文件,可以很容易的进行恢复!!!

使用github

什么是github?

GitHub是一个代码托管平台,用于版本控制和协作。有了它,我们可以很方便地进行团队协作。
之前没有系统的学习关于github的相关操作,直到lab3遇到了不会进行的操作,才下定决心来学习一下。

新建仓库

要进行版本控制,首先要新建一个仓库。仓库通常用来管理单一的工程。在仓库里面可以有文件夹、文件、图片、视频文件、电子表格和数据集。总之就是项目所需的所有文件类型
建议包括一个README文件,或者是一个介绍仓库信息的文件,这样在他人或者自己事后查看的时候,可以方便的了解仓库文件的有关信息
在github新建仓库,具体方法是点击头像左侧的箭头,如图所示:
在这里插入图片描述
之后进行仓库的相关设置,点击创建仓库即可新建仓库:
(在实验里面并没有用到这些步骤)
在这里插入图片描述

创建分支

创建分支允许我们可以同时创建一个工程的不同版本,不同分支之间互不干扰。
仓库默认是master分支。

  1. 进入新建的仓库
  2. 单击文件列表顶部的下拉列表
  3. 输入新建的分支的名字
  4. 选择蓝色的“Create branch”
    即可新建分支。

修改、提交

点击响应文件,之后进行修改。例如下面的例子:
在这里插入图片描述

pull操作

当某一分支做出修改之后,就可以使用pull操作来将提出自己的修改,请求将自己的修改贡献到仓库,将修改合并到仓库中。Pull请求显示来自两个分支的内容的差异。更改、添加和删除以绿色和红色显示。

  1. 点击Pull Request,之后点击New pull request
  2. 在pull之前可以查看一下修改的内容是不是自己希望的,通过在Example Comparision中选择自己的分支和另一分支进行比较,查看有变化的部分是不是自己希望的,如果是,则进行3
  3. 点击Create Pull Requst进行提交

使用Git管理本地仓库

什么是Git?

教程说理解了什么是Git就可以更好的使用它 😄

大多数其他系统将信息存储为基于文件的更改列表。这些系统将它们存储的信息视为一组文件,以及随着时间的推移对每个文件所做的更改。
在这里插入图片描述
但是存储数据的方式和上面提到的不同。Git认为它的数据更像是微型文件系统的一系列快照。在Git中,每次提交或保存项目状态时,Git都会拍下所有文件在该时刻的样子,并存储对该快照的引用。为了提高效率,如果文件没有更改,Git就不会再次存储该文件,只是提供一个链接,指向它已经存储的相同文件。
在这里插入图片描述
在查阅官网资料的时候,了解到Git的安全性问题:不经过Git就无法修改任何文件的内容,所以是很安全的。

Git中文件的三种状态

这是使用Git的基础知识,在使用Git不多的经验中,我也可以体会到Git的各种功能基本都是提供了使文件在这三种状态之间转换的功能。
modified:已经修改了文件,但是没有提交到数据库
staged:已经在当前版本中标记了一个修改后的文件,以进入下一个提交快照
committed:到达这个状态就可以放心了,数据已经被安全的存储到了本地的仓库中
借Git官网的图来展示一下:
在这里插入图片描述

安装Git

直接到官网下载安装即可

Git使用

** 首先要知道怎么查看官方帮助**

git help <verb>
git <verb> --help
man git-<verb>

终于到了最实用的Git命令环节:
** 新建一个Git仓库**
可以将一个没有在版本控制下的本地文件目录变成一个Git仓库。

git init

可以克隆一个已经存在的仓库,下面这个命令会新建一个叫libgit2的目录,并且在它里面初始化一个.git目录,下拉被复制仓库的所有数据,并且检出最新版本的副本。

git clone https://github.com/libgit2/libgit2
git clone https://github.com/libgit2/libgit2 mylibgit
这个命令类似上面的命令,不同之处仅在于创建的目录名字是mylibgit,也就是说,利用这个命令,可以自己指定仓库的名字。

将变化记录到仓库
盗图,这个图片展示了工作目录下文件的各种状态:
(untracked表示还没有纳入版本管理的文件)
在这里插入图片描述
跟踪新文件(将文件从untracked转换成tracked

 git add 文件名
 这个“文件名”也可以是一个目录,这样,就会将一个目录下所有的文件都添加进来

如果运行“git add A”之后修改了A文件,那么提交的时候提交的是修改前的A文件,如果想要使A文件保持最新状态,修改之后需要再次运行“git add A”,也就是说Git对文件的阶段设置完全是和运行命令时保持一致。
提交

git commit
该命令将提交所有使用了 git add XXX 命令操作过后的文件

git commit -m "这里是一些信息"
该命令和上面的命令作用是一样的,仅仅是多了一些提交的相关信息

git commit -a -m '跳过staged area来提交文件'
使用该命令允许文件不经过staged阶段而提交,这个命令会使Git在执行提交之前自动对每个已经被跟踪的文件执行add命令

查看提交记录

git log
使用该命令会列出所有向该仓库提交的记录

git log -p
使用该命令可以显示每次提交中引入的差异

git log -p -4
最后的数字限制展示的条目数目,数字是多少,就将展示的条目限制到几个以内

查看工作目录下各文件的状态

git status
获得各文件的状态

git status -s
或者
git status --short
可以看到一种表达更简单的文件状态表示

查看已经连接的远程仓库

git remote
查看已经配置的远程服务器,如果之前克隆过一个远程仓库,那么会默认显示origin

git status -v
会显示类似下面的内容
bakkdoor  https://github.com/bakkdoor/grit (fetch)
bakkdoor  https://github.com/bakkdoor/grit (push)
cho45     https://github.com/cho45/grit (fetch)
cho45     https://github.com/cho45/grit (push)
defunkt   https://github.com/defunkt/grit (fetch)
defunkt   https://github.com/defunkt/grit (push)
koke      git://github.com/koke/grit.git (fetch)
koke      git://github.com/koke/grit.git (push)
origin    git@github.com:mojombo/grit.git (fetch)
origin    git@github.com:mojombo/grit.git (push)
可以看到,每行有两列,第一列显示的是输入命令时的名字,第二列显示的URL,括号中是相关操作

添加远程仓库

 git remote add 名字 url
 使用该命令之后,“名字”就代表了这个url
 例如:
 git remote pp https://github.com/schacon/ticgit
 之后使用git clone pp就是从https://github.com/schacon/ticgit中克隆

从远程仓库获取数据

git fetch 名字
这个命令从“名字”代表的远程仓库抓取本地还没有的数据。

查找出现错误的提交
最近新学了一个git命令:

git bisect <subcommand> <options>
该命令可以使用二分查找来找到出现bug的那次提交。

该命令接受不同的子命令和不同的选项取决于子命令:
git bisect start [--term-{old,good}=<term> --term-{new,bad}=<term>]
	  [--no-checkout] [<bad> [<good>...]] [--] [<paths>...]
git bisect (bad|new|<term-new>) [<rev>]
git bisect (good|old|<term-old>) [<rev>...]
git bisect terms [--term-good | --term-bad]
git bisect skip [(<rev>|<range>)...]
git bisect reset [<commit>]
git bisect (visualize|view)
git bisect replay <logfile>
git bisect log
git bisect run <cmd>...
git bisect help

使用方法是,首先告诉它一个已知包含错误的“坏”提交,以及一个在引入错误之前已知的“好”提交。然后git bisect选择这两个端点之间的提交,git会询问您所选择的提交是“好”还是“坏”。它继续缩小范围,直到找到引入更改的确切提交。
可以使用这个命令查找任何改变
使用这个命令的一个例子

git bisect start
$ git bisect bad                 # 当前的版本是“坏的”
$ git bisect good v2.6.13-rc2    # 这个版本是好的

输入这些命令(指定一个“好的”和“坏的”之后,git就会使用二分查找来找到介于“好的”和“坏的”之间的一次提交,输出类似下面这句话的一些信息):
Bisecting: 675 revisions left to test after this (roughly 10 steps)
**之后的工作是要自己检查这个版本是“好的”还是“坏的”,这个检查工作git无法帮助我们完成,自己检查得到结果之后,将结果反馈给git,具体做法是:
git bisect good或者git bisect bad
git会继续给出类似上面给出的信息
最后,就没有需要检查的提交版本了,这个命令回打印出第一个错误提交的描述。refs/bisect/bad将会指向这次提交

git bisect reset
该命令会使指针重新指向原来的HEAD(默认是进入二分查找功能之前的HEAD),也就是退出了二分查找这个功能
加上一个可选参数之后可以灵活的改变指针指向的提交:
git bisect reset <commit>
基本的命令就是这些

Git分支相关操作
Lab3就是分支操作操作失误,费了我好长时间😢

git branch
使用这个命令Git会列出现存的分支,当前所在分支会用绿色高亮标注,并用星号标注。

切换分支

git checkout 分支名字
这个命令切换到“分支名字”指定的分支
git chechout -b 分支名字
这个命令新建一个分支,并且切换到该分支

Git命令实在是太多了,官方文档看的头大,只挑出现在接触到的这些,以后遇到新的再更

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值