小乌龟操作Git

2024-03-02 13:36
文章标签 操作 git 乌龟

本文主要是介绍小乌龟操作Git,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、选择小乌龟作为git客户端
最近使用idea来操作git的时候频频出现问题,要么是提交代码的时候少了某些文件,导致克隆下来无法运行,要么是提交速度太慢。

反正是在idea中操作git体验非常不好,所以决定来换一种方式来操作git。从网上搜索一番之后,决定使用小乌龟来进行操作。

2、软件
下面是全面使用流程,从git安装、小乌龟安装软件到语言安装包,这里做一个详细的配置截图。

2.1、软件安装
这里的软件安装包对应的百度网盘链接:

链接:百度网盘 请输入提取码 提取码:16l0

git安装:
除了修改一下对应的安装路径之外,全程不用做任何操作。永远下一步,安装完毕即可。

安装完毕之后,输入命令检查一下是否安装成功。

git --version
同时在空白区域右击鼠标,可以看到git gui和git bash等命令。

在git bash窗口中操作等同于操作于Linux。

TortoiseGit安装:
除了修改一下对应的安装路径、配置git的账号和密码之外,全程下一步;

在TortoiseGit安装过程中有一步需要配置一下git的账号和邮箱,随便在一个位置打开Git bash ,输入以下命令:

git config  user.name
git config user.email    
即可看到对应的账号和邮箱,配置上即可。

在空白区域右击,可以看到几个TortoiseGit标志选项。

汉化包安装
全程下一步即可。语言包安装完毕后可以在TortoiseGit的”设置”中调整语言,设置language为中文简体。

3、Git
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,可以将文件A提交到本地版本库;其他人也在电脑上改了文件A,也可以将文件A提交到自己的本地版本库,这时,你们俩之间只需把本地版本库的内容各自的修改推送给对方(使用共享版本库,例如github、码云...),就可以互相看到对方的修改了。

3.1、概念
3.2.1、版本库和工作目录

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的新增、修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。

创建一个版本库非常简单,可以使用git bash也可以使用TortoiseGit。首先,选择一个合适的地方,创建一个空目录(F:\repository)。

这时候直接使用TortoiseGit来创建

 版本库创建成功,会在此目录下创建一个.git的隐藏目录(叫做版本库),如下所示:

 

版本库:这个.git就是版本库将来文件都需要保存到版本库中

工作目录(工作区):包含“.git”目录的目录,也就是.git目录的上一级目录就是工作目录。只有工作目录中的文件或者是文件夹才能保存到版本库中。

3.2、Git的使用步骤
1:创建版本库

2:添加文件

3:修改文件

4:删除文件

5:删除文件并保留副本

6:将java工程提交到版本库

7:忽略文件(提交版本库时,可忽略某些文件)

1、创建版本库
参考着上面的创建过程。

2、添加文件
在F:\repository目录下创建一个mytest.txt文件

 

 

文本文件变为带“+”号的图标,表示该文件被放置到暂存区中: 

3.工作区和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

什么是工作区(Working Directory)?

​ 工作区就是你在电脑里能看到的目录,比如我的reporstory/repo1文件夹就是一个工作区。

什么是版本库?

​ 在这个工作区目录中的“.git”隐藏文件夹是版本库。

​ Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

这里的stage就是暂存区,master代表是主分支。

我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支(默认是master)。【后期讲解提交到分支上】

默认分支master
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

把暂存区的所有内容提交到当前分支可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改

查看版本库,可点击“版本库浏览器”

mytest.txt就是在当前版本库中提交到本地仓库中的文件。

如果只是添加到了暂存区,那么版本库浏览器是看不到提交了的文件的

为什么需要暂存区

我们这样子来进行思考,要开发一个功能需要一周时间,所以每天都需要来做点事情,但是不可能说每天开发完成之后都要将代码提交到远程仓库。如果别人拉取了最新代码,而且进行了上线,那么将会来造成错误。【其实这里来使用分支介绍比较好】

所以需要一个临时区域存储的地方来存储修改的代码,然后在将代码修改完成之后,提交到分支上去。这样的一个流程来说是比较合适的。

4、修改文件

被版本库管理的文件不可避免的要发生修改,此时只需要直接对文件修改即可。修改完毕后需要将文件的修改提交到版本库。

对文件进行修改之后,没有添加文件时候的添加到暂存区,而且会有红色的感叹号标识已经修改。

在mytest.txt文件上点击右键,然后选择“提交”:

查看修改历史

在开发过程中可能会经常查看代码的修改历史,或者叫做修改日志。来查看某个版本是谁修改的,什么时间修改的,修改了哪些内容。

甚至如果修改有误,用于恢复到历史版本。

可以在修改的文件上点击右键选择“显示日志”来查看文件的修改历史

比较版本差异

还可以看到两次信息提交的版本差异,选中两个文件,右击:比较版本差异

导出指定版本

可以【导出】指定版本,如果编写错误,用于还原到历史版本。

导出指定版本之后,是一个文件,也就是对应着指定版本的文件。

还原修改[风险版本和安全版本]

这里分为两种情况:

①没有提交到本地仓库就想还原;【无法还原已经修改的内容,没有日志显示】

②提交到本地仓库之后还原;【安全,日志历史中有显示】

当文件修改后不想把修改的内容提交,还想还原到未修改之前的状态。此时可以使用“还原”功能

注意:此操作会撤销所有未提交的修改,所以当使用还原操作是需要慎重慎重!!!

但是我想针对的仅仅只是当前的这个文件的提交,不想波及到其他文件。那么还有很好的方式。

利用导出指定版本获取得到指定版本的文件,进行覆盖,就可以获取得到指定版本的信息文件。

这样子操作还没有风险!非常方便使用。

通过日志历史可以查看到对应的变化信息。

5、删除文件
删除文件第一种方式

需要删除无用的文件时可以使用git提供的删除功能直接将文件从版本库中删除。

如果真的想删除文件,可以选择【提交】

如果文件版本库也被删除,此时本地文件彻底丢失了。

删除文件第二种方式

删除文件并保留副本

此时文件删除,但是本地参考仍然存在,执行【提交】可以删除版本库的文件,但是mytest3.txt在本地会保留。

【提交】后,查看仓库,可以查看本地是存在副本文件。

但是本地还是有这个文件的。

4、将java工程提交到版本库

这里是为了做一个测试,随便将一个HelloWorld的项目放到一个目录下

1、创建版本库

利用小乌龟右键创建版本库

2、将文件添加到版本库

点击【确定】完成暂存区添加。

忽略文件
在此工程中,并不是所有文件都需要保存到版本库中的例如“out”目录及目录下的文件就可以忽略。好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

如果使用TortoiseGit的话可以使用菜单项直接进行忽略。

选择保留本地文件。完成后在此文件夹内会多出一个.gitignore文件,这个文件就是文件忽略文件,当然也可以手工编辑。其中的内容就是把.idea和out目录忽略掉。

打开.gitinore文件

3、提交代码到本地仓库

将代码添加到master分支上,其中.gitignore文件也需要添加到暂存区,然后提交到版本库。

然后通过版本库浏览器来进行观察,可以看到对应的java工程下的文件夹。

5、以上步骤总结

这里只是大致罗列了上面的信息。具体的可以参考上面的过程。

6、远程仓库
远程仓库可以是Github,可以是Gitee,也可以是自己公司自己搭建的。

那么必须要来介绍一下现在的远程仓库都支持的协议。HTTPS和SSH方式

6.1、HTTP协议
HTTP操作的时候每次提交的时候都需要传输账号密码校验。这种比较简单,就不来进行过多说明。

基于账号+密码

6.1.1、使用tortoiseGit同步代码到远程仓库
在远程仓库中新建一个仓库,然后使用https方式同步到远程仓库。

因为这里使用的是账号密码,所以这里不需要来进行配置。

这时候推送需要输入“用户名”和“密码”,对应注册远程仓库的账号和密码。但是一般来说,在控制面板中会来记录一下对应的账号密码:

然后查看对应的仓库中,是否有对应的代码操作。

6.2、SSH协议
SSH 为 Secure Shell(安全外壳协议)的缩写,由 IETF 的网络小组(Network Working Group)所制定。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

使用ssh协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密匙(第1步),并把公用密匙放在需要访问的服务器上(第2步)。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

来画个图具体说明一下这里的流程:

从上面可以看到,是基于公钥私钥的,而没有基于账号密码。

6.2.1、SSH秘钥生成

在windows下我们可以使用 Git Bash.exe来生成密钥,可以通过开始菜单或者右键菜单打开Git Bash

 

git bash 执行命令,生命公钥和私钥

命令: ssh-keygen -t rsa -C ‘邮箱’
其中’邮箱’为注册github的登录账号的邮箱(也可使用github注册的账号)
当你创建ssh的时候:-t 表示密钥的类型 ,-b表示密钥的长度,-C 用于识别这个密钥的注释 ,这个注释你可以输入任何内容,很多网站和软件用这个注释作为密钥的名字

一路回车

执行命令完成后,在window本地用户.ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥:

 

6.2.2、秘钥设置
密钥生成后需要在远程仓库上配置公钥才可以顺利访问。公钥也就是id_rsa.pub文件中的内容设置进去。

6.2.3、使用ssh协议同步到远程仓库
同步到远程仓库可以使用git bash也可以使用tortoiseGit

6.2.3.1、使用tortoiseGit同步本地代码到远程仓库
由于TortoiseGit使用的ssh工具是“PuTTY”,git Bash使用的ssh工具是“openSSH”,如果想让TortoiseGit也使用刚才生成的密钥可以做如下配置:

右键,选择“git 同步”

点击管理:

注意】:首先保证:ssh客户端需配置成git使用的客户端

也就是git的安装目录中的usr/bin下面的ssh.exe文件配置。

这里只是配置了工具连接远程仓库的方式,而并没有指定远程仓库的地址。所以还需要来进行修改。

说明:

origin:可以随便写的

Url:远程仓库的地址

推送URL:也是相同的(可以不填写)

Putty密钥:选择刚才生成的密钥中的私钥

私钥可以直接选择对应的文件进来即可。

推送】:即push指令

查看远程仓库,即可看到最新的代码。

7、从远程仓库获取克隆代码

克隆远程仓库也就是从远程把仓库复制一份到本地,克隆后会创建一个新的本地仓库。选择一个任意部署仓库的目录,然后克隆远程仓库。使用远程仓库的mytest3为例,使用https协议克隆。

在任意目录点击右键:

查看:F/repository/clone_repo目录

 

8、从远程仓库获取拉取代码

Git中从远程的分支获取最新的版本到本地有这样2个命令:

1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge(合并代码)
 
2. git pull:相当于是从远程获取最新版本并merge到本地,上述命令其实相当于git fetch 和 git merge

在实际使用中,git fetch更安全一些,但是不常用!因为在merge前,我们可以查看更新情况,然后再决定是否合并。

git pull更常用,因为即得代码又可以自动合并

如果使用TortoiseGit的话可以从右键菜单中点击“拉取”(pull)或者“获取”(fetch)

8.1、版本冲突
这个是在提交代码中经常遇到的事情。因为不同的开发人员再对同一个文件来进行操作之后,最终git也无法判断到底使用哪个开发者提交的代码来解决问题。所以交给开发者们自己来进行决定选择哪个作为最终版本。

版本冲突是怎么产生的?分析一波:

开发者A需要在F文件做一些修改,开发者B也需要在F文件中做一些修改。

开发者A先提交,那么没有任何问题;开发者B后提交,那么就有了问题。因为上一个版本中,开发者A\B的代码是一样的,但是对于开发者A来说,他只不过是在上一个版本中做了一个修改成为了一个新版本;而对于开发者B来说,也成了一个新版本,而不是在开发者A的基础之上衍生的新版本。所以导致了冲突。

冲突也很好解决,到底是采用你的?采用我的?还是二者都采用?取决于开发者。

演示一下具体的案例:

这个时候,出现版本冲突,先拉取(pull)远程仓库的代码到本地。

编辑冲突:

合并成一个新的文件。如上所示,将会合并成一个新文件。

这里的新文件,我们可以自行来进行修改即可!!!!

修改完成然后提交本地仓库,再次提交到远程仓库中去。

9、分支介绍
在我们每次的提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD指针严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

如图:只要有本地仓库就有master分支:

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

那么也就是说,只要来操作分支,就可以知道当前分支的提交点在哪里。

切换分支,实际上就是切换HEAD的指向,指向当前分支最新的提交。

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并: 

所以Git合并分支也很快!就改改指针,工作区内容也不变!

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支

9.1、使用TortoiseGit实现分支管理

使用TortoiseGit管理分支就很简单。

1、创建分支

在本地仓库文件夹中点击右键,然后从菜单中选择“创建分支”:

 

如果想创建完毕后直接切换到新分支可以勾选“切换到新分支”选项或者从菜单中选择“切换/检出”来切换分支:

右键查看,再提交,指向新的分支。 

 

2、合并分支
分支切换到dev后就可以对工作区的文件进行修改,然后提交到dev分支,原来的master分支不受影响。例如我们修改mytest.txt中的内容,然后提交到dev分支。

注意:两个分支在进行生成之后就是彼此独立的。

切换到dev分支上,修改文件,同时提交到dev的分支上

 

切换到master分支,我们在修改mytest.txt,同时新建master.txt文件,并同时提交,发现没有报错信息。

不难发现,我们切换到master分支/dev分支后还是原来的内容:2个分支的开发互不影响,相互独立的。

最后,我们将dev分支的内容合并到master分支,当前分支为master。从右键菜单中选择“合并”:

再查看mytest.txt、dev.txt、master.txt的内容就已经更新了: 

总结 

这篇关于小乌龟操作Git的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/766297

相关文章

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

uva 10154 DP 叠乌龟

题意: 给你几只乌龟,每只乌龟有自身的重量和力量。 每只乌龟的力量可以承受自身体重和在其上的几只乌龟的体重和内。 问最多能叠放几只乌龟。 解析: 先将乌龟按力量从小到大排列。 然后dp的时候从前往后叠,状态转移方程: dp[i][j] = dp[i - 1][j];if (dp[i - 1][j - 1] != inf && dp[i - 1][j - 1] <= t[i]

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA