git 原理详解及实用指南_Git的实用学习练习

git 原理详解及实用指南

为了尝试使用Git进行练习,我开始在Opensource.com上阅读文档和此处的一些文章,特别是Seth Kenlon的介绍。 阅读完之后,该进行一些实际练习了。

像许多计算机科学专业的本科生一样,我也完成了编程作业和实验。 我保存了所有这些工作,那么为什么不使用此代码创建练习Git存储库呢? 然后,我可以运行代码并解决所有问题,这将使我练习进行提交和创建分支。 通过这样做,我可以证明基本的Git熟练程度。

我对版本控制并不陌生。 我曾经使用过CVSSubversion等较旧的工具,并且在多年前曾经是Borland(现为Micro Focus)StarTeam的管理员。 但是,我的Git经验仅限于Atlassian Bitbucket的少量使用。 我不是Git大师。

是时候学习了。

评估旧代码

在不熟悉GUI工具和GitHub和GitLab等网站之前,我想花一些时间在命令行上,以充分了解Git的工作原理。 我首先检查是否已安装Git,因此尝试运行git命令。 但是,它尚未安装,但是使用分发程序包管理器很容易解决此问题。 例如,在Ubuntu上,您可以运行sudo apt install git来安装此工具。 在Fedora上sudo dnf install git可以完成工作。

运行包管理器后,快速检查确认已安装Git:


   
   
$ git --version
git version 2.17.1

此时,我找到了旧文件,并将它们重新排列到一个可以正常工作的目录结构中。 这些文件来自我的CSC121类的作业(实验2)。 目的是编写一个扮演加油站角色的应用程序。 用户必须选择燃料等级和加仑数来购买。 等级决定了每加仑的成本,然后将其乘以加仑数得出总购买成本。 我仍然拥有C源代码和编译后的二进制文件。


   
   
~ / GIT / CSC121 / lab2$ file *
Lab2: ELF 32 -bit LSB executable, Intel 80386 , version 1 ( SYSV ) , dynamically linked, interpreter / lib / ld-, not stripped
Lab2.c: C source , ASCII text

此源代码只有33行。 我很想知道这个20年前编译的二进制文件是否还会执行。


   
   
~/GIT/CSC121/lab2$ ./Lab2
      GoGo Gas station
enter type of gas;r-regular;p-premium;s-super:

它成功的事实证明了向后兼容性!

我开始考虑可以对代码进行哪些更改。 我想先看看代码是否正确运行,再完成一些测试。 例如,购买10加仑优质汽油会导致:


   
   
p
enter quantity;# of gallons:
10
type of gas pumped:premium
price of premium gas per gallon:$1.30
your total cost is:$ 13.000000

我的第一个想法是,“哇,20年前汽油便宜!” 有了这个简单的测试,我确定我确实有一个小的有用的代码项目可以用作Git练习。

设置存储库

Git入门的第一步是创建一个存储库。 我还配置了一些入门知识,例如设置Git的身份,该身份由我的用户名和电子邮件地址定义。 要设置我的身份,请确保我位于要使用的工作目录中,在本例中为我的lab2目录。

创建存储库的命令很简单:


   
   
$ git init
Initialized empty Git repository in /home/alan/GIT/CSC121/lab2/.git/

我今天经常使用的命令是git status ,用于检查存储库的状态。 在我的新存储库上运行它会导致:


   
   
$ git status
On branch master

No commits yet

Untracked files:
(use "git add <file>..." to include in what will be committed)

      Lab2
      Lab2.c

nothing added to commit but untracked files present (use "git add" to track)

以上结果揭示了重要信息。 在这种情况下,他们告诉我我目前在master分支上,没有任何事情发生。 Git还将我的工作目录中的两个文件列出为未跟踪文件,因为尚未添加它们。 下一步是添加这些文件。

是否添加已编译的二进制文件取决于您的用法。 通常,二进制文件存储在Binary Repository中,并且不会添加到Git中,因为Git无法区分二进制文件。 就我而言,我想继续使用这个特定的二进制文件。 我使用命令git add将这两个文件添加到仓库中。

该命令不会产生任何输出,但是再次检查状态表明Git不再将文件列出为未跟踪:


   
   
Changes to be committed:
(use "git rm --cached <file>..." to unstage)

      new file: Lab2
      new file: Lab2.c

添加文件后,我使用-m选项添加了一条消息,进行了git commit

$ git commit -m“ Lab2第一次提交”

而已! 存储库已被填充。 再次检查状态表明一切正常:


   
   
$ git status
On branch master
nothing to commit, working tree clean

为了加强我的学习经验,我重复了几次此过程,很快就适应了与维护存储库有关的最常见任务。 我可以使用git add添加文件,以及使用git rm删除文件。 我也知道如何进行这些更改。 下一个要解决的问题稍微复杂一点: git branch

使用Git

Git分支用于分隔工作。 当新功能正在开发中时,通常会使用此策略,但在准备好正式发布之前,必须保持不同。

我认为创建一个名为original的分支来存储原始文件是一个好主意。 这样,如果我有不同的分支,并准备好合并回master,则不会覆盖旧版本。 我使用git branch命令执行此操作,并指定了新分支的名称:

git分支原始

此步骤将主服务器复制到新分支。 要列出分支,我使用不带参数的git branch命令。 星号表示我的活动分支:


   
   
$ git branch
* master
  original

我使用git checkout查看我的新分支。 git分支再次使用星号表示我的活动分支:


   
   
$ git checkout original
Switched to branch 'original'

$ ls
Lab2 Lab2.c

$ git branch
  master
* original

早些时候,我在原始代码中确定了要更改的内容。 因此,为了在保留当前代码的同时使新版本井井有条,我创建了另一个分支专门用于Fix2019。 我将其设为新的活动分支,并删除了二进制文件。


   
   
$ git branch Fix2019 master
$ git checkout Fix2019
Switched to branch 'Fix2019'

$ git rm Lab2
rm 'Lab2'

此时,我编辑了代码以更新价格。 溢价绝对不再是1.30美元,因此我将其提高到2.75美元。 实际更新的C代码如下所示:


   
   
{
printf ( "type of gas pumped:premium \n " ) ;
printf ( "price of premium gas per gallon:$2.75 \n " ) ;
price = 2.75 * quantity ;
printf ( "your total cost is:$ %f \n " , price ) ;
}

我保存了文件并尝试重新编译:

$ cc Lab2.c -o Lab2

太好了,已编译! 作为测试,我再次运行了二进制程序,又购买了10加仑的高级汽油(记住20年前的总成本为13.00美元)。


   
   
$ ./Lab2
        GoGo Gas Station
enter type of gas;r-regular;p-premium;s-super:
p
enter quantity;# of gallons:
10
type of gas pumped:premium
price of premium gas per gallon:$2.75
your total cost is:$ 27.500000

那十加仑现在要价$ 27.50! 我可能不得不走更多路!

命令git status总结了我已采取的所有操作:


   
   
$ git status
On branch Fix2019
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    Lab2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   Lab2.c

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Lab2

我必须将更改提交到Fix2019分支。 我使用git add添加了更新的代码和新的二进制文件 ,然后是git commit


   
   
$ git add .
$ git status
On branch Fix2019
Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

      modified: Lab2
      modified: Lab2.c

$ git commit -m "Update gas prices"
[Fix2019 fba4b56] Update gas prices
2 files changed, 3 insertions(+), 3 deletions(-)
rewrite Lab2 (100%)

在此过程中的某个时候,我可能想用较新的代码更新master分支。 通过将包含新代码的分支合并到master分支中来完成此任务。 在此示例中,这意味着我将把Fix2019合并到master分支中。 合并是从接收新代码的分支完成的,因此首先我必须签出master分支:

git checkout主

旧价格的grep显示主分支仍包含旧代码:


   
   
$ grep $1.30 Lab2.c
   printf ("price of premium gas per gallon:$1.30 \n");

因此,是时候合并了。 新价格的最终grep将确认合并:


   
   
$ git merge Fix2019

$ grep $2.75 Lab2.c
   printf ("price of premium gas per gallon:$2.75 \n");

结论

这项练习帮助我开始使用Git。 它仅涵盖本地存储库的基础知识,而Git作为分布式版本控制系统提供了更多功能,但这足以使我起步。 现在轮到你了。 找到一个简单的项目,将其加载到Git中,然后开始学习。

翻译自: https://opensource.com/article/19/5/practical-learning-exercise-git

git 原理详解及实用指南

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值