git的正确打开方式以及基本操作

git的正确打开方式

什么是git

Git是一个分布式版本控制系统,用于跟踪文件的变化和协调多个人在同一项目上的工作。它最初由Linus Torvalds于2005年创建,最初旨在管理Linux内核的开发。Git的设计目标是速度、数据完整性和支持分布式、非线性工作流程。

Git的主要特点包括:

  • 分布式:每个开发者都有一个完整的代码仓库的副本,可以在本地进行修改和提交,与其他开发者进行协作时可以互相推送和拉取代码。
  • 非线性工作流程:Git支持并鼓励开发者在本地创建多个分支,每个分支上可以独立进行开发,然后将更改合并到主分支上。这种非线性工作流程使得团队成员可以并行开发不同的功能,而不会相互干扰。
  • 快速和高效:Git的设计目标之一是快速执行操作。由于每个开发者都有一个完整的本地仓库,大部分操作可以在本地完成,不需要每次都从服务器拉取代码。
  • 数据完整性:Git使用SHA-1哈希算法对文件内容进行校验,以确保数据的完整性和一致性。每次提交都会生成一个唯一的哈希值,用于标识该提交。
  • 分支管理:Git提供了强大的分支管理功能,开发者可以轻松创建、切换、合并和删除分支。这使得并行开发和功能测试变得更加容易和灵活。

Git已成为许多开发团队和开源社区的首选版本控制系统,广泛用于软件开发、项目管理和协作。GitHub是一个基于Git的托管平台,提供了代码托管、版本控制、协作工具和项目管理的功能,使得团队成员可以更好地协作开发和共享代码。

git的原理

数据库 (Repository) 是记录文件或目录状态的地方,存储着内容修改的历史记录。在数据库的管理下,把文件和目录修改的历史记录放在对应的目录下。

Git的数据库分为远程数据库和本地数据库的两种。

  • 远程数据库: 配有专用的服务器,为了多人共享而建立的数据库。
  • 本地数据库: 为了方便用户个人使用,在自己的机器上配置的数据库。

数据库分为远程和本地两种。平时用手头上的机器在本地数据库上操作就可以了。如果想要公开在本地数据库中修改的内容,把内容上传到远程数据库就可以了。另外,通过远程数据库还可以取得其他人修改的内容。

若要把文件或目录的添加和变更保存到数据库,就需要进行提交。

执行提交后,数据库中会生成上次提交的状态与当前状态的差异记录(也被称为revision)。

如下图,提交是以时间顺序排列状态被保存到数据库中的。凭借该提交和最新的文件状态,就可以知道过去的修改记录以及内容。

系统会根据修改的内容计算出没有重复的40位英文及数字来给提交命名。指定这个命名,就可以在数据库中找到对应的提交。

在Git管理下,大家实际操作的目录被称为工作树。

在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域。

Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库。因此,要提交文件,首先需要把文件加入到索引区域中。

所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。

git实际操作实战

git配置用户信息

安装Git之后,请输入您的用户名和电子邮件地址。该设置操作在安装Git后进行一次就够了。这些信息将作为提交者信息显示在更新历史中。

shell 复制代码
$ git config --global user.name "<用户名>"
$ git config --global user.email "<电子邮件>"

新建项目仓库

首先在你的项目目录之下使用git指令新建项目目录

shell 复制代码
$ git init

完整代码如下:

shell 复制代码
$ mkdir YourProjectName
$ cd YourProjectName
$ git init

提交本地修改

在项目目录新建一个文件,然后将文件添加到数据库。

首先在tutorial目录里新建一个名为「sample.txt」的文本文件,请在文件中输入以下的内容:

随便写一段测试文本
​
夫天地者,万物之逆旅也;光阴者,百代之过客也。
而浮生若梦,为欢几何?见者众矣,知者寡矣。
悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。
舟遥遥以轻飏,风飘飘而吹衣。问征夫以前路,恨晨光之熹微。
乃瞻衡宇,载欣载奔。僮仆欢迎,稚子候门。三径就荒,松菊犹存。
携幼入室,有酒盈樽。引壶觞以自酌,眄庭柯以怀人。
指西窗之瑶席,兴尽晚回舟。衣沾不足惜,但使愿无悔。
取次花丛懒回顾,倚门倚柱思长路。

请使用status命令确认工作树和索引的状态。

shell 复制代码
$ git status

执行status命令以确认tutorial目录的状态。

shell 复制代码
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#     sample.txt
nothing added to commit but untracked files present (use "git add" to track)

从status响应我们可以看到'sample.txt'目前不是历史记录对象。请首先把'sample.txt'加入到索引,就可以追踪它的变更了。

将文件加入到索引,要使用add命令。在指定加入索引的文件。用空格分割可以指定多个文件。

shell 复制代码
$ git add <file>..

指定参数「.」,可以把所有的文件加入到索引。

shell 复制代码
$ git add .

现在,我们把sample.txt加入到索引然后确认一下。

shell 复制代码
$ git add sample.txt
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#     new file:   sample.txt
#

既然sample.txt已加入到索引,我们就可以提交文件了。请执行如下显示的commit命令。

ruby 复制代码
$ git commit -m " 提交信息 "

执行commit命令之后确认状态。

shell 复制代码
$ git commit -m "first commit"
[master (root-commit) 116a286] first commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sample.txt
​
$ git status
# On branch master
nothing to commit (working directory clean)

从status响应我们可以看到没有新的变更要提交。

使用log命令,我们可以在数据库的提交记录看到新的提交。

sql 复制代码
$ git log
commit ac56e474afbbe1eab9ebce5b3ab48ac4c73ad60e
Author: eguchi <eguchi@nulab.co.jp>
Date:   Thu Jul 12 18:00:21 2012 +0900
​
    first commit

git推送到远端数据库

为了将本地数据库的修改记录共享到远程数据库,必须上传本地数据库中存储的修改记录。

为此,需要在Git执行推送(Push)操作。执行Push之后,本地的修改记录会被上传到远程数据库。所以远程数据库的修改记录就会和本地数据库的修改记录保持同步。

您可以给远程数据库取一个别名。这样,下次推送的时候就不需要输入长串的远程数据库地址了。在这个教程里,我们的远程数据库命名为"origin"。

请使用remote指令添加远程数据库。在处输入远程数据库名称,在处指定远程数据库的URL。

shell 复制代码
$ git remote add <name> <url>

使用push命令向数据库推送更改内容。处输入目标地址,处指定推送的分支。我们将在高级篇详细地对分支进行说明。

shell 复制代码
$ git push <repository> <refspec>...

运行以下命令便可向远程数据库'origin'进行推送。当执行命令时,如果您指定了-u选项,那么下一次推送时就可以省略分支名称了。但是,首次运行指令向空的远程数据库推送时,必须指定远程数据库名称和分支名称。

当被要求输入用户名和密码,请使用您的贝格乐用户名和密码。

shell 复制代码
$ git push -u origin master
Username: <用户名>
Password: <密码>
Counting objects: 3, done.
Writing objects: 100% (3/3), 245 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://nulab.backlog.jp/git/BLG/tutorial.git
 * [new branch]      master -> master

clone远端数据库

进行克隆(Clone)操作就可以复制远程数据库。

执行克隆后,远程数据库的全部内容都会被下载。之后您在另一台机器的本地数据库上进行操作。

使用clone指令可以复制数据库,在指定远程数据库的URL, 在指定新目录的名称。

shell 复制代码
$ git clone <repository> <directory>

执行以下指令后,会在目录(tutorial2) 复制远程数据库。

shell 复制代码
$ git clone https://nulab.backlog.jp/git/BLG/tutorial.git tutorial2
Cloning into 'tutorial2'...
Username: <用户名>
Password: <密码>
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.

从远端数据库进行拉取pull

若是共享的远程数据库由多人同时作业,那么作业完毕后所有人都要把修改推送到远程数据库。然后,自己的本地数据库也需要更新其他人推送的变更内容。

进行拉取(Pull) 操作就可以把远程数据库的内容更新到本地数据库。

进行拉取(Pull) 操作,就是从远程数据库下载最近的变更日志,并覆盖自己本地数据库的相关内容。

使用pull指令进行拉取操作。省略数据库名称的话,会在名为origin的数据库进行pull。

xml 复制代码
$ git pull <repository> <refspec>...

请执行以下指令。

ruby 复制代码
$ git pull origin master
Username: <用户名>
Password: <密码>
From https://nulab.backlog.jp/git/BLG/tutorial
 * branch            master     -> FETCH_HEAD
Updating ac56e47..3da09c1
Fast-forward
 sample.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

sample.txt文档的内容已更新。 我们使用log指令来确认历史记录是否已更新。

sql 复制代码
$ git log
commit 3da09c1134a41f2bee854a413916e4ebcae7318d
Author: eguchi <eguchi@nulab.co.jp>
Date:   Thu Jul 12 18:02:45 2012 +0900
​
    添加add的说明
​
commit ac56e474afbbe1eab9ebce5b3ab48ac4c73ad60e
Author: eguchi <eguchi@nulab.co.jp>
Date:   Thu Jul 12 18:00:21 2012 +0900
​
    first commit

合并git仓库修改记录

在执行pull之后,进行下一次push之前,如果其他人进行了推送内容到远程数据库的话,那么你的push将被拒绝。

这种情况下,在读取别人push的变更并进行合并操作之前,你的push都将被拒绝。这是因为,如果不进行合并就试图覆盖已有的变更记录的话,其他人push的变更(图中的提交C)就会丢失。

合并的时候,Git会自动合并已有的变更点!不过,也存在不能自动合并的情况。

如果远程数据库和本地数据库的同一个地方都发生了修改的情况下,因为无法自动判断要选用哪一个修改,所以就会发生冲突。

Git会在发生冲突的地方修改文件的内容,如下图。所以我们需要手动修正冲突。

==分割线上方是本地数据库的内容,下方是远程数据库的编辑内容。

如下图所示,修正所有冲突的地方之后,执行提交。

相关推荐
Find25 天前
MaxKB 集成langchain + Vue + PostgreSQL 的 本地大模型+本地知识库 构建私有大模型 | MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 14.数组元素之和最小化 | 豆包MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 25.DNA序列编辑距离 | 豆包MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 9.超市里的货物架调整 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵1 个月前
分而治之,主题分片Partition | 豆包MarsCode AI刷题
青训营笔记
三六1 个月前
刷题漫漫路(二)| 豆包MarsCode AI刷题
青训营笔记
tabzzz1 个月前
突破Zustand的局限性:与React ContentAPI搭配使用
前端·青训营笔记
Serendipity5651 个月前
Go 语言入门指南——单元测试 | 豆包MarsCode AI刷题;
青训营笔记
wml1 个月前
前端实践-使用React实现简单代办事项列表 | 豆包MarsCode AI刷题
青训营笔记
用户44710308932421 个月前
详解前端框架中的设计模式 | 豆包MarsCode AI刷题
青训营笔记